首页 文章

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

提问于
浏览
185

Please select at least one of the signature versions to use in Android Studio 2.3

现在,当在Android Studio中生成签名的apk时,它在签名的apk生成过程的最后一步中显示两个选项(CheckBox),即1. V1(Jar Signature) 和2.`V2(Full APK Signature)'作为 Signature Versions .

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

我应该使用哪个(或两者)来签署apk for play store release?

当我使用第二个选项时,我在安装apk时遇到错误 Install Parse Failed No Certificates .

5 回答

  • 4

    根据这个链接:signature help

    APK Signature Scheme v2提供:

    • 更快的应用安装时间

    • 更多保护,防止未经授权更改APK文件 .

    Android 7.0引入了APK Signature Scheme v2,这是一种新的应用程序签名方案,可提供更快的应用程序安装时间,并提供更多保护,防止对APK文件进行未经授权的更改 . 默认情况下,Android Studio 2.2和Gradle 2.2的Android插件使用APK签名方案v2和使用JAR签名的传统签名方案签署您的应用程序 .

    recommended 使用APK签名方案 v2 但是 not mandatory .

    虽然我们建议将APK签名方案v2应用于您的应用程序,但此新方案不是强制性的 . 如果您的应用在使用APK签名方案v2时无法正确构建,则可以禁用新方案 .

  • 27

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

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

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

  • 20

    我应该使用(或两者)签署apk for play store release吗?答案是 YES .

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

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

    我试图通过检查 V2(Full Apk Signature) 选项生成构建 . 然后,当我尝试在 7.0 设备下面安装发布版本时,我无法在设备中安装内置版本 .

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

  • 172

    它被写成here "By default, Android Studio 2.2 and the Android Plugin for Gradle 2.2 sign your app using both APK Signature Scheme v2 and the traditional signing scheme, which uses JAR signing."

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

    EDIT March 31st, 2017 : 提交了几个带签名的应用=>没问题:)

  • 3

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

    APK Signature Scheme v2 verification

    • 找到 APK Signing Block 并验证:

    • APK Signing Block 的两个大小的字段包含相同的值 .

    • ZIP Central Directory 紧接着 ZIP End of Central Directory 记录 .

    • ZIP End of Central Directory 后面没有更多数据 .

    • 找到 APK Signing Block 内的第一个 APK Signature Scheme v2 Block . 如果v2阻止(如果存在),请继续执行步骤3.否则,请回退到使用v1方案验证APK .

    • 对于 APK Signature Scheme v2 Block 中的每个签名者:

    • 从签名中选择最强支持的签名算法ID . 强度排序取决于每个实现/平台版本 .

    • 使用公钥验证签名数据签名的相应签名 . (解析签名数据现在是安全的 . )

    • 验证摘要和签名中的签名算法ID的有序列表是否相同 . (这是为了防止签名剥离/添加 . )

    • 使用与签名算法使用的摘要算法相同的摘要算法计算APK内容的摘要 .

    • 验证计算的摘要是否与摘要中的相应摘要相同 .

    • 验证第一个证书证书的 SubjectPublicKeyInfo 与公钥是否相同 .

    • 如果找到至少一个签名者并且每个找到的签名者的步骤3成功,则验证成功 .

    注意:如果在步骤3或4中发生故障,则不得使用v1方案验证APK .

    JAR-signed APK verification (v1 scheme)

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

    • 每个签名者由 META-INF/<signer>.SFMETA-INF/<signer>.(RSA|DSA|EC) JAR条目表示 .

    • <signer>.(RSA|DSA|EC) 是具有SignedData结构的 PKCS #7 CMS ContentInfo ,其签名通过 <signer>.SF 文件进行验证 .

    • <signer>.SF 文件包含 META-INF/MANIFEST.MF 的整个文件摘要和 META-INF/MANIFEST.MF 的每个部分的摘要 . 验证了 MANIFEST.MF 的整个文件摘要 . 如果失败,则会验证每个 MANIFEST.MF 部分的摘要 .

    • META-INF/MANIFEST.MF 包含,对于每个受完整性保护的JAR条目,a相应命名的部分,包含条目未压缩内容的摘要 . 所有这些摘要都经过验证 .
      如果APK包含未在 MANIFEST.MF 中列出且不属于JAR签名的JAR条目,则

    • APK验证将失败 . 因此,保护链是 <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF →每个受完整性保护的JAR条目的内容 .

相关问题