您的位置:首页 > 移动开发 > Android开发

高效地Android多渠道快速打包

2015-12-31 17:17 417 查看
背景:

为了运营的需要,我们需要对投放到市场上的apk安装包进行特定的标识,然后应用能将自身的渠道信息上传到运营后台,以方便运营部门对相应的渠道数据进行处理以及针对性的投放推广工作。

目前android的应用市场有上千个,特别多,所以设计个合理的多渠道打包策略非常重要,能直接影响版本的上线效率。

目前的多渠道的打包的方式主要有以下三种。

方式:

一、 代码编译生成渠道包

原理:每次都会修改渠道信息配置文件(AndroidManifest.xml),然后每个渠道包都经历编译、生成dex文件、apkbuilder、签名、zipalign等过程,结果就能输出所需要的多渠道包。

过程:

1、读取渠道列表;

2、遍历渠道表,生成渠道包

2.1 修改配置文件(AndroidManifest.xml)对应的渠道号;

2.2 执行build.xml进行打包;

2.3 将渠道包输出到知道的文件下。

大致代码如下:

<target name="modify-channel">
......
<replaceregexp file="AndroidManifest.xml"
match="(android:name="UMENG_CHANNEL"\s+android:value=")
(.*)(")"
replace="\1${channelName}\3"
encoding="UTF-8"
byline="false"/>
......
</target>


小结:这种方式比较简单和常规,之前很多打多渠道包的方式就是这种,实现起来比较简单,但缺点很明显,就是当渠道市场多时,打更多的渠道包的话就非常的好时机,因为每个渠道包都需要经历从编译到签名这个过程,非常的耗时,那有没更高效的方式呢,让我们看看第二种方式。

二、 反编译后生成多渠道包

原理:当我们生成一个apk文件后(母包),对其进行反编译,然后遍历渠道列表,依次修改配置文件的渠道信息,然后每个包重新进入打包流程:编译、压缩、签名等。

过程:

1、反编译apk;

2、读取渠道表信息;

3、遍历渠道表、修改配置文件(AndroidManifest.xml)渠道信息;

4、重新进入打包流程:编译、混淆、签名、对其等。

5、不同的渠道包分别输出到指定的文件目录下。

应用:这种方式在项目中之前也用过,后来发现有第三方平台支持这个过程,例如360、百度,连加固都集成了,但效率上还是慢,比如360的多渠道打包方式,之前我们项目需要200多个渠道包,先是上传个母包到360的云平台,然后平台进行加固和多渠道打包操作,基本就花去了一个上午的时间。后来发现百度也开发了多渠道打包的产品,原理是一样的,但发现他们对这个流程进行了一定的优化以及算法处理,相对来说效率比360的效率快不少。



使用360线上加固及多渠道打包平台



百度多渠道打包工具

小结:这种方式其实跟第一种大同小异,即每次输出新的渠道包都需要进行打包编译的 过程,效率还是有限的,即当渠道非常多的时候,那么整个流程就非常的耗时,这对于生成运营来说是不合理的,得改。那还有没更快的多渠道方式呢,真正实现运营生成效率的提升呢……还真有,让我们来看看第三种方式。

三、 给apk打“标签”

空闲的时候喜欢将近期热门app的新版本反编译出来瞧瞧,对apk文件的目录结构也算是比较了解。偶然的机会让我发现有些知名app的META-INF文件有情况:



常规的apk文件目录是这样的:



可以发现其比常规的目录内容多了几个空文件,然后就开始猜测其用途。

META-INF: 相当于信息包,用来配置应用程序、扩展程序、类加载器、服务等mf文件,关键一点就是,该文件里的内容是不参与签名的!所以,就凭它不参与签名这一点,我们就能做很多事情,包括这里所说的打包就可以利用上这一点,从而加快多渠道打包的速度。

过程:

1)准备好一个母包。(进过了编译、混淆、加固等过程);

2)准备渠道列表文件。需要打包的渠道信息,整理出来到文件当中来;

3)脚本实现,实现多渠道打包:读取apk母包,并遍历渠道表文件,copy母包文件,并用脚本注入相应的渠道号到META-INF当中,可以像上述app的做法,渠道号信息以空文件夹的文件名来体现。



4)输出渠道包。经过以上3步后就能输出多渠道包,整个过程非常地快,然后你就可以采集所需的渠道包投放到应用市场就可以了。

效果:200个渠道包20秒左右就能完成。相比于之前的打包效率,效率极大地得到了提升,提高了app的上线效率。



总结:从以上三种打包方式比较来看,第三种方式是最快的。多渠道包,说到底其实就是给每个相同的安装包贴上标签而已。而到底往哪贴很重要,直接决定了打包效率。第三种方式的话就直接选择META-INF这个特殊的文件夹中注入所需要渠道号的标签,所以效率非常高。(如果你发现了其他更快的多渠道打包方法,记得告诉我)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息