其他分享
首页 > 其他分享> > Android多渠道打包方案

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