签名版本之间的区别 – V1(瓶签名)和V2(全APK签名),而在AndroidStudio中生成签名的apk?

请至lessselect一个在Android Studio 2.3中使用的签名版本

现在在Android Studio中生成已签名的apk文件的同时,在已签名的apk生成过程的最后一步显示了两个选项(CheckBox),分别是1. V1(Jar Signature)和2. V2(Full APK Signature)

**签名版本**选项

那么,在新的Android Studio更新中,这些V1(Jar Signature)V2(Full APK Signature)之间有什么区别呢?

我应该使用哪一个(或两者)来为Play商店发行版签名?

另外,我收到错误安装parsing失败无证书安装apk时,我使用第二个选项。

它是Android 7.0中引入的一种新的签名机制,具有旨在使APK签名更安全的附加function。

这不是强制性的。 如果可能,您应该检查这两个checkbox,但如果新的V2签名机制给您带来问题,您可以省略它。

所以如果遇到问题,你可以不要选V2,但是如果可能的话应该检查一下。

在这里写道:“默认情况下,Android Studio 2.2和Android插件Gradle 2.2使用APK Signature Scheme v2和传统签名scheme(使用JAR签名)签名您的应用程序。

由于看起来这些新的checkbox与Android 2.3出现,我明白,我以前的Android Studio版本(至less2.2)确实签署了两个签名。 所以,继续像以前一样,我认为最好同时检查两个checkbox。

编辑2017年3月31日:提交了两个签名=>没有问题的应用程序的几个应用程序:)

我是否应该使用(或两者)签署apk游戏商店版本? 答案是YES

按照https://source.android.com/security/apksigning/v2.html#verification

在Android 7.0中,APK可以根据APK签名schemev2(v2scheme)或JAR签名(v1scheme)进行validation。 旧平台忽略v2签名,只validationv1签名。

我试图通过检查V2(Full Apk签名)选项来生成构build。 然后,当我试图安装在7.0以下的设备发布版本,我无法安装生成的设备。

之后,我尝试通过检查版本checkbox和生成发布版本来构build。 然后能够安装构build。

我认为这是一个很好的答案。

APK签名schemev2validation

  1. findAPK Signing Block并validation:
    1. APK Signing Block两个大小字段包含相同的值。
    2. ZIP Central Directory紧接着ZIP End of Central Directorylogging的ZIP End of Central Directory
    3. ZIP End of Central Directory没有更多的数据。
  2. findAPK Signature Scheme v2 Block的第一个APK Signature Scheme v2 Block APK Signing Block 。 如果v2 Block存在,请继续步骤3.否则,使用v1scheme回退到validationAPK。
  3. 对于APK Signature Scheme v2 Block中的每个签名者:
    1. 从签名中select最强支持的签名algorithmID。 强度sorting取决于每个实现/平台版本。
    2. 使用公钥validation签名中相应的签名和签名数据的签名。 (parsing签名数据现在是安全的。)
    3. validation摘要和签名中签名algorithmID的有序列表是否相同。 (这是为了防止签名剥离/添加。)
    4. 使用与签名algorithm使用的摘要algorithm相同的摘要algorithm计算APK内容的摘要。
    5. validation计算出的摘要与摘要中相应的摘要是否相同。
    6. validation证书的第一个证书的SubjectPublicKeyInfo是否与公钥相同。
  4. 如果至less有一个签​​名者被发现,并且步骤3对每个find的签名者都成功,则validation成功。

注意:如果在步骤3或步骤4中发生故障,则不得使用v1schemevalidationAPK。

JAR签名APKvalidation(v1scheme)

JAR签名APK是一个标准的签名JAR,它必须包含META-INF/MANIFEST.MF列出的条目,并且所有条目必须由同一组签名者签名。 其完整性validation如下:

  1. 每个签名者都由META-INF/<signer>.SFMETA-INF/<signer>.(RSA|DSA|EC) JAR条目表示。
  2. <signer>.(RSA|DSA|EC)是带有SignedData结构的PKCS #7 CMS ContentInfo ,其签名通过<signer>.SF文件进行validation。
  3. <signer>.SF文件包含META-INF/MANIFEST.MF摘要和META-INF/MANIFEST.MF的每个部分的摘要。 MANIFEST.MF的全文摘要已被validation。 如果失败,则会validation每个MANIFEST.MF部分的摘要。
  4. 对于每个完整性保护的JAR条目, META-INF/MANIFEST.MF包含一个相应命名的部分,其中包含条目未压缩内容的摘要。 所有这些摘要都经过validation。
  5. 如果APK包含未在MANIFEST.MF列出的JAR条目并且不属于JAR签名,那么APKvalidation将失败。 <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF →每个完整性保护的JAR条目的内容。