在使用新的"APK Signature Scheme v2"时,我们应该了解哪些预防措施和警告?

and*_*per 16 android code-signing apk

背景

最近,当我打算将我的APK签名发布到Play商店时,我得到了这个新选项:

在此输入图像描述

按"签名帮助"链接,打开此网页: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上使用这两种方法实际签名,让您也可以在旧版本的Android上安装该应用程序).

问题

我不明白使用新的签名机制是否安全,以及他们对文档的确切警告.

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

警告:如果您使用APK签名方案v2对应用程序进行签名并对应用程序进行进一步更改,则应用程序的签名将失效.出于这个原因,在使用APK签名方案v2签署您的应用程序之前使用诸如zipalign之类的工具,而不是之后.

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

我尝试了什么

我尝试使用所有3种方式签署应用程序:

  • V1
  • V2
  • v1和v2(一起放在一个APK中)

似乎单独的v2不能安装在7.x之前版本的Android上,但其余的可以,而且似乎v2小于v1,而v1和v2比v1稍微大一点.

问题

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

  2. 用户升级会有什么问题吗?用户从v1升级到v2,或从v2(或v1和v2)升级到v1(如果出现问题) - 是否有任何问题?

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

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

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

Ale*_*bin 11

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

是.只要您在签名后不修改APK,就可以了.

  1. 用户升级会有什么问题吗?用户从v1升级到v2,或从v2(或v1和v2)升级到v1(如果出现问题) - 是否有任何问题?

没有问题.一旦Android Package Manager验证APK签名(使用v1或v2方案),它就会提取签名证书,然后以任何进一步的逻辑为基础(例如,此APK是否允许用作旧版本的更新)在签署证书上.因此,只要你的APK使用相同的签名证书进行签名,你应该是好的.

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

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

我不知道任何其他警告.

  1. 除了更好的安全性之外,使用v1和v2(一起)提供的签名是什么,我在v1上没有?

v2签名验证速度更快.这意味着v2签名的APK会在Android Nougat(Android 7.0,API Level 24)和更新版本上更快地安装/更新.

  1. 我的猜测是,只有Android 7,我们才能使用v2,这提供了一种拥有更小的APK的方法.这是真的吗?

正确.但是,APK大小节省从来都不是APK Signature Scheme v2的目标.保存只是一个与APK中文件数量成比例的小数字,而不是它们的大小.您节省哪些每个文件的摘要中META-INF/MANIFEST.MFMETA-INF/*.SF.它META-INF/*.(RSA|DSA|EC)被APK中其他地方类似大小的APK Signature Scheme v2 Block取代.