Android Gradle 技巧之一: Build Variant 相關
Build Variant
android gradle 外掛,允許對最終的包以多個維度進行組合。
BuildVariant = ProductFlavor x BuildType
兩個維度
最常見的就是這樣:
``` productFlavors { pro { }
fre {
}
}
lintOptions {
abortOnError false
}
buildTypes {
debug {
}
release {
}
}
``` 其中,buildTypes 一般都會有 debug 或者release,標示編譯的型別,通常在混淆程式碼、可調式、資源壓縮上做一些區分。 productFlavor 則為了滿足“同一個project,根據一個很小的區分,來打不同的包”這個需求。
這兩個維度的組合,會產生如下包:
- proDebug
- proRelease
- freDebug
- proRelease
更多的維度
``` flavorDimensions 'abi', 'version'
productFlavors {
pro {
dimension 'version'
}
fre {
dimension 'version'
}
arm {
dimension 'abi'
}
mips {
dimension 'abi'
}
}
buildTypes {
debug {
}
release {
}
}
```
productFlavor 本身定義了2個維度,記上 buildType,則有三個維度,會產生如下的包:
- armProDebug
- armProRelease
- armFreDebug
- armFreRelease
- mipsProDebug
- mipsProRelease
- mipsFreDebug
- mipsFreRelease
其中每個維度組合,都可以設定本身的 dependency、test source。下面做一個舉例。
Flavor 與 Dependency
需求
module 中有若干個 flavors,例如:fre 和 pro,分別依賴不同的庫,這些庫有的是本地 jar 庫,有的是遠端庫。
方案
遍歷 Build Variant
需求
Bugtags 的 android sdk,有一個自動上傳符號表功能, 在最初,是這樣配置的:
apply plugin: 'com.bugtags.library.plugin'
bugtags {
appKey "APP_KEY"
appSecret "APP_SECRET"
mappingUploadEnabled false
}
後來,我們增加了一個 beta-live 的機制,用來區分測試和上線的 APP,這樣,同一個 APP,就有兩套 APP_KEY 和 APP_SECRET 了,很明顯上方的配置方式就不在適用。
方案
android gradle 外掛提供了 android.applicationVariants 索引來遍歷所有的 build variant 後來,我們採取了一個方案,遍歷 Build Variant,設定 extension 資訊來相容這種需求。
``` afterEvaluate { android.applicationVariants.each { variant -> def bugtagsAppKey = null; def bugtagsAppSecret = null;
if (variant.name.contains("debug")) {
bugtagsAppKey = 'APP_KEY_BETA'
bugtagsAppSecret = 'APP_SECRET_BETA'
} else if (variant.name.contains("release")) {
bugtagsAppKey = 'APP_KEY_LIVE'
bugtagsAppSecret = 'APP_SECRET_LIVE'
}
variant.ext.bugtagsAppKey = bugtagsAppKey
variant.ext.bugtagsAppSecret = bugtagsAppSecret
}
}
apply plugin: 'com.bugtags.library.plugin' ```
總結
本文主要是介紹了 build variant 的概念,還介紹了兩個日常應用案例。希望對大家有幫助。
參考資料
有問題?在文章下留言或者加 qq 群:453503476,希望能幫到你。
想要及時收到最新部落格文章,請關注:
『mobdev』微信公眾號二維碼
相關文章
- Gradle for Android系列之一 Gradle基礎GradleAndroid
- Gradle for Android系列之二 build.gradle檔案GradleAndroidUI
- Gradle for Android 第二篇( Build.gradle入門 )GradleAndroidUI
- com.android.tools.build:gradle:2.0.0-alpha3 build errorsAndroidUIGradleError
- Android開發:build.gradle 配置指南AndroidUIGradle
- Android -Gradle依賴匯入及相關知識AndroidGradle
- Android解決Couldnotfindcom.android.tools.build:gradleAndroidUIGradle
- adb Gradle相關命令Gradle
- DBMS_LOGSTDBY.BUILD 相關UI
- gradle的build.gradle詳解GradleUI
- Android Studio 編輯Build.gradle時很卡AndroidUIGradle
- Help Needed in compilation when TARGET_BUILD_VARIANT is set as "user".UI
- Android學習筆記之build.gradle檔案Android筆記UIGradle
- Error:Could not find com.android.tools.build:gradle:2.2.2.ErrorAndroidUIGradle
- Gradle For Android(三)Gradle優化與靈活的使用技巧GradleAndroid優化
- 深入淺出Android Gradle構建系統(三:build task)AndroidGradleUI
- 深入淺出Android Gradle構建系統(五:build type)AndroidGradleUI
- 深入淺出Android Gradle構建系統(3):build taskAndroidGradleUI
- Android Gradle 技巧之二: 最愛命令列AndroidGradle命令列
- Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.3/gradle-3HTTPGoAndroidMavenUIGradle
- gradle升級到4.1後出現的Could not resolve com.android.tools.build:gradle:3.0.1GradleAndroidUI
- gradle中的build script詳解GradleUI
- 關於Android ant build的學習AndroidUI
- Gradle 使用技巧(一)Gradle
- Android Gradle defaultConfig詳解及實用技巧AndroidGradle
- Android面試相關 - IntentServiceAndroid面試Intent
- Android 相關屬性Android
- Gradle 技巧與問題Gradle
- Android Studio gradle外掛版本和gradle版本對應關係AndroidGradle
- mysql show open tables相關知識體系之一MySql
- Android密碼學相關Android密碼學
- Android 支付相關資料Android
- [android]androguard相關介紹Android
- Android 手勢相關(一)Android
- Android 手勢相關(二)Android
- Android Gradle Build Error:Some file crunching failed, see logs for details解決辦法AndroidGradleUIErrorAI
- YACEP相關技術工具服務技巧(上)
- Android關於鍵盤相關知識Android