美团多渠道打包原理以及使用
2016-08-10 14:50
330 查看
传统打包方法原理
传统的打包方法都是在AndroidManifest添加渠道标示,每打一次包修改一次标示的名称。效率特别的低,一个稍微大一点的项目打上几十个渠道包可能需要几个小时半天的时间。美团打包方法原理
由于传统的打包方式每次修改渠道都需要重新的构建项目,时间都浪费构建上面了,美团提供了一种新的打包方案,将APK直接当做zip解压目录里会有一个META-INF目录而此目录是不参与签名校验的。因此在META-INF目录内添加不同的空文件,可以唯一标识一个渠道。采用这种方式,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。所以打包可以分成两大步。 第一步在META-INF目录内添加不同的空文件,用于标识渠道。(不会写? 不用担心, 已经有大神给我们写好了。: https://github.com/GavinCT/AndroidMultiChannelBuildTool 下载即可。Python
写的)
第二步: 在我们的代码中获取到META-INF目录中的渠道文件名称
/** * 从apk中获取版本信息 * @param context * @param channelKey * @return */ private static String getChannelFromApk(Context context, String channelKey) { //从apk包中获取 ApplicationInfo appinfo = context.getApplicationInfo(); String sourceDir = appinfo.sourceDir; //注意这里:默认放在meta-inf/里, 所以需要再拼接一下 String key = "META-INF/" + channelKey; String ret = ""; ZipFile zipfile = null; try { zipfile = new ZipFile(sourceDir); Enumeration<?> entries = zipfile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = ((ZipEntry) entries.nextElement()); String entryName = entry.getName(); if (entryName.startsWith(key)) { ret = entryName; break; } } } catch (IOException e) { e.printStackTrace(); } finally { if (zipfile != null) { try { zipfile.close(); } catch (IOException e) { e.printStackTrace(); } } } String[] split = ret.split("_"); String channel = ""; if (split != null && split.length >= 2) { channel = ret.substring(split[0].length() + 1); } return channel; }
实践使用:
第一步:配置python环境:我们既然需要使用脚本打包,那么相应的电脑上必须有可以运行python脚本的运行环境。所以我们第一步是要配置python运行环境。
自己去官网下载安装即可,非常简单。官网地址:https://www.python.org/
第二步:编写python脚本:
好心人已经把运行的打包脚本写好了,并且也封装了读取渠道号的实体工具类。大家只需要去github上下载即可。
地址:https://github.com/GavinCT/AndroidMultiChannelBuildTool当然在github上也有相关的使用介绍,非常简单,一看就懂。这里简单说下,
下载下来有个ChannelUtil.java类,里面封装好了获取渠道号的方法,只需要在启动应用程序的地方调用友盟的设置代码即可,
比如:AnalyticsConfig.setChannel(ChannelUtil.getChannel(this))。
第三步:配置渠道列表
我们在github上把python脚本下载下来之后,解压文件,在PythonTool/Info/channel.txt中编辑渠道列表,没写一个渠道名,换行即可。
第四步:运行脚本
把已经签名打包好的apk文件,复制到PythonTool目录下和MultiChannelBuildTool.py这个脚本同级,直接双击点击MultiChannelBuildTool.py
即可完成打包。
最后,喜欢的同学可以关注我的微信公众号,我会不定期的写一些相关的文章,吹一些牛逼、砍一些大山、来一些心灵鸡汤、搞一些不为人知的故事
↑↑↑↑↑识别他、关注他↑↑↑↑↑
相关文章推荐
- 对js cookie的一些理解
- HandlerThread 的使用
- 使用OleDb写入Excel异常,"字段太小而不能接受所要添加的数据的数量" "the field is too small to accept the amount of data "
- 改变placeholder的字体颜色
- 不能直接ssh远程连接远端ubuntu 16.04.1的解决办法
- 跨境电商国际物流模式
- TaintDroid剖析之IPC级污点传播
- Centos6版本升级
- ubuntu mysql远程连接
- 用关联规则挖掘超市购物的商品组合
- HDU 4678 Mine (博弈SG+自由度原理)
- html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
- Leetcode题集——search-a-2d-matrix
- 从上往下打印二叉树
- BootStrap Typeahead自动补全插件实例代码
- Adding an Easy Share Action
- Thread Pool 线程池 使用 线程优化
- JSON库之性能比较:JSON.simple VS GSON VS Jackson VS JSONP
- GitHub for Windows 2.0使用教程
- 企业项目介绍