在我所經歷的項目組中有這幾種方法來生成APK
-
直接在Unity生成APK,可以接入SDK
-
使用Unity導出Android Studio工程手動生成APK
-
使用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 的優勢
- 自動處理包相依關系 - 取自 Maven Repos 的概念
- 自動處理布署問題 - 取自 Ant 的概念
- 條件判斷寫法直覺 - 使用 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
我打包使用的軟件環境:
- Unity版本:2019.3.7f1
- Android Studio 4.1.3
- gradle:7.1
- Jdk:1.8.0_181
- ndk:https://dl.google.com/android/repository/android-ndk-r19-windows-x86_64.zip
- win10 企業版 ltsc 1809
准備知識:
- 通過Unity導出的Android Studio和Google安卓原生工程的結構圖對比
- 不同版本的Unity要求的NDK版本和兩者對應關系表(Unity NDK Version Match)
- Unity2019使用Android Studio 4出安卓包
命令行生成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
- gradle clean 下載Gradle的一些依賴
- gradle assembleDebug 在build\Output中生成debug簽名的apk
- gradle assembleRelease 在build\Output中生成Release簽名的apk
- 當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連接與存儲庫通信
兩種辦法解決:
- 在build.gradle 中添加這行配置即可
repositories {
...
maven {
url = uri("http://example.com")
allowInsecureProtocol = true
...
}
}
- 把上述出問題的阿里雲鏈接可以把http改成https也一樣可以訪問。
AS無法訪問host
Unknown host 'mirrors.opencas.cn'. You may need to adjust the proxy settings in Gradle
-
在AS中將Settings 下的Http Proxy 設置為 No Proxy 記得Apply
-
打開用戶目錄下的:C:\Users\qing.gradle\gradle.properties,刪除里面配置的mirrors.opencas.cn
gradlew 和 gradle命令的區別
gradlew:gradle wrapper的簡寫,在Android studio的指定是在gradle/wrapper/gradle-wrapper.properties 中
gradle:對於系統gradle其存放在 ~/.gradle 下面