多渠道打包gradle插件(GitHub),支持打包apk和aar,主要功能包括android
ProductFlavor
multiChannel
)时,能够选择禁用没必要要的任务(lint
, debug
和test
),提高打包速度 1 2 3 |
classpath 'io.github.tubb:multichannel:1.0.1' // apply multi channel plugin apply plugin: 'io.github.tubb.multichannel' |
插件在顶层定义了appChannel
dsl,而且在appChannel
dsl下分别定义了channelFlavorConfig
、bundleOutputConfig
和taskConfig
三个dsl,分别对应于上面三项功能,下面来看看如何配置git
channelFlavorConfig
dsl 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() } } |
能够看到channelFlavorConfig
dsl主要用来配置渠道文件
的路径(绝对路径)。每一个ProductFlavor
对应的配置跟日常配置ProductFlavor
同样。这里要注意的是要主动调用由插件导出的Project.createChannel()
方法来主动建立多个ProductFlavor
(Configuration phase
阶段)github
bundleOutputConfig
dsl 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' } } } |
bundleOutputConfig
dsl主要用来作app
taskConfig
dsl 1 2 3 4 5 6 7 |
appChannel { taskConfig { disableLintTask true disableDebugTask true disableTestTask true } } |
现阶段设定了lint
、debug
和test
三种task的启用禁用开关,按本身的须要来配置吧测试
因为apk包和aar包最终输出机制基本一致,因此插件一样适用于aar打多渠道包,插件的使用基本是跟打apk包一致,具体能够查看librarytestgradle
1 |
./gradlew clean :moduleName:multiChannel |
因为Android gradle plugin
版本向后兼容性不是很理想,本身编写、测试插件代码是基于ui
1 |
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip |
1 |
classpath 'com.android.tools.build:gradle:3.0.1' |
如在其它版本遇到问题,欢迎提Issues
和提交PR
spa