腾讯 VasDolly 接入(快速多渠道打包)

时间:2021-09-20 13:32:11

最近有朋友问关于腾讯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

腾讯 VasDolly 接入(快速多渠道打包)

(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 channelDebuggradle channelRelease命令分别生成Debug和Release的多渠道包。

腾讯 VasDolly 接入(快速多渠道打包)

以debug版本为例,然后会在输出目录下生成对应市场的apk

腾讯 VasDolly 接入(快速多渠道打包)

第二种方式是根据已有基础包重新生成多渠道包

若是根据已有基础包重新生成多渠道包,首先要配置渠道文件、基础包的路径和渠道包的输出目录:

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下这个问题