公司的軟體不同的應用市場的應用名都大不一樣,有時候這個應用市場需要加廣告,那個需要加首發,一個個打包的話會浪費很多時間,還很大幾率會出錯
下面就是通過配置gradle,實作一鍵打包,達到各個包不同的效果。
第一步:在 gradle -> android -> productFlavors 裡添加代碼,也就是你的不同管道名
productFlavors {
aa_main {}
huawei {}
yyb {}
q_360 {}
oppo {}
sogou {}
vivo {}
meizu {}
anzhi {}
baidu {}
lenovo {}
xiaomi {}
pp {}
}
第二步 管道添加了之後,就開始配置各個管道的一些不同的資源或者字段
在 gradle -> android -> sourceSets 中添加如下代碼
sourceSets {
//夜間模式資源設定
main { res.srcDirs = ['src/main/res', 'src/main/res-night'] }
//管道資源路徑配置
huawei.res.srcDirs = ['src/main/res-huawei']
yyb.res.srcDirs = ['src/main/res-yyb']
q_360.res.srcDirs = ['src/main/res-360']
oppo.res.srcDirs = ['src/main/res-oppo']
sogou.res.srcDirs = ['src/main/res-sogou']
vivo.res.srcDirs = ['src/main/res-vivo']
meizu.res.srcDirs = ['src/main/res-meizu']
anzhi.res.srcDirs = ['src/main/res-anzhi']
baidu.res.srcDirs = ['src/main/res-baidu']
lenovo.res.srcDirs = ['src/main/res-lenovo']
xiaomi.res.srcDirs = ['src/main/res-xiaomi']
pp.res.srcDirs = ['src/main/res-pp']
}
res.srcDirs 是設定該管道下的資源檔案路徑,還可以設定java,jniLibs 等各種檔案資源路徑
我這裡的360管道下隻是圖檔和字段有些不同

注意點:你需要先把基礎的資源檔案都設定好,比如本來你的應用名稱存儲在app->src->main->res->value->strings 檔案下的app_name,但360包的應用名不一樣,這樣你在上圖的res-360 的 strings 檔案中在添加一個app_name 就好了
第三步就是打包了
為了讓打出來的apk通過檔案名字就可以對apk資訊一目了然,做了以下處理
在productFlavors 再添加如下代碼
android.applicationVariants.all {
variant ->
variant.outputs.all {
output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
if (variant.buildType.name == 'release') {
def fileName = "zdread_v${defaultConfig.versionCode}_${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
outputFileName = fileName
} else {
def fileName = "${releaseTime()}_${variant.productFlavors[0].name}_debug.apk"
outputFileName = fileName
}
}
}
}
最後打出來的apk檔案名的格式就固定成了
zdread_v應用版本号_應用版本名_打包時間_管道名.apk
簡單的三步,就完成了對多管道打包的配置
其實如果隻是簡單的應用名不一樣,還可以直接在第一步中完成,不需要後面兩步
q_360{ buildConfigField “String”, “app_name”, “應用名”}
然後在AndroidManifest.xml 檔案中修改
android:label="${app_name}"