如何快速自动化打出多个渠道包。(本篇转载)

转载 2016年08月30日 15:13:19

转载原文地址 http://blog.csdn.net/myliuyx/article/details/52171145  


传统打包方法原理

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

美团打包方法原理

  • 由于传统的打包方式每次修改渠道都需要重新的构建项目,时间都浪费构建上面了,美团提供了一种新的打包方案,将APK直接当做zip解压目录里会有一个META-INF目录而此目录是不参与签名校验的。因此在META-INF目录内添加不同的空文件,可以唯一标识一个渠道。采用这种方式,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。

  • 所以打包可以分成两大步。 第一步在META-INF目录内添加不同的空文件,用于标识渠道。(不会写? 不用担心, 已经有大神给我们写好了。: https://github.com/GavinCT/AndroidMultiChannelBuildTool 下载即可。Python 写的)
  •     

  • 第二步: 在我们的代码中获取到META-INF目录中的渠道文件名称
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  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

                即可完成打包。


最后,喜欢的同学可以关注我的微信公众号,我会不定期的写一些相关的文章,吹一些牛逼、砍一些大山、来一些心灵鸡汤、搞一些不为人知的故事



                                      ↑↑↑↑↑识别他、关注他↑↑↑↑↑





手把手教你AndroidStudio多渠道打包

最近不断有朋友向我咨询AndroidStudio多渠道的打包方法,今天整理一下之前积累的打包套路,写一篇文章,手把手的教给大家。...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016年06月29日 15:23
  • 43437

Android Signature V2 Scheme 签名下的新一代渠道包打包神器

Android Signature V2 Scheme 签名下的新一代渠道包打包神器
  • u014608640
  • u014608640
  • 2017年09月08日 15:25
  • 310

as中apk签名和多渠道打包

1.什么是签名: 数字签名就是为你的程序打上一种标记,来作为你自己的标识,当别人看到签名的时候会知道它是与你相关的 2.为什么要签名 防止盗版,app市场可以检测签名未签名的apk无法安装,...
  • LAMP_zy
  • LAMP_zy
  • 2015年12月06日 17:09
  • 7110

分享一种最简单的Android打渠道包的方法

做Android开发一转眼就四年了,以前是用ant打包的,习惯了也没觉得慢。 今年年初加入了新公司,新公司用的是Android studio开发,用的是gradle构建项目。 由于gradle构建每次...
  • wei1583812
  • wei1583812
  • 2015年03月19日 20:09
  • 8990

#号称5秒1000个包的超快速多渠道打包方式

@(Android)[多渠道打包]多渠道打包是一款App产品上线前必要的一个步骤,以往的多渠道打包方式大多是通过集成友盟服务等方式,然而速度并不是很快,可以说数量多的时候是很慢,今天要介绍的Packe...
  • y18334702058
  • y18334702058
  • 2016年04月04日 11:11
  • 826

App渠道打包的两种方法

一、手工打包 channel.list是渠道列表; channel.bat是打包脚本; _unsigned.bat是去签名脚本; 7-Zip是压缩包文件; 以友盟渠道包为例: 使用...
  • ddnosh
  • ddnosh
  • 2018年01月03日 12:17
  • 99

如何快速自动化打出多个渠道包。(本篇转载)

转载原文地址 http://blog.csdn.net/myliuyx/article/details/52171145   传统打包方法原理 传统的打包方法都是在AndroidManifes...
  • u014470404
  • u014470404
  • 2016年08月30日 15:13
  • 457

android studio 使用gradle批量打渠道包

在没有批量打包工具之前,每次项目上线或者更新,都是打渠道包打到左右手残废。在AS中使用了强大的gradle 并支持批量打包,解放我们的双手和双脚。我这里以友盟为例1. Mainfest 文件中添加一个...
  • i374711088
  • i374711088
  • 2015年07月23日 17:39
  • 1883

Gradle实现的两种简单的多渠道打包方法

本来计划今天发Android的官方技术文档的翻译——《Gradle插件用户指南》的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了。 今天就说一下使用Gradle进行类似友盟这样的多渠道打...
  • maosidiaoxian
  • maosidiaoxian
  • 2014年12月18日 09:07
  • 55208

android多渠道打包&&几个打包小技巧

多渠道打包的意义、原理;使用友盟实现的步骤;其他几个打包技巧。
  • u013071408
  • u013071408
  • 2017年01月01日 17:25
  • 2408
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何快速自动化打出多个渠道包。(本篇转载)
举报原因:
原因补充:

(最多只允许输入30个字)