Gradle構建多維度,多版本apk的時候有多種方式,常見的是buildTypes分debug,release版本,另外就是productFlavor構建產(chǎn)品特性,結合flavorDimensions
1.這里注意flavorDimensions屬于分類,是區(qū)分分類的維度,比較拗口
flavorDimensions "api", "mode"
productFlavors {
demo {
// Assigns this product flavor to the "mode" flavor dimension.
dimension "mode"
...
}
full {
dimension "mode"
...
}
參照官網(wǎng)的demo,這里的api維度,mode維度是分開來的也就是說productFlavors與flavorDimensions結合可產(chǎn)生flavorDimensions*productFlavors中變體
gradle3.1后配置productFlavors必須配置flavorDimensions屬性
如果只有一個dimension每個flavor可省略配置dimension
2.可通過gradle函數(shù)統(tǒng)一處理所有apk
variantFilter { variant ->
def names = variant.flavors*.name
// To check for a certain build type, use variant.buildType.name == "<buildType>"
if (names.contains("minApi21") && names.contains("demo")) {
// Gradle ignores any variants that satisfy the conditions above.
setIgnore(true)
}
}
3.如果配置在library項目上 要特別注意,以前的
publishNonDefault true
該屬性已廢棄(我的gradle3.1.3)默認是會打各種渠道的依賴的
這里需要注意的是,為了保證分渠道引用的依賴也具有渠道屬性,所有在該引用鏈上的項目都需要配置productFlavors保證整個引用的正常,否則sync會失敗
4.最后這邊提出分渠道的意義就是在于配置不同的配置項或者代碼,本人沒用到不同的代碼 主要涉及一些基礎配置項,例如baseurl分環(huán)境主要設置BuildConfig以及Manifest的引用
首先buildConfig的注入需要使用
buildConfig.put "type","name","value"
其次涉及manifest的注入
manifestPlaceholders=[key,value]或者
manifestPlaceholders.put(key,value)
注意這邊如果直接配置到flavor內(nèi)可能會報找不到該占位符,所以要在defaultConfig下配置一個默認屬性
5.最后就是怎么使用gradlew打包安裝,所有構建任務都能在as的右邊找到,關于gradlew的命令請參照我的另外一篇文章gradlew常見命令,使用命令行的話主要是為了構建cd環(huán)境,我這邊是用jenkins進行構建任務的,并上傳蒲公英的看,如果有需要的話可以聯(lián)系我咨詢解決方案。我這邊有些難點主要涉及復雜的網(wǎng)絡
以上配置請參照官網(wǎng)Android多渠道配置