2019独角兽企业重金招聘Python工程师标准>>>

美团多渠道打包原理以及使用

2016-08-10 14:50 1048人阅读 评论(0) 收藏 举报

 分类:

Android(8) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

传统打包方法原理

  • 传统的打包方法都是在AndroidManifest添加渠道标示,每打一次包修改一次标示的名称。效率特别的低,一个稍微大一点的项目打上几十个渠道包可能需要几个小时半天的时间。

美团打包方法原理

  • 由于传统的打包方式每次修改渠道都需要重新的构建项目,时间都浪费构建上面了,美团提供了一种新的打包方案,将APK直接当做zip解压目录里会有一个META-INF目录而此目录是不参与签名校验的。因此在META-INF目录内添加不同的空文件,可以唯一标识一个渠道。采用这种方式,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。
  • 所以打包可以分成两大步。 第一步在META-INF目录内添加不同的空文件,用于标识渠道。(不会写? 不用担心, 已经有大神给我们写好了。: https://github.com/GavinCT/AndroidMultiChannelBuildTool 下载即可。Python 写的)
  • 第二步: 在我们的代码中获取到META-INF目录中的渠道文件名称

[java] view plain copy

  1. /**
  2. * 从apk中获取版本信息
  3. * @param context
  4. * @param channelKey
  5. * @return
  6. */
  7. private static String getChannelFromApk(Context context, String channelKey) {
  8. //从apk包中获取
  9. ApplicationInfo appinfo = context.getApplicationInfo();
  10. String sourceDir = appinfo.sourceDir;
  11. //注意这里:默认放在meta-inf/里, 所以需要再拼接一下
  12. String key = "META-INF/" + channelKey;
  13. String ret = "";
  14. ZipFile zipfile = null;
  15. try {
  16. zipfile = new ZipFile(sourceDir);
  17. Enumeration<?> entries = zipfile.entries();
  18. while (entries.hasMoreElements()) {
  19. ZipEntry entry = ((ZipEntry) entries.nextElement());
  20. String entryName = entry.getName();
  21. if (entryName.startsWith(key)) {
  22. ret = entryName;
  23. break;
  24. }
  25. }
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. } finally {
  29. if (zipfile != null) {
  30. try {
  31. zipfile.close();
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. }
  37. String[] split = ret.split("_");
  38. String channel = "";
  39. if (split != null && split.length >= 2) {
  40. channel = ret.substring(split[0].length() + 1);
  41. }
  42. return channel;
  43. }

实践使用:

  • 第一步:配置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

即可完成打包。

转载于:https://my.oschina.net/u/3318187/blog/855675

美团多渠道打包原理以及使用相关推荐

  1. 美团多渠道打包方案详解,速度快到白驹过隙

    美团多渠道打包方案详解,速度快到白驹过隙 Andorid渠道市场有多分散呢?分散到比Android碎片化还严重,你还在为多渠道打包而头疼吗?美团提供了速度快到白驹过隙的多渠道打包方案.说的有点夸张,对 ...

  2. android的多渠道打包,Android美团多渠道打包Walle集成

    一.为什么使用美团多渠道打包的方式? 打包更加快速 传统的通过productFlavors渠道包的方式,渠道10个以内还可以接受,如果100个渠道包,每个包需要打5Min,就是将近10个小时的打包,而 ...

  3. android多平台打包,Android美团多渠道打包Walle集成

    一.为什么使用美团多渠道打包的方式? 打包更加快速 传统的通过productFlavors渠道包的方式,渠道10个以内还可以接受,如果100个渠道包,每个包需要打5Min,就是将近10个小时的打包,而 ...

  4. android打包工具多渠道批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案...

    今天写一篇文章来总结下android批量打渠道包美团版本.之前项目上一直用的是gradle 批量打包方式,那个速度啊真是令人发指,15个渠道得跑上半个小时,出去吃顿饭回来,还在跑.特别是赶上项目上线的 ...

  5. android 美团多渠道打包方案

    问:为啥要多渠道打包,只打一个包,然后分别发布到不同的平台上,不也挺好吗? 答:不同渠道打包主要用来做统计分析,特别是游戏应用,特别注意哪个渠道推广的最有效. 基于上面的场景,我们发现主要有两个问题: ...

  6. android 美团批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案

    今天写一篇文章来总结下android批量打渠道包美团版本.之前项目上一直用的是gradle 批量打包方式,那个速度啊真是令人发指,15个渠道得跑上半个小时,出去吃顿饭回来,还在跑.特别是赶上项目上线的 ...

  7. Android V1、V2签名包和快速集成美团多渠道打包

    今日科技快讯 三天的Google I/O大会2018终于落下帷幕,虽说现在的I/O大会重点已经变成了人工智能,但是Android P的推出还是让很多小伙伴激动不已的.这次Android P被喻为近几年 ...

  8. Android 手把手完美教你美团wally(瓦力)多渠道打包 3种方法(针对签名V1和V2都会有很详细的介绍)

    APK的生成步骤: 大家从图中可以看出,大体分为以下 7 个大步: 1.打包资源文件,生成 R.java 文件 2.处理 aidl 文件,生成相应 java 文件 3.编译工程源代码,生成相应 cla ...

  9. android中多渠道打包的三种方式

    转载至:一片枫叶的专栏 国内的Android开发者还是很苦逼的,由于众所周知的原因,google play无法在国内打开(翻墙的就不在考虑之内了),所以Android系的应用市场,群雄争霸.后果就是国 ...

最新文章

  1. imagick API 中文说明
  2. python 判断是否是int/string/类型的函数
  3. 大脚导入配置选择哪个文件_有史以来最全的 IntelliJ IDEA 配置图解
  4. C# 中使用面向切面编程(AOP)中实践代码整洁
  5. 用aliplayer如何实现视频的连续播放?
  6. 机器学习:样本集、验证集(开发集)、测试集
  7. paip.提升性能----jvm参数调整.txt
  8. 2013Esri中国用户大会,show应用,赢大奖--获奖名单公布!
  9. 保龄球计分程序java_保龄球计分程序
  10. 关于cidaemon.exe进程CPU占用率高的解决
  11. 用vc++穷举windows应用程序密码
  12. Java回炉学习(七)
  13. C语言--斐波那契数列(三种方法)
  14. linux-top命令详解
  15. 阿里云 SLB证书记录
  16. jdk与tomcat等版本相互适配要求
  17. 人大金仓数据库怎么样?好用吗?
  18. HTML:在浏览器页面上简单实现显示标准系统时间
  19. Windows VPS如何通过远程桌面挂载本地目录
  20. 一款好用的JS插件xm-select【只需要引用一个JS文件就搞定】

热门文章

  1. div+css布局与seo的关系
  2. 健康生活--16个健康习惯
  3. DKH大数据整体解决方案的优势介绍
  4. VC调用Delphi对象接口
  5. 通俗易懂的rpc原理
  6. hadoop-0.20.1+120 hive-0.3.99.1+0 试用hwi(hive web interface
  7. 订单可视化(智能制造、流程再造、企业信息化) 第七篇 经营班子掌舵,业务与开发分离,走向成功必备条件...
  8. 2957: 楼房重建
  9. Java各种日期计算
  10. 恭喜51CTO视频课程认证讲师、博主李海园喜得姐妹花