android多渠道打包方案总结及APK signature scheme v2兼容

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/cdecde111/article/details/55506311

常见方案

目前,android打渠道包的方式大致分为以下几种:

  1. 将渠道信息hard code在代码中或manifest文件中
  2. 项目内放置渠道文件,然后代码中读取该文件来识别渠道
  3. android studio 的productFlavors方案
  4. 美团META-INF方式打包方案
  5. 添加zip注释方式打包方案
  6. 美团Walle(V2多渠道打包方案)

方案特点

前2种方案

要修改项目源文件并编译打包,效率最低

productFlavors方案

android studio自带的多渠道打包方案,功能非常强大,不仅仅是识别渠道信息,还能使用不同的源代码、资源等几乎所有不同渠道的打包需求。但这种方式同样需要每个渠道都重新编译打包,对于只需要标记不同渠道信息的项目而言耗时太多
点击这里可以了解更多关于productFlavors的内容

美团方式

利用android签名不校验META-INF文件夹内容的漏洞,在此文件夹内放置渠道信息文件将不受签名限制
打包签名一个无渠道信息的apk完成后,复制此apk并将不同渠道信息文件分别插入新生成的apk文件中,从而实现各渠道打包
这种方式速度非常快:900个渠道包用时不到一分钟

添加zip注释方式

利用android签名不校验zip文件注释信息的漏洞,apk本质是一个zip包,将渠道信息写入zip文件注释内将不受签名限制
打包签名一个无渠道信息的apk完成后,复制此apk并将不同渠道信息字符串分别写入新生成的apk文件
100个渠道包只需10秒

美团Walle

是专门针对增强版签名的一种多渠道打包方案
利用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作了任何修改,安装时会校验失败,提示没有签名无法安装

APK signature scheme v2

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并使用美团方式或注释方式为其添加渠道信息,然后再签名。
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页