首现讲一下多渠道打包意义:


多渠道打包只有在Android开发中才会有,iOS中直接放在AppStore。

而渠道也是Android开发中一个比较重要的环节,其主要作用就是方便统计、标记。根据不同的渠道加载不同的数据。


其次讲一下多渠道打包过程:


目前市面上多渠道打包大致有一下几种:

1:通过开发工具编译获得(Eclipese、As、等等)

2:Ant插件;

3:ApkTool

4:bash shell

5:Lua

6:Python

7:Gradle

8:Maven


… 目前就我知道的有以上几种。下面具体说说


1:开发工具IED打包就不用说了,在编辑工具里有自带的build Generate Signed Apk

这种打包可以说是最原生,由Google研发


2:Ant打包

Ant是一种插件,网上博文很多http://www.tuicool.com/articles/IvAnyy

其工作过程通过一个纯txt文本在里面写入我们需要的渠道去换名字符串,程序在打包的时候会遍历这个文件,然后替换对应的字符串打包


3:ApkTool

ApkTool是Google提供的反编译工具

其工作基本上是解压、替换、重新编译…


4:bash shell

bash shell 在晚上的资源比较少

应该也是用的比较少的吧,反正我是没用过。其工作和Ant差不多


5:Lua

Lua 脚本打包 http://www.jb51.net/article/61925.htm


6:Python

Python是美团技术团队开源的一个自动化打包方法。http://tech.meituan.com/mt-apk-packaging.html

其工作可以说是上面打包中最为加单也是效率最高的。直接解压apk,解压后的根目录会有一个META-INF目录。通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道,可以不用重新签名应用。因此,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。

下面来说一下注意的 https://github.com/GavinCT/AndroidMultiChannelBuildTool


问:同样一个版本号的2个渠道包,比如先装了360,那么SharedPreferences存的就是360了。这时再用xiaomi渠道的去覆盖安装,那么读出来的渠道号还是360的。不知道博主对这个问题怎么看,还是去掉sp缓存,就保留内存和包中读取?


答:

看你个人的使用场景吧 一般来说 渠道使用无非是统计升级渠道、根据相应渠道变化样式、上报崩溃信息携带渠道。


针对1:统计不怎么需要特别情况,你说的这种情况我们也考虑过,但一般用户大多不会这么折腾,也就QA这么玩。

针对2:使用flavor来解决了。而不是判断渠道。早期适配魅族手机也是不管渠道,只看是不是魅族手机

针对3:这个印象也不大,如果是某渠道包崩溃,少这几个也不会影响。


7:Gralde

Gradle打包是Google提供的多渠道构建方法。Gradle是通过artifact来打包构建的。http://tech.meituan.com/gradle-practice.html

其工作就是一个一个的编译构建。


8:Maven

Maven配合使用android-maven-plugin插件,以及maven-resources-plugin插件可以很方便的生成渠道包。

其工作也是逐渐替换渠道号。


综上:

bash shell、Lua、Maven这三种我没有使用过,其他的基本上都使用过,对比之下,在AS还没盛行的时代里,Ant可以说是很火的,ApkTool基本上是用来反编译的,真正用来多渠道打包的也就只有Gradle、Ant、Python。

包括现在百度的多渠道签名打包工具,也是采用的解包替换重新编译,它的过程是单个解压替换重新打包。如果渠道少还好,一旦渠道多到几十上百之后都是吃不消的。

Gradle打包的灵活性和Python、百度脚本工具是一样的,都是用一个文本文件或是一段文本来作为渠道号遍历读取。省去了单个配置那么复杂。

但Gradle和百度的脚本打包效率都很低,如果电脑配置好点的,打包基本上1分钟左右一个渠道。曾经我在一家公司差不多每天都要打包,30个包50+个渠道,那时候用Eclipese打包,一个一个的运行,多流弊的电脑也会整阳痿。从那时候就开始研究Ant打包,装插件、配环境、各种复杂的东西,最后发现真的蛮复杂,也是因为第一次接触,出这么个插件出来就是难为菜鸟的嘛。

后来开始研究Gradle打包,Gradle打包可以说是一种解脱,下好Gradle配置之后,在项目中配置Gradle,然后配置好配置文件。命名运行就ok,不过对apk要求很高,不严格的点9图会直接编译通不过,对于接触过AS的来说,就是一种福音。

Python是美团技术团队发布的一个打包脚本,其工作相当于copy apk,多少个渠道就copy多少个apk,apk在启动运行的时候读取里面的空文件名为渠道标识。


综上分析:

Python是最实用的,也是最简单的,可以在运营人员电脑上配置Python环境,然后告诉他们如何用,以后打包的事就可以解脱了。