签名版本之间的区别 - V1(Jar Signature)和V2(Full APK Signature)在AndroidStudio中生成签名的apk时?

时间:2017-03-07 12:36:04

标签: android android-studio apk signature signing

请至少选择一个要在Android Studio 2.3中使用的签名版本

现在,在Android Studio中生成已签名的apk时,它显示两个选项(CheckBox),即1. V1(Jar Signature)和2.“V2(完整APK签名)”,最后为签名版本签名apk生成过程的步骤。

**Signature Versions** options

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

我应该使用哪个(或两者兼而有之)来签署apk以进行游戏商店发布?

当我使用第二个选项时,我在安装apk时遇到错误安装解析失败无证书

5 个答案:

答案 0 :(得分:193)

这是Android 7.0中引入的一种新签名机制,其附加功能旨在使APK签名更加安全。

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

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

答案 1 :(得分:35)

我应该使用(或两者)对apk进行Play商店发布吗? 答案是

根据https://source.android.com/security/apksigning/v2.html#verification

  

在Android 7.0中,可以根据APK签名方案v2(v2方案)或JAR签名(v1方案)验证APK。较旧的平台忽略v2签名并仅验证v1签名。

我尝试使用 V2(Full Apk签名)选项生成构建。然后当我尝试在 7.0 设备下面安装发布版本时,我无法在设备中安装内置版。

之后我尝试通过检查版本复选框和生成版本构建来构建。然后就可以安装build。

答案 2 :(得分:21)

编写here“默认情况下,Android Studio 2.2和Gradle 2.2的Android插件使用APK签名方案v2和使用JAR签名的传统签名方案签署您的应用程序。”

由于似乎这些新的复选框出现在Android 2.3中,我明白我以前的Android Studio版本(至少2.2版)都签了两个签名。因此,为了像以前一样继续,我认为最好同时检查两个复选框。

编辑2017年3月31日:提交了多个具有签名=>的应用。没问题:)

答案 3 :(得分:5)

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

APK签名方案v2验证

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

    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. 对于每个受完整性保护的JAR条目,
    5. META-INF/MANIFEST.MF包含一个相应命名的部分,其中包含条目未压缩内容的摘要。所有这些摘要都经过验证。
    6. 如果APK包含未在MANIFEST.MF中列出且不属于JAR签名的JAR条目,则
    7. APK验证失败。 因此,保护​​链是<signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→每个受完整性保护的JAR条目的内容。

答案 4 :(得分:3)

根据此链接:signature help

APK Signature Scheme v2提供:

  1. 更快的应用安装时间
  2. 更多保护,防止未经授权更改APK文件。
  3.   

    Android 7.0引入了APK Signature Scheme v2,一个新的应用程序签名   提供更快的应用安装时间和更多保护的方案   防止对APK文件的未经授权的更改。默认情况下,Android   Studio 2.2和用于Gradle 2.2的 Android插件使用标记您的应用   两者 APK签名方案v2和传统的签名方案,其中   使用JAR签名。

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

      

    虽然我们建议将APK Signature Scheme v2应用到您的应用中,   这个新计划不是强制性的。如果您的应用无法正常构建   使用APK签名方案v2时,您可以禁用新方案。