android gradle 插件,容许对最终的包以多个维度进行组合。vue
BuildVariant = ProductFlavor x BuildType
最多见的就是这样:android
productFlavors { pro { } fre { } } lintOptions { abortOnError false } buildTypes { debug { } release { } }
其中,buildTypes 通常都会有 debug 或者release,标示编译的类型,一般在混淆代码、可调式、资源压缩上作一些区分。
productFlavor 则为了知足“同一个project,根据一个很小的区分,来打不一样的包”这个需求。微信
这两个维度的组合,会产生以下包:markdown
flavorDimensions 'abi', 'version' productFlavors { pro { dimension 'version' } fre { dimension 'version' } arm { dimension 'abi' } mips { dimension 'abi' } } buildTypes { debug { } release { } }
productFlavor 自己定义了2个维度,记上 buildType,则有三个维度,会产生以下的包:app
其中每一个维度组合,均可以设置自己的 dependency、test source。下面作一个举例。测试
module 中有若干个 flavors,例如:fre 和 pro,分别依赖不一样的库,这些库有的是本地 jar 库,有的是远程库。gradle
Bugtags 的 android sdk,有一个自动上传符号表功能, 在最初,是这样配置的:ui
apply plugin: 'com.bugtags.library.plugin' bugtags { appKey "APP_KEY" appSecret "APP_SECRET" mappingUploadEnabled false }
后来,咱们增长了一个 beta-live 的机制,用来区分测试和上线的 APP,这样,同一个 APP,就有两套 APP_KEY 和 APP_SECRET 了,很明显上方的配置方式就不在适用。lua
android gradle 插件提供了 android.applicationVariants 索引来遍历全部的 build variant
后来,咱们采起了一个方案,遍历 Build Variant,设置 extension 信息来兼容这种需求。url
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』微信公众号二维码