最近有朋友问关于腾讯VasDolly多渠道打包的接入问题,github上有接入教程,不过在通过Gradle生成多渠道包那一步骤有些问题,本文着重会对这一步骤做详细描述。
接入流程
1.添加对VasDolly Plugin的依赖
在根工程的build.gradle
中,添加对打包Plugin的依赖:
dependencies { classpath 'com.android.tools.build:gradle:3.0.0' classpath 'com.leon.channel:plugin:1.1.7' }
2.引用VasDolly Plugin
在主App工程的build.gradle
中,添加对VasDolly Plugin的引用:
apply plugin: 'channel'
3.添加对VasDolly helper类库的依赖
在主App工程的build.gradle
中,添加读取渠道信息的helper类库依赖:
dependencies { api 'com.leon.channel:helper:1.1.7' }
4.配置渠道列表
目前有两种方式配置渠道列表,最终的渠道列表是两者的累加之和:
(1)在gradle.properties
文件指定渠道文件名称,该渠道文件必须位于根工程目录下,一行一个渠道信息。
channel_file=channel.txt
(2)在channel
或者rebuildChannel
属性中通过channelFile
属性指定渠道文件,一行一个渠道信息。
channel{ //指定渠道文件 channelFile = file("../channel.txt") } rebuildChannel{ //指定渠道文件 channelFile = file("../channel.txt") }
6.通过Gradle生成多渠道包(敲黑板)
一种方式直接编译生成多渠道包
若是直接编译生成多渠道包,首先要配置渠道文件、渠道包的输出目录和渠道包的命名规则:
channel { //指定渠道文件,一定要找准你项目路径下的文件 channelFile = file("../channel.txt") //多渠道包的输出目录,默认为new File(project.buildDir,"channel") baseOutputDir = new File(project.buildDir, "channel") //多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType} //命名规则可以不写,直接生成 //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上) isFastMode = false }
其中,多渠道包的命名规则中,可使用以下字段:
- appName : 当前project的name
- versionName : 当前Variant的versionName
- versionCode : 当前Variant的versionCode
- buildType : 当前Variant的buildType,即debug or release
- flavorName : 当前的渠道名称
- appId : 当前Variant的applicationId
然后,通过gradle channelDebug
、gradle channelRelease
命令分别生成Debug和Release的多渠道包。
以debug版本为例,然后会在输出目录下生成对应市场的apk
第二种方式是根据已有基础包重新生成多渠道包
若是根据已有基础包重新生成多渠道包,首先要配置渠道文件、基础包的路径和渠道包的输出目录:
rebuildChannel{ baseDebugApk = new File(project.projectDir, "outputs/apk/debug/app-base-debug.apk")//一定要写准基准包所在位置 baseReleaseApk = new File(project.projectDir, "rebuildChannel/debug") }一定要写准基准包所在位置,而且命名中要包含base, 这里“rebuildChannel”生成渠道包时,会用新渠道名替换已有基础包的“base”字符串,但是"outputs/apk/app-release.apk"不包含“base”字符串,所以新的渠道包名字还是app-release.apk,因此后面的APK就把前面的覆盖了,最后只出现一个。短期解决就是改下基础包的命名“app-base-release.apk”,后续作者说发个版本fix下这个问题