本文介绍两种多渠道打包方式:
-
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=渠道名称,渠道名称
复制代码