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

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

  • 读取渠道配置文件,动态生成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,分别对应于上面三项功能,下面来看看如何配置git

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阶段)github

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主要用来作app

  • 指定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包一致,具体能够查看librarytestgradle

运行

1
./gradlew clean :moduleName:multiChannel

Note

因为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和提交PRspa

相关文章
相关标签/搜索