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』微信公衆號二維碼