使用新版美团多渠道打包的正确姿势


[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
    3
    ChannelInfo channelInfo = WalleChannelReader.getChannelInfo(getApplicationContext());
    String channelName = channelInfo.getChannel(); (渠道名称)
    Map<String, String> extraInfo = channelInfo.getExtraInfo(); (额外信息)

我是个懒程序猿,喜欢偷懒,所以在下不才,把这些命令都写成了批处理命令,然后做成了一个exe文件,下面简单介绍一下使用姿势

  1. 修改渠道配置文件channel配置你自己的渠道
  2. 拷贝apk到channel所在目录(也就是解压之后的根目录)
  3. 点击publish.exe生成渠道包,生成的渠道包在output目录下

工具下载请戳链接 [懒人工具][3]

以上是使用命令行的方式进行多渠道打包,gradle方式请参考原文

本文已同步发表在CSDN [滴滴滴,啪啪请上车][4]

谢谢你请我吃糖,Mua
0%