Unity2019使用Gradle命令行(編譯)出安卓包


在我所經歷的項目組中有這幾種方法來生成APK

  1. 直接在Unity生成APK,可以接入SDK

  2. 使用Unity導出Android Studio工程手動生成APK

  3. 使用Unity導出Android Studio工程命令行離線生成APK

這里記錄一下我在項目組使用Android Studio出包的筆記。

使用Unity導出Android Studio工程前建議查看我之前的文章《Unity2019及Unity2020打包android的環境配置》,主要介紹替換或修改Unity安裝目錄下的baseProjectTemplate.gradle,把鏈接指向國內能加快速度。

說明:我把Android Studio簡稱為AS,AS生成APK使用gradle來構建。

Gradle簡介

Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。Gradle 構建腳本使用的是 Groovy 或 Kotlin 的特定領域語言來編寫的,而不是傳統的XML。

當前官方支持的語言為Java、Groovy、Scala、C++、Swift、JavaScript等以及Spring框架。

使用 Gradle 的優勢

  1. 自動處理包相依關系 - 取自 Maven Repos 的概念
  2. 自動處理布署問題 - 取自 Ant 的概念
  3. 條件判斷寫法直覺 - 使用 Groovy 語言

過去 Java 開發者常用 Maven 和 Ant 等工具進行封裝布署的自動化,或是兩者兼用,不過這兩個包彼此有優缺點,如果頻繁改變相依包版本,使用 Ant 相當麻煩,如果瑣碎工作很多,Maven 功能不足,而且兩者都使用 XML 描述,相當不利於設計 if、switch 等判斷式,即使寫了可讀性也不佳,而 Gradle 改良了過去 Maven、Ant 帶給開發者的問題,至今也成為 Android Studio 內置的封裝布署工具。

下載和配置

Gradle下載:https://gradle.org/releases/

配置方法:需要把gradle解壓后的bin路徑配置到環境變量的Path中,示例:D:\gradle-7.1\bin

Unity導出AS工程文檔:https://docs.unity3d.com/Manual/android-gradle-overview.html

我打包使用的軟件環境:

准備知識:

命令行生成APK

在開始生成APK前需要做一些准備工作:在 AS 的 Terminal 中使用命令 gradlew --warning-mode all 可以打印出當前 gradle 存在的所有警告信息

檢查簽名信息

檢查AndroidStuiod工程根目錄下的build.gradle文件中的keystore,alias,密碼配置是否正確:

    signingConfigs{
        release{
            keyAlias 'xxxxxx'
            keyPassword 'xxxxxx'
            storeFile file('D:/android_sdk/android.keystore')
            storePassword 'xxxxxx'
            v2SigningEnabled true
        }
		debug{
			keyAlias 'xxxxxx'
			keyPassword 'xxxxxx'
			storeFile file('D:/android_sdk/android.keystore')
			storePassword 'xxxxxx'
			v2SigningEnabled true
		}
    }

運行命令

在CMD中進入到AS工程的根目錄,然后在命令行輸入:gradle assembleRelease,就會生成APK。

可以生成release和debug兩種APK,命令如下:

radle clean
gradle assembleRelease
  1. gradle clean 下載Gradle的一些依賴
  2. gradle assembleDebug 在build\Output中生成debug簽名的apk
  3. gradle assembleRelease 在build\Output中生成Release簽名的apk
  4. 當CMD中出現BUILD SUCCESSFUl恭喜你!Gradle打包成功啦!

如果在CMD中build失敗,可以嘗試在AS的命令行窗口中,輸入:gradle assembleRelease

PS. 下面這個方法過時了,在android 的官網上已經去掉此部分了

​ 在AS2.3及更高版本且minsdkVersion>21時,AS會使用新版的dex打包,速度更快

​ 在命令行也調用新版本的打包:./gradlew -Pandroid.injected.build.api=26 assembleDevDebug

離線生成apk

在項目的根目錄下有gradlew.bat文件,執行命令如下:

cd %~dp0
gradlew.bat clean
gradlew.bat assembleRelease --offline

遇到問題

build出錯

首次出包時未安裝好依賴,會報依賴找不到的問題,日志如下:

解決辦法:通過Android Stuio打開項目,AS會自動下載依賴,下載完依賴之后,使用命令行還是報一樣的錯誤,現在是使用AS手動操作來出包。

PS E:\AndroidExport\resTestTtzg001_20210621v000\resTestTtzg001> gradle assembleRelease

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'resTestTtzg001'.
> Could not resolve all dependencies for configuration ':classpath'.
   > Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository 'maven2(http://maven.aliyun.com/nexus/content/repositories/jcenter)' to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/7.1/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details.

不支持在存儲庫中使用不安全的協議,沒有顯式的選擇。

重定向到安全協議(如HTTPS)或允許不安全協議

allowInsecureProtocol:指定是否可以接受通過不安全的HTTP連接與存儲庫通信

兩種辦法解決:

  1. 在build.gradle 中添加這行配置即可
repositories {
	...
    maven {
	    url = uri("http://example.com")
        allowInsecureProtocol = true
        ...
    }
}
  1. 把上述出問題的阿里雲鏈接可以把http改成https也一樣可以訪問。

AS無法訪問host

Unknown host 'mirrors.opencas.cn'. You may need to adjust the proxy settings in Gradle

  1. 在AS中將Settings 下的Http Proxy 設置為 No Proxy 記得Apply

  2. 打開用戶目錄下的:C:\Users\qing.gradle\gradle.properties,刪除里面配置的mirrors.opencas.cn

gradlew 和 gradle命令的區別

gradlew:gradle wrapper的簡寫,在Android studio的指定是在gradle/wrapper/gradle-wrapper.properties 中

gradle:對於系統gradle其存放在 ~/.gradle 下面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM