使用新的 "APK Signature Scheme v2" 时,我们应该了解哪些注意事项和警告?

What precautions and warnings should we know about, when using the new "APK Signature Scheme v2"?

背景

最近,当我准备签署我的 APK 以发布到 Play 商店时,我得到了这个新选项:

按"Signature help"link,打开了这个网页: https://developer.android.com/about/versions/nougat/android-7.0.html#apk_signature_v2

搜索更多,我发现了这个:

http://android-developers.blogspot.co.il/2016/11/understanding-apk-packaging-in-android-studio-2-2.html

事实证明,它是 Android 7.x 上的新验证,可以帮助使 APK 更安全,同时体积更小。

我尝试使用这个新功能,正如博客上所写,它确实使 APK 变小了一点。此外,正如它所写的那样,它仅适用于 Android 7.x 及更高版本(但您实际上可以在同一个 APK 上使用这两种方法进行签名,让您在 [=81= 的旧版本上安装该应用程序]也是)。

问题

我不明白使用新的签名机制是否安全,以及他们在文档中警告的具体内容。

我读过至少一个警告,我认为大多数开发人员不需要特别注意:

Caution: If you sign your app using APK Signature Scheme v2 and make further changes to the app, the app's signature is invalidated. For this reason, use tools such as zipalign before signing your app using APK Signature Scheme v2, not after.

我想我可以忽略这个警告,因为我只是让 IDE 本身使用默认构建行为构建 APK。

我试过的

我尝试使用所有 3 种方式对应用程序进行签名:

在Android的7.x之前的版本上似乎不能单独安装v2,但其余的可以,而且v2似乎比v1小,而v1&v2确实是一个比 v1 大一点点。

问题

  1. 从旧签名切换到新签名是否安全(当然是启用两个签名)?

  2. 用户升级会有什么问题吗?用户从 v1 升级到 v2,或者从 v2(或 v1&v2)升级到 v1(以防出现问题)是否有任何问题?

  3. 我应该知道任何警告吗?我可以忽略我提到的警告是对的吗?

  4. 除了更好的安全性之外,使用 v1 和 v2(一起)签名还提供了哪些我在 v1 上没有的功能?

  5. 我的猜测是,只有从 Android 7 开始,我们才能使用 v2,它提供了一种拥有更小 APK 的方法。是真的吗?

  1. Is it safe to switch from the old signing to the new one (Enabling both signing of course) ?

是的。只要签名后不修改APK就可以了。

  1. Will users have any issues upgrading? Will users upgrading from v1 to v2, or from v2 (or v1&v2) to v1 (in case something went wrong) - have any issues?

没问题。一旦 Android Package Manager 验证了 AP​​K 签名(使用 v1 或 v2 方案),它就会提取签名证书,然后基于任何进一步的逻辑(例如,是否允许将此 APK 用作对旧的)仅在签名证书上。因此,只要您的 APK 使用相同的签名证书进行签名,您就可以了。

  1. Should I know about any warnings? Was I right that I can ignore the warning I've mentioned?

如果您仅使用 Android 插件 Gradle / Android Studio 来构建和签署您的 APK,则可以忽略该特定警告。该警告适用于使用自定义构建管道的开发人员,这些管道可能会在签名后修改 APK。

我不知道任何其他警告。

  1. Aside from better security, what does signing using v1&v2 (together) provide, that I don't have on v1 ?

v2 签名验证速度更快。这意味着 v2 签名的 APK install/update 在 Android Nougat(Android 7.0,API 级别 24)和更新版本上要快一点。

  1. My guess is that only from Android 7, we will be able to use just v2, which provides a way for having smaller APKs. Is it true?

正确。但是,节省 APK 大小从来都不是 APK 签名方案 v2 的目标。节省的只是一个很小的数字,与 APK 中的文件数量成正比,而不是它们的大小。您节省的是 META-INF/MANIFEST.MFMETA-INF/*.SF 中的每个文件摘要。 META-INF/*.(RSA|DSA|EC) 替换为 APK 中其他地方大小相似的 APK 签名方案 v2 块。