Android 多渠道打包方式详解

面试的时候,如果面试官突然问到:你们渠道包是怎么打的?如果你说是用gradle一个一个编译的,然后他很鄙视的说这个效率太低啦,你们写过什么脚本自己打渠道包没?你肯定心里想,卧槽,这么狂炫吊炸天,自己写脚本打包?!其实这个根本也不是太难啦!!今天就来聊聊多渠道打包的原理以及如何自己DIY多渠道打包的工具!

渠道包出现

当一个产品到发版的时候,我们搞Android的就会面临一个超级尴尬的问题:国内这么多的渠道,渠道统计是必须做滴,那么十多个主要渠道再加无限量的地推渠道包就成了一个巨坑了!这一块耗费的时间是一个无底洞啊!!!

方式一览

这里一共会介绍三种渠道包的实现方式,分别是:
1、使用gradle配置直接编译出不同的渠道包。
2、通过反编译修改对应的渠道号。
3、META-INF里面新加一个文件。

Gradle方式

不管是用友盟统计还是其他什么的,首先肯定都是要有一些准备工作的,由于本人就比较了解友盟的,所以就用友盟统计来举例啦!
友盟统计提供了两种渠道统计策略,其实就是一个自动挡的一个手动挡的。

在对应的build.gradle里面配置对应的信息:

如果手动去设置对应的渠道号的话,就在程序入口处调用以下方法:

那么怎么获取到对应的渠道号呢?!这个方法在之后的所有方式中都要使用滴,其实不管是哪种方式,最后都会调用这个方法去读相关数据的!!

2244299-578c82815a02a595
 buildVariants.png

当然你也可以使用命令行:gradlew assemble 组装出所有的渠道包!!

反编译方式

gradle方式用着也挺不错的,为什么还要去搞什么反编译这么麻烦的东西呢?因为它有一个很大的问题,那就是每一个包都是要去编译打包的!这是相当的耗时!time is 加班啊!谁也不想加班打渠道包咯!!反编译的方式就是节省了每个渠道包都去编译的时间,而是编译好一个渠道包之后就使用该渠道包,通过反编译动态修改AndroidManifest.xml里面的信息,然后再重新打包签名!

说到反编译,那么这里就不得不提大名鼎鼎的apktool.jar了!纳尼,你说你从未听说过?!没事儿,以前没有听过,现在会用了就行了!!

然后总结一下接下来的一系列套路:

解包->修改相关参数->打包->签名->Zipalign优化

  • 1、解包

你没有看错,就是这样的!因为我们是站在巨人的肩膀上工作的嘛,所以好多工作就不同自己搞了!

执行以上命令之后,如果不出什么意外,你就会得到一个文件夹:

 2244299-05215c8552210d9c

相关代码:

  • 2、修改对应的参数

打开对应的AndroidManifest.xml,你没有看错,什么都在里面,直接修改就好了!等等,xml解析你不会?!没有关系,这里有dom4j.jar给你使用啦!!
修改反编译之后的AndroidManifest文件相关代码

  • 3、打包

还是这么简单:

  • 4、签名

这个是jdk里面直接提供了的,只要你的环境变量配置好了的,就没有什么问题啦!
重新签名相关代码

  • 5、Zipalign优化
 2244299-4de7122228a381cf

如图所示,sdk/build-tools里面每个版本都是有这个东西的,加到环境变量中就好了!!!

zipalign 优化处理相关代码

美团方式

上面说的反编译要各种解包,打包,签名,相对也比较繁琐,然后我们可以发现,apk其实都是一个压缩包,我们直接在这个压缩包里添加对应的文件作为渠道号标记是不是又能省去上面繁琐的步奏呢?!打开一个APK文件之后你会看到META-INF这个文件夹!

2244299-88a9a898729b2cc9

apk压缩包.png

2244299-c5aa7be4fdec0814
META-INF.png

美团的方式就是在这里面直接再添加一个文件,然后通过这个文件的名称来指定对应的渠道号!

话不多说,直接上代码!!

2244299-5467d6c70e873eff
渠道包完成.png

最后送上读取相关的方法:

当然你肯定要手动设置了,这个没法直接在清单文件中去配置了!!

小结

主要的方式就是这三种了!可以说一个比一个快,一个比一个的定制也要高,效率提高了,灵活性似乎就会下降的,至于到底使用哪种方式,还是根据实际情况灵活选择吧,反正到现在,这些方案都是很成熟的,没有什么坑!一不小心又说了几句废话啊!

参考文档及Demo

1、美团Android自动化之旅—生成渠道包
2、GRADLE构建最佳实践 gradle也是很厉害的!
3、Android逆向之旅—反编译利器Apktool和Jadx源码分析以及错误纠正


4、github-AndroidUmengMultiChannelBuildTool
5、github-ApkCustomizationTool
6、github-AndroidMultiChannels

如有问题,欢迎拍砖 ~~~
—- Edit By Joe —-

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

1 4 收藏 4 评论

关于作者:joe

90后程序猿。。 个人主页 · 我的文章 · 3 ·      

可能感兴趣的话题



直接登录
最新评论
跳到底部
返回顶部