本文介紹兩種多渠道打包方式:
-
productFlavor (每次打包都要重新構建一遍,效率比較慢)
productFlavors { //新建產品A A { //程式包名 applicationId "com.xxx.xxx" //不同渠道號 manifestPlaceholders = [UMC:"xxx"] //versionName versionName "1.0.0" //versionCode versionCode 1 } //新建產品B B { //程式包名 applicationId "com.xxx.xxx2" //不同渠道號 manifestPlaceholders = [UMC:"xxx2"] //versionName versionName "2.1.1" //versionCode versionCode 2 } 複製程式碼
productFlavor 是defaultConfig的子集,defaultConfig {}中的屬性在productFlavors{}中都可以單獨設定,若重複會以productFlavors{}中的屬性為最終屬性
buildConfigField 自定義配置常量 applicationId 配置包名 其他 任何做區分的都可以在這裡配置,打出多渠道包、
-
walle (效率高,參考美團1分鐘打900渠道包)
1. 背景:
APK Signature Scheme v2的推出,在META-INF目錄內新增空檔案的做法導致無法簽名,所以採用直接修改APK signing block。
2. 步驟:
//新增外掛 dependencies { classpath "com.meituan.android.walle:plugin:latest.integration" }
//使用外掛 apply plugin: 'walle'
//新增簽名資訊 signingConfig signingConfigs.sankuai
//依賴庫檔案 dependencies { compile 'com.meituan.android.walle:library:1.0.3' }
//新增配置資訊
walle {
apkOutputFolder = new File("${project.buildDir}/outputs/channels"); //在app/build/outputs/channels 下生成xxx.apk
// 定製渠道包的APK的檔名稱
${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk
apkFileNameFormat = '${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
// 渠道配置檔案 其中${project.getProjectDir()}指的是app目錄
channelFile = new File("${project.getProjectDir()}/channel")
}
複製程式碼
//建立渠道檔案channel.txt
//打包命令
生成渠道包 gradlew clean assembleReleaseChannels
支援 productFlavors gradlew clean assembleMeituanReleaseChannels
生成單個渠道包 gradlew clean assembleReleaseChannels -PchannelList=渠道名稱
生成多個渠道包 gradlew clean assembleReleaseChannels -PchannelList=渠道名稱,渠道名稱
複製程式碼