签名版本之间的差异- V1 (Jar签名)和V2(完整的APK签名),而生成一个签名的APK在安卓工作室?

请选择至少一个在androidstudio2.3中使用的签名版本

现在,在Android Studio中生成签名APK时,它会显示两个选项(复选框),即1。V1 (Jar Signature)和2。在签名APK生成过程的最后一步中将V2 (Full APK Signature)作为签名的版本

**签名版本**选项

那么,在新的Android Studio更新中,V1 (Jar签名)V2(完整APK签名)之间的区别是什么?

我应该使用哪种(或两者都使用)来签署apk来发布play store ?

此外,当我使用第二个选项时,我在安装APK时得到错误安装解析失败没有证书

118078 次浏览

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

这不是强制性的。如果可能的话,您应该勾选这两个复选框,但是如果新的V2签名机制给您带来了问题,您可以省略它。

因此,如果遇到问题,您可以不勾选V2,但如果可能的话,应该检查它。

更新:现在这是强制性的,当针对Android 11。

它被写为在这里,“默认情况下,Android Studio 2.2和Android Plugin for Gradle 2.2使用APK签名方案v2和使用JAR签名的传统签名方案对应用程序进行签名。”

这些新的复选框似乎是在Android 2.3中出现的,我知道我之前版本的Android Studio(至少2.2)确实使用了两个签名。因此,继续我之前所做的,我认为最好同时选中两个复选框。

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

我认为代表了一个很好的答案。

APK签名方案v2验证

  1. 找到APK Signing Block并验证:
    1. APK Signing Block的两个size字段包含相同的值。
    2. ZIP Central Directory紧跟在ZIP End of Central Directory记录之后。
    3. ZIP End of Central Directory后面没有更多的数据。
    4. 李< / ol > < / >
    5. APK Signing Block中找到第一个APK Signature Scheme v2 Block。如果v2 Block存在,请继续执行步骤3。否则,退回到使用v1方案验证APK。
    6. 对于APK Signature Scheme v2 Block中的每个签名者:
      1. 从签名中选择支持最强的签名算法ID。强度排序取决于每个实现/平台版本。
      2. 使用公钥从签名中验证对应的签名。(现在可以安全地解析签名数据了。)
      3. 验证摘要和签名中签名算法id的顺序列表是否一致。(这是为了防止签名剥离/添加。)
      4. 使用与签名算法使用的摘要算法相同的摘要算法计算APK内容的摘要。
      5. 验证计算摘要是否与摘要中的相应摘要相同。
      6. 验证证书的第一个证书的SubjectPublicKeyInfo与公钥相同。
      7. 李< / ol > < / >
      8. 如果至少找到一个签名者,则验证成功,并且步骤3对于每个找到的签名者都成功。

      注意:如果步骤3或步骤4失败,APK不能使用v1方案进行验证。

      jar签名的APK验证(v1方案)

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

      1. 每个签名者都由META-INF/<signer>.SFMETA-INF/<signer>.(RSA|DSA|EC) JAR条目表示。
      2. <signer>.(RSA|DSA|EC)是一个具有SignedData结构的PKCS #7 CMS ContentInfo,其签名通过<signer>.SF文件进行验证。
      3. <signer>.SF文件包含META-INF/MANIFEST.MF的整个文件摘要和META-INF/MANIFEST.MF每个部分的摘要。验证MANIFEST.MF的整个文件摘要。如果失败,则验证每个MANIFEST.MF节的摘要。
      4. META-INF/MANIFEST.MF对于每个受完整性保护的JAR条目,都包含一个相应命名的section,其中包含该条目未压缩内容的摘要。所有这些摘要都得到了验证。
      5. 如果APK包含未在MANIFEST.MF中列出且不是JAR签名的一部分的JAR条目,APK验证失败。 因此,保护链是<signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→每个受完整性保护的JAR条目的内容

我应该使用(或两者)签署apk为play store发布? 答案是是的。< / p >

As per https://source.android.com/security/apksigning/v2.html#verification : < / p >

Android 7.0系统支持APK v2签名方案(v2方案)和JAR v1方案(v1方案)两种方式验证APK。旧的平台忽略v2签名,只验证v1签名。

我试图生成生成检查V2(Apk完整签名)选项。然后,当我试图在7.0设备下面安装一个版本构建时,我无法在该设备中安装构建。

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

根据这个链接:签名帮助

APK签名方案v2提供:

  1. 更快的应用程序安装时间
  2. 更多的保护,防止未经授权的更改APK文件。
Android 7.0引入了APK签名方案v2,一个新的应用程序签名 方案,提供更快的应用程序安装时间和更多的保护 禁止未经授权更改APK文件。默认情况下,Android Studio 2.2和Android Plugin for Gradle 2.2使用 同时 APK签名方案v2和传统签名方案,其中

.使用JAR签名

使用APK签名方案v2推荐,但是是不是强制性的

虽然我们建议将APK签名方案v2应用于您的应用程序, 这个新方案不是强制性的。如果你的应用没有正确构建

.当使用APK签名方案v2时,可以禁用新方案