Gradle構(gòu)建多維度掺出,多版本apk的時(shí)候有多種方式徽千,常見的是buildTypes分debug,release版本汤锨,另外就是productFlavor構(gòu)建產(chǎn)品特性双抽,結(jié)合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結(jié)合可產(chǎn)生flavorDimensions*productFlavors中變體
gradle3.1后配置productFlavors必須配置flavorDimensions屬性
如果只有一個(gè)dimension每個(gè)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項(xiàng)目上 要特別注意柬泽,以前的
publishNonDefault true
該屬性已廢棄(我的gradle3.1.3)默認(rèn)是會(huì)打各種渠道的依賴的
這里需要注意的是慎菲,為了保證分渠道引用的依賴也具有渠道屬性,所有在該引用鏈上的項(xiàng)目都需要配置productFlavors保證整個(gè)引用的正常锨并,否則sync會(huì)失敗
4.最后這邊提出分渠道的意義就是在于配置不同的配置項(xiàng)或者代碼露该,本人沒用到不同的代碼 主要涉及一些基礎(chǔ)配置項(xiàng),例如baseurl分環(huán)境主要設(shè)置BuildConfig以及Manifest的引用
首先buildConfig的注入需要使用
buildConfig.put "type","name","value"
其次涉及manifest的注入
manifestPlaceholders=[key,value]或者
manifestPlaceholders.put(key,value)
注意這邊如果直接配置到flavor內(nèi)可能會(huì)報(bào)找不到該占位符第煮,所以要在defaultConfig下配置一個(gè)默認(rèn)屬性
5.最后就是怎么使用gradlew打包安裝解幼,所有構(gòu)建任務(wù)都能在as的右邊找到,關(guān)于gradlew的命令請(qǐng)參照我的另外一篇文章gradlew常見命令空盼,使用命令行的話主要是為了構(gòu)建cd環(huán)境书幕,我這邊是用jenkins進(jìn)行構(gòu)建任務(wù)的,并上傳蒲公英的看揽趾,如果有需要的話可以聯(lián)系我咨詢解決方案台汇。我這邊有些難點(diǎn)主要涉及復(fù)雜的網(wǎng)絡(luò)
以上配置請(qǐng)參照官網(wǎng)Android多渠道配置