[toc]
我们在开发Android时,经常会遇到的一个问题就是多渠道打包,这个是很烦躁的问题,因为如果使用AndroidStudio中的productFlavors去进行生成多渠道包,这个是非常耗时的,如果十个以内的渠道包,估计还能忍受一下,但是如果是几十个甚至几百个渠道的时候,我估计我们工程师就要哭了,因为那最少需要几个小时了,而且AndroidStudio偶尔还会抽风,整一个OOM,然后打包就停止了(已经历过的开始泪奔).很多人之前可能已经使用过上一版美团的多渠道打包,但是在Android7.0之后,引入了一种新的签名机制,以前美团使用的创建空文件夹的方法打渠道包的方式已经失效了,我们在Android7.0机器上安装就可以体验得到,直接会安装失败.
很开森,美团也发现了这个问题,并且进行研究,提出了一种的新的姿势,关于它的原理介绍请参考新一代开源Android渠道包生成工具Walle
我在这里只是介绍下它的使用,其实官方文档也已经很清楚了
- 写入渠道信息(单个写入)
Java -jar walle-cli-all.jar put -c channelName apkPath
(注:channelName是渠道名称, apkPath是要写入渠道信息的apk完整路径)
- 批量写入
java -jar walle-cli-all.jar batch -c ChannelInfo apkPath
(注:ChannelInfo是多个渠道名称,用,隔开, apkPath是要写入渠道信息的apk完整路径)
像上面那样去写入渠道信息是不是很麻烦,当然美团也给我们考虑到了,提供了使用配置文件去多渠道打包
- 指定渠道配置文件打渠道包
java -jar walle-cli-all.jar batch -f channelFile apkPath
(注: channelFile是渠道配置文件路径, apkPath是apk完整路径)
渠道配置文件参考 配置文件示例
打包好了,现在就应该在apk中来获取渠道信息了,这个就很简单了
- 在项目的build.gradle文件中添加
compile ‘com.meituan.android.walle:library:1.0.5’
- 获取渠道信息
1
2
3ChannelInfo channelInfo = WalleChannelReader.getChannelInfo(getApplicationContext());
String channelName = channelInfo.getChannel(); (渠道名称)
Map<String, String> extraInfo = channelInfo.getExtraInfo(); (额外信息)
我是个懒程序猿,喜欢偷懒,所以在下不才,把这些命令都写成了批处理命令,然后做成了一个exe文件,下面简单介绍一下使用姿势
- 修改渠道配置文件channel配置你自己的渠道
- 拷贝apk到channel所在目录(也就是解压之后的根目录)
- 点击publish.exe生成渠道包,生成的渠道包在output目录下
工具下载请戳链接 [懒人工具][3]
以上是使用命令行的方式进行多渠道打包,gradle方式请参考原文
本文已同步发表在CSDN [滴滴滴,啪啪请上车][4]