多渠道打包gradle插件,支持打包apk和aar

多渠道打包gradle插件(GitHub),支持打包apk和aar,主要功能包括

  • 读取渠道配置文件,动态生成ProductFlavor
  • 重命名apk和aar文件名字,根据需要指定输出目录
  • 运行多渠道打包任务(multiChannel)时,可以选择禁用不必要的任务(lint, debugtest),提升打包速度

添加插件

1
2
3
classpath 'io.github.tubb:multichannel:1.0.1'
// apply multi channel plugin
apply plugin: 'io.github.tubb.multichannel'

如何使用

插件在顶层定义了appChanneldsl,并且在appChanneldsl下分别定义了channelFlavorConfigbundleOutputConfigtaskConfig三个dsl,分别对应于上面三项功能,下面来看看如何配置

channelFlavorConfigdsl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
appChannel {
channelFlavorConfig {
channelConfigFilePath '/Users/tubingbing/StudioProjects/MultiChannelPlugin/app/channels.txt'
configProductFlavor { name ->
if ('qq'.equals(name)) { // for test
return {
dimension 'default'
manifestPlaceholders = [ channel:"${name}_yyb" ]
}
} else {
return {
dimension 'default'
manifestPlaceholders = [ channel:name ]
}
}
}
// must call after configProductFlavor dsl
createChannel()
}
}

可以看到channelFlavorConfigdsl主要用来配置渠道文件的路径(绝对路径)。每个ProductFlavor对应的配置跟平常配置ProductFlavor一样。这里要注意的是要主动调用由插件导出的Project.createChannel()方法来主动创建多个ProductFlavorConfiguration phase阶段)

bundleOutputConfigdsl

1
2
3
4
5
6
7
8
9
appChannel {
bundleOutputConfig {
outputDir '/Users/tubingbing/channels'
renameBundleFile { project, variant ->
// rename apk file
project.name + '-' + variant.flavorName + '-' + variant.buildType.name + '-' + variant.versionName + '.apk'
}
}
}

bundleOutputConfigdsl主要用来做

  • 指定apk和aar输出目录(绝对路径)
  • 按自己的需要重命名apk和aar文件名字

taskConfigdsl

1
2
3
4
5
6
7
appChannel {
taskConfig {
disableLintTask true
disableDebugTask true
disableTestTask true
}
}

现阶段设定了lintdebugtest三种task的启用禁用开关,按自己的需要来配置吧

aar包的支持

由于apk包和aar包最终输出机制基本一致,所以插件同样适用于aar打多渠道包,插件的使用基本是跟打apk包一致,具体可以查看librarytest

运行

1
./gradlew clean :moduleName:multiChannel

Note

由于Android gradle plugin版本向后兼容性不是很理想,自己编写、测试插件代码是基于

1
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

1
classpath 'com.android.tools.build:gradle:3.0.1'

如在其它版本遇到问题,欢迎提Issues和提交PR