APK Signature Scheme v2

来源:互联网 发布:网络的利大于弊 编辑:程序博客网 时间:2024/05/16 05:54

背景知识

老司机要开车了,你准备好了吗?
Android Studio 2.2 最近发布了许多新增功能和改进功能(详情请戳这里)
对于Android开发者来说,我想大家应该都知道,在 Android 7.0 Nougat 中引入了全新的 APK Signature Scheme v2,所以我大致总结一下,我们开发者需要了解的新的打包的方式和签名步骤,想深入了解原理可以移步到深入解析APK Signature Scheme v2。

基本信息

  1. 用于验证 APK 完整性的 APK 加密签名现在直接位于 ZIP Central Directory 前面。
  2. 在 v1 中,签名通过整个 APK 文件的二进制内容进行计算并验证,而不是通过归档中每个文件的已解压文件内容。
  3. 可同时通过 v1 和 v2 签名对 APK 进行签署,以使其仍能向后兼容以前的 Android 版本。

原因

为什么谷歌要做这个事情呢?第一点毋庸置疑,肯定是处于安全性的考虑,之前的校验方式开发者可以在打包之后对apk做很多处理,第二为了性能考虑,安装校验的时候不需要再解压缩校验,从而提升安装速度(说句玩笑话,个人感觉没什么鸟用,也不需要关系)

那么问题来了

全新的签名给我们程序员带来的麻烦却很大:

  1. 由于在 v1 中仅验证未解压的文件内容,因此,在 APK 签署后可进行许多修改 - 可以移动甚至重新压缩文件。事实上,编译过程中要用到的 zipalign 工具就是这么做的,它用于根据正确的字节限制调整 ZIP 条目,以改进运行时性能。而且我们也可以利用这个东西,在打包之后修改META-INF目录下面的内容,或者修改Zip的注释来实现多渠道的打包,在v1签名中都可以校验通过
  2. v2 签名将验证归档中的所有字节,而不是单个 ZIP 条目,因此,在签署后无法再运行 zipalign。正因如此,现在,在编译过程中,Google将压缩、调整和签署合并成一步完成。
  3. 如有任何自定义任务篡改 APK 文件或对其进行后处理(无论以任何方式),那么v2 签名会有作废的风险,从而导致您的 APK 与 Android 7.0 及更高版本不兼容。

解决途径

  1. 如果我们选择手动签名(比如使用命令行)那么 Android SDK 中提供了一个名为 apksigner 的新工具,该工具可同时提供 v1 和 v2 APK 签署与验证。请注意,如果您使用 v2 签名,则在运行apksigner之前,必须先运行 zipalign
  2. 来自 JDK 的 jarsigner 工具与 Android v2 签名不兼容,因此,如果您要保留 v2 签名,您不能用它来重新签署 APK。
  3. 如果我们还想使用之前的打包方式,不做修改,那么Google也是为我们提供了配置方法的用来关闭v2签名:
    v1SigningEnabled falsev2SigningEnabled false

总结

虽然说现在Google有提供方法来关闭v2校验,但是我相信,一旦等到这种方式成熟之后,它会成为一个必需品,毕竟安全第一嘛,我们还是要接纳新事物的,好了,大概就讲这么多,有需要的可以看看。


转自---http://www.jianshu.com/p/3a179acc7c4a

阅读全文
0 0
原创粉丝点击