ApkChannelPackage插件接入文档

多渠道打包方式选择

APKChannelPackage是一个多渠道打包插件,该插件会自动检测基础包是V1签名还是V2签名,并使用不同的多渠道打包方式。
目前Gradle Plugin 2.2以上默认开启V2签名,所以如果想关闭V2签名,可将下面的v2SigningEnabled设置为false。

1
2
3
4
5
6
7
8
9
10
11
12
13
signingConfigs {
release {
...
v1SigningEnabled true
v2SigningEnabled false
}

debug {
...
v1SigningEnabled true
v2SigningEnabled false
}
}

接入流程

1.在根工程的build.gradle中,添加对打包Plugin的依赖:

1
2
3
4
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.leon.channel:plugin:1.0.4'
}

2.在主App工程的build.gradle中,添加对ApkChannelPackage Plugin的引用:

1
apply plugin: 'channel'

3.在主App工程的build.gradle中,添加读取渠道信息的helper类库依赖:

1
2
3
dependencies {
compile 'com.leon.channel:helper:1.0.4'
}

4.在gradle.properties文件中,配置渠道文件名称

1
channel_file=channel.txt

其中channel.txt即为包含渠道信息的文件,需放置在根工程目录下,一行一个渠道信息。

5.渠道包信息配置

若是直接编译生成多渠道包,则通过channel标签配置:

1
2
3
4
5
6
channel{
//多渠道包的输出目录,默认为new File(project.buildDir,"channel")
baseOutputDir = new File(project.buildDir,"xxx")
//多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}
apkNameFormat ='${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}'
}

其中,多渠道包的命名规则中,可使用以下字段:

  • appName : 当前project的name
  • versionName : 当前Variant的versionName
  • versionCode : 当前Variant的versionCode
  • buildType : 当前Variant的buildType,即debug or release
  • flavorName : 当前的渠道名称
  • appId : 当前Variant的applicationId

若是根据已有基础包生成多渠道包,则通过rebuildChannel标签配置:

1
2
3
4
5
6
7
8
rebuildChannel {
baseDebugApk = 已有Debug APK
baseReleaseApk = 已有Release APK
//默认为new File(project.buildDir, "rebuildChannel/debug")
debugOutputDir = Debug渠道包输出目录
//默认为new File(project.buildDir, "rebuildChannel/release")
releaseOutputDir = Release渠道包输出目录
}

这里要注意一下,已有APK的名字必须包含base字符串,这样插件生成多渠道包时,会用当前的渠道替换base字符串,形成新的渠道包。

6.生成多渠道包

若没有通过Gradle Plugin的 productFlavors配置多渠道,那么通过以下Task
channelDebugchannelRelease分别负责生成Debug和Release的多渠道包。

若是配置了productFlavors,那么对应的Task则是channelFlavorXDebugchannelFlavorXRelease,FlavorX表示在productFlavors中配置的渠道名称。

除此之外,如果是根据已有基础包生成多渠道包,那么对应的Task则是reBuildChannel

7.读取渠道信息

通过helper类库中的ChannelReaderUtil类读取渠道信息。

1
String channel = ChannelReaderUtil.getChannel(getApplicationContext());

如果没有渠道信息,那么这里返回null,开发者需要自己判断。

最新版本

ApkChannelPackage的最新版本请在GitHub上及时获取哈!