Android打包之配置構建變體
宣告依賴項
下面的示例可以在 app/
模組的 build.gradle
檔案中宣告三種不同型別的直接依賴項:
android {...}
...
dependencies {
// The 'compile' configuration tells Gradle to add the dependency to the
// compilation classpath and include it in the final package.
// Dependency on the "mylibrary" module from this project
compile project(":mylibrary")
// Remote binary dependency
compile 'com.android.support:appcompat-v7:27.1.0'
// Local binary dependency
compile fileTree(dir: 'libs', include: ['*.jar'])
}
下面逐一介紹了每種直接依賴項。
-
模組依賴項
compile project(':mylibrary')
行宣告瞭一個名為“mylibrary”的本地 Android 庫模組作為依賴項,並要求構建系統在構建應用時編譯幷包含該本地模組。 -
遠端二進位制依賴項
compile 'com.android.support:appcompat-v7:27.1.0'
行會通過指定其 JCenter 座標,針對 Android 支援庫的 27.1.0 版本宣告一個依賴項。預設情況下,Android Studio 會將專案配置為使用頂級構建檔案中的 JCenter 儲存區。當您將專案與構建配置檔案同步時,Gradle 會自動從 JCenter 中抽取依賴項。或者,您也可以通過使用 SDK 管理器下載和安裝特定的依賴項。 -
本地二進位制依賴項
compile fileTree(dir: 'libs', include: ['*.jar'])
行告訴構建系統在編譯類路徑和最終的應用軟體包中包含app/libs/
目錄內的任何 JAR 檔案。如果您有模組需要本地二進位制依賴項,請將這些依賴項的 JAR 檔案複製到專案內部的/libs
中。
配置依賴項
您可以使用特定的配置關鍵字告訴 Gradle 如何以及何時使用某個依賴項,例如前述示例中的 compile
關鍵字。下面介紹了您可以用來配置依賴項的一些關鍵字:
-
compile
指定編譯時依賴項。Gradle 將此配置的依賴項新增到類路徑和應用的 APK。這是預設配置。
-
apk
指定 Gradle 需要將其與應用的 APK 一起打包的僅執行時依賴項。您可以將此配置與 JAR 二進位制依賴項一起使用,而不能與其他庫模組依賴項或 AAR 二進位制依賴項一起使用。
-
provided
指定 Gradle 不與應用的 APK 一起打包的編譯時依賴項。如果執行時無需此依賴項,這將有助於縮減 APK 的大小。您可以將此配置與 JAR 二進位制依賴項一起使用,而不能與其他庫模組依賴項或 AAR 二進位制依賴項一起使用。
此外,您可以通過將構建變體或測試源集的名稱應用於配置關鍵字,為特定的構建變體或測試源集配置依賴項,如下例所示。
dependencies {
...
// Adds specific library module dependencies as compile time dependencies
// to the fullRelease and fullDebug build variants.
fullReleaseCompile project(path: ':library', configuration: 'release')
fullDebugCompile project(path: ':library', configuration: 'debug')
// Adds a compile time dependency for local tests.
testCompile 'junit:junit:4.12'
// Adds a compile time dependency for the test APK.
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}
配置簽署設定
除非您為釋出構建顯式定義簽署配置,否則,Gradle 不會簽署釋出構建的 APK。您可以輕鬆建立釋出金鑰並使用 Android Studio 簽署釋出構建型別。
要使用 Gradle 構建配置為您的釋出構建型別手動配置簽署配置:
建立金鑰庫。金鑰庫是一個二進位制檔案,它包含一組私鑰。您必須將金鑰庫存放在安全可靠的地方。
建立私鑰。私鑰代表將通過應用識別的實體,如某個人或某家公司。
-
將簽署配置新增到模組級
build.gradle
檔案中:... android { ... defaultConfig {...} signingConfigs { release { storeFile file("myreleasekey.keystore") storePassword "password" keyAlias "MyReleaseKey" keyPassword "password" } } buildTypes { release { ... signingConfig signingConfigs.release } } }
要生成簽署的 APK,請從選單欄中選擇 Build > Generate Signed APK。現在,app/build/apk/app-release.apk
中的軟體包已使用您的釋出金鑰進行簽署。
注:將釋出金鑰和金鑰庫的密碼放在構建檔案中並不安全。作為替代方案,您可以將此構建檔案配置為通過環境變數獲取這些密碼,或讓構建流程提示您輸入這些密碼。
要通過環境變數獲取這些密碼:
storePassword System.getenv("KSTOREPWD")
keyPassword System.getenv("KEYPWD")
要讓構建流程在您要從命令列呼叫此構建時提示您輸入這些密碼:
storePassword System.console().readLine("\nKeystore password: ")
keyPassword System.console().readLine("\nKey password: ")
在完成此流程後,您可以分發您的應用並在 Google Play 上釋出它。
警告:將金鑰庫和私鑰存放在安全可靠的地方,並確保您為其建立了安全的備份。如果您將應用釋出到 Google Play,隨後丟失了您用於簽署應用的金鑰,那麼,您將無法向您的應用釋出任何更新,因為您必須始終使用相同的金鑰簽署應用的所有版本。
參考文件:配置構建變體
相關文章
- Gradle for Android ( 構建變體 )GradleAndroid
- Android中的Gradle之配置及構建優化AndroidGradle優化
- Android 多渠道打包配置Android
- 使用Jenkins自動構建Android應用打包並上傳JenkinsAndroid
- Mac 環境下 Android 使用 Jenkins 構建自動化打包MacAndroidJenkins
- 這應該是最全的Jenkins Android自動打包構建教程JenkinsAndroid
- Android 應用構建速度提升Gradle配置優化AndroidGradle優化
- jenkins配置android自動打包平臺JenkinsAndroid
- Zepto自定義模組打包構建
- 從零構建Android工程Android
- 優雅的構建 Android 專案之磁碟快取(DiskLruCache)Android快取
- 打包配置
- iOS自動構建打包釋出指令碼iOS指令碼
- spring構建神器(等於打包加執行)Spring
- Android Gradle基於引數化配置實現差異化構建AndroidGradle
- webpack--效能優化之打包構建速度和程式碼除錯優化Web優化除錯
- 打包策略 自定義打包配置
- Android Note - 構建速度優化Android優化
- Android Note - 使用構建分析工具Android
- 使用CMake構建Android JNI工程Android
- Gradle 與 AGP 構建 API: 配置您的構建檔案GradleAPI
- AB打包配置
- 構建api gateway之 基於etcd實現動態配置同步APIGateway
- Android多渠道打包Android
- Android APK打包流程AndroidAPK
- 知識圖譜構建之實體關係挖掘
- 前後端分離專案:下載、執行、配置、構建、打包、部署:全部實戰演習後端
- Android多媒體之認識MP3與內建媒體播放(MediaPlayer)Android
- Android 第一次構建Android
- Android 自定義構建型別 BuildTypeAndroid型別UI
- [譯]改善 Android Studio 的構建速度Android
- 用Gradle 構建你的android程式GradleAndroid
- Android JNI開發系列之配置Android
- Android進階之Walle多渠道打包&Tinker熱修復Android
- webpack打包地址配置Web
- 配置Tree Shaking來減少JavaScript的打包體積JavaScript
- Docker 映象構建之 DockerfileDocker
- nlp基礎之-詞彙表構建的具體做法