2016-08-10 14:50 1048人阅读 评论(0) 收藏 举报java
分类:python
Android(8)
git
版权声明:本文为博主原创文章,未经博主容许不得转载。github
目录(?)[+]app
传统打包方法原理
- 传统的打包方法都是在AndroidManifest添加渠道标示,每打一次包修改一次标示的名称。效率特别的低,一个稍微大一点的项目打上几十个渠道包可能须要几个小时半天的时间。
美团打包方法原理
- 因为传统的打包方式每次修改渠道都须要从新的构建项目,时间都浪费构建上面了,美团提供了一种新的打包方案,将APK直接当作zip解压目录里会有一个META-INF目录而此目录是不参与签名校验的。所以在META-INF目录内添加不一样的空文件,能够惟一标识一个渠道。采用这种方式,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件便可。
- 第二步: 在咱们的代码中获取到META-INF目录中的渠道文件名称
[java] view plain copy工具


- /**
- * 从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运行环境。
本身去官网下载安装便可,很是简单。官网地址:https://www.python.org/ui
好心人已经把运行的打包脚本写好了,而且也封装了读取渠道号的实体工具类。你们只须要去github上下载便可。this
地址:https://github.com/GavinCT/AndroidMultiChannelBuildTool固然在github上也有相关的使用介绍,很是简单,一看就懂。这里简单说下,spa
下载下来有个ChannelUtil.java类,里面封装好了获取渠道号的方法,只须要在启动应用程序的地方调用友盟的设置代码便可,.net
好比:AnalyticsConfig.setChannel(ChannelUtil.getChannel(this))。
咱们在github上把python脚本下载下来以后,解压文件,在PythonTool/Info/channel.txt中编辑渠道列表,没写一个渠道名,换行便可。
把已经签名打包好的apk文件,复制到PythonTool目录下和MultiChannelBuildTool.py这个脚本同级,直接双击点击MultiChannelBuildTool.py
便可完成打包。