Android多渠道打包方案
作者:互联网
1、为什么需要多渠道包
为了区分同一app不同android市场,也就是说不同的市场(比如小米市场、华为市场、应用宝等)使用不同的渠道包,所用代码一致,只是渠道号 channel 不一样,这样做是为了方便运营统计。
2、多渠道打包方案
2.1 友盟多渠道打包
将渠道标识放到 AndroidManifest.xml 中的 meta-data 中;
在 gradle 编译的时候,根据这个配置将meta-data中的占位符替换成对应的值;
获取渠道时,android代码中读取 UMENG_CHANNEL 的值,添加到请求参数中。
AndroidManifest.xml:
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/> |
在app的 build.gradle 中配置渠道号:
android { productFlavors { yingyongbao { manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"yingyongbao" ] } baidu { manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"Baidu"] } } } |
优点:不依赖其他工具,gradle自己就可以。
缺点:每个渠道都重新打包,耗时;渠道包DEX的CRC值不一致,不利于热更新。(热更新:打出基础包APK和新包APK的差异补丁,用户不需要更新app,下载补丁,把补丁和基础包APK合成新包APK,就要求生成补丁的基础包DEX和用于合成新包的基础包DEX是全然一致)
2.2 ApkTool 解包重签名
替换Assets里的资源文件:
解压缩-->删除签名信息-->写入签名文件assets/channel.conf-->压缩-->重新签名
优点:不需要再次编译Java代码
缺点:解压签名再压缩同样较为耗时;不稳定,升级Gradle Plugin版本后,可能导致解包低版本的APK失败。
2.3 360多渠道打包
zip文件末尾有个comment区域,相当于注释内容,修改该区域内容不影响APK内容。
优点:不破坏签名、不重新打包;高效、1s内可以打300多个包;在下载apk的同时,服务端可以写入一些信息,例如邀请码,分享信息等
缺点:由于android7.0加入了v2技术,该方法android7.0以下会校验失败;渠道信息容易被改变。
2.4 美团早期应对v1签名
/META-INF对签名机制是豁免的,在签名后的APK中,在 /META-INF 目录下,增加“mtchannel_渠道号”空文件,文件名来表示渠道号。
优点:耗时较短,平均出包0.05s
缺点:由于android7.0加入了v2技术,在v2技术下, /META-INF模块也会经过签名校验,该方法android7.0以下会校验失败;渠道信息容易被改变,不法渠道商可通过工具进行网络劫持篡改渠道号。
2.5 美团的 Walle(瓦力)
在Apk中的APK Signing Block区块添加自定义的渠道信息来生成渠道包:
在v2签名后的APK中ID-value进行扩展,提供自定义的ID-value(渠道信息),保存在APK中;
apk在安装的过程中,会忽略这个ID-value,从而正常安装;
app在运行时,通过中央目录、中央目录结尾等结构中的信息找到ID-value,从而实现获取多渠道信息的功能
优点:打包耗时短,因为只需要复制APK,增加ID-value,对于30M大小的包只需要100多毫秒生成一个渠道包;运行时获取渠道信息只需要约几毫秒。
2.6 腾讯的 VasDolly
v1签名时,利用zip的comment区域,在EOCD区域的comment区域增加渠道信息。
v2签名时,增加的APK 签名块,来记录签名信息,该区域包含了多个键值对,因此,可以增加一个额外的 ID-值,用来记录渠道信息。
先检测签名类型,再选择合适的签名方式。
优点:同时支持v1、v2签名。
目前使用的多渠道方案:
相关链接:
https://www.jianshu.com/p/1e9bb813e39d
https://www.jianshu.com/p/8d525a405b6f
https://blog.csdn.net/mayn666/article/details/79878469
https://tech.meituan.com/2017/01/13/android-apk-v2-signature-scheme.html
https://github.com/Tencent/VasDolly/wiki/VasDolly实现原理
标签:渠道,value,ID,APK,v2,签名,Android,多渠道,打包 来源: https://blog.csdn.net/qq_36639104/article/details/116234448