Android Gradle 技巧之一: Build Variant 相关
Posted Bugtags
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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』微信公众号二维码
以上是关于Android Gradle 技巧之一: Build Variant 相关的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle keyAlias 变量存储在单独的文件中
Android - Proguard 与 httpcore 和 httpmime 使用 Android Studio 和 Gradle
Android Gradle 插件自定义 Gradle 任务 ⑥ ( 执行 Gradle 任务的简化版命令 | 同时执行多个 Gradle 任务的命令 )
Android Gradle 插件自定义 Gradle 任务 ⑥ ( 执行 Gradle 任务的简化版命令 | 同时执行多个 Gradle 任务的命令 )
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.1——使用Build Types
即使 java gradle 工具链设置为 jdk 11,Gradle 也使用 Java 1.8 构建 android 项目