常见方案
目前,android打渠道包的方式大致分为以下几种:
- 将渠道信息hard code在代码中或manifest文件中
- 项目内放置渠道文件,然后代码中读取该文件来识别渠道
- android studio 的productFlavors方案
- 美团META-INF方式打包方案
- 添加zip注释方式打包方案
- 美团Walle(V2多渠道打包方案)
方案特点
前2种方案
要修改项目源文件并编译打包,效率最低
productFlavors方案
android studio自带的多渠道打包方案,功能非常强大,不仅仅是识别渠道信息,还能使用不同的源代码、资源等几乎所有不同渠道的打包需求。但这种方式同样需要每个渠道都重新编译打包,对于只需要标记不同渠道信息的项目而言耗时太多
点击这里可以了解更多关于productFlavors的内容
利用android签名不校验META-INF文件夹内容的漏洞,在此文件夹内放置渠道信息文件将不受签名限制
打包签名一个无渠道信息的apk完成后,复制此apk并将不同渠道信息文件分别插入新生成的apk文件中,从而实现各渠道打包
这种方式速度非常快:900个渠道包用时不到一分钟
利用android签名不校验zip文件注释信息的漏洞,apk本质是一个zip包,将渠道信息写入zip文件注释内将不受签名限制
打包签名一个无渠道信息的apk完成后,复制此apk并将不同渠道信息字符串分别写入新生成的apk文件
100个渠道包只需10秒
是专门针对增强版签名的一种多渠道打包方案
利用V2签名的校验方式不校验APK Signing Block并且忽略APK Signing Block中多余的ID-VALUE这个特点,将渠道信息写到APK Signing Block中。
由于是直接对zip格式文件的操作,性能与添加zip注释方式相当
android 7.0 v2增强版签名
为了提高Android系统的安全性,Google从Android 7.0开始增加一种新的增强签名模式,从Android Gradle Plugin 2.2开始,构建系统在打包应用后签名时默认使用APK signature scheme v2,该模式在原有的签名模式上,增加校验APK的SHA256哈希值,如果签名后对APK作了任何修改,安装时会校验失败,提示没有签名无法安装
android7.0下快速打渠道包的兼容方案
- 推荐使用的方案: Walle
- 官方方案:在build.gradle内的signConfigs中添加 v2SigningEnabled false 来禁用v2版签名方式
android {
...
defaultConfig { ... }
signingConfigs {
release {
storeFile file("myreleasekey.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
v2SigningEnabled false
}
}
}
- 先打出未签名的apk,再复制该apk并使用美团方式或注释方式为其添加渠道信息,然后再签名。