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

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

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

添加插件

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

转载于:https://my.oschina.net/sfshine/blog/1924109

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值