2017-03-07 70 views
120

请选择至少签名版本的Android Studio中使用2.3当在AndroidStudio中生成已签名的apk时,签名版本-V1(Jar Signature)和V2(Full APK Signature)之间的区别?

之一,而现在Android Studio中生成签署的apk,它显示两个选项(复选框),即1 V1(Jar Signature)和2`V2(全APK Signature)'作为签名版本在签名apk生成过程的最后一步。

**Signature Versions** options

那么,是这些V1(JAR签名)V2(全APK签名)在新的Android工作室更新之间的区别?

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

此外我得到错误安装解析失败无证书安装apk时,我使用第二个选项。

回答

118

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

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

所以,如果遇到问题,您可以不选中V2,但应该检查是否可能。

+0

尽管你应该重新提出你的问题,但是看起来你甚至没有阅读过链接的文档......知道你可以不选中这个选中标记是有用的。也许如果你添加了“遇到的错误信息和问题”,那么这个问题在将来使用v2后会变得更有价值 – Booger

+0

因此,我离开了v2。 –

+0

我已经通过使用V1和V2签名的应用程序上传了应用程序。之后,我从谷歌播放下载应用程序,并从Android Studio运行相同的版本,它向我显示“安装失败,因为设备具有包含相同包但具有不同签名的应用程序的对话框。 。 。 ..“ 你可以建议我我做错了什么需要更新build.gradle? –

18

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

由于看起来这些新的复选框与Android 2.3一起出现,我知道我的以前版本的Android Studio(至少2.2)确实签署了两个签名。所以,继续像以前一样,我认为最好同时检查两个复选框。

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

3

我觉得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 Signing Block内部的第一个APK Signature Scheme v2 Block。如果v2 Block存在,请继续执行步骤3。否则,请回退到使用v1方案验证APK。
  3. 对于在APK Signature Scheme v2 Block每个签名者:
    1. 选择签名的最强支持的签名算法ID。强度排序取决于每个实现/平台版本。
    2. 使用公钥验证签名对照签名数据的相应签名。 (现在解析签名数据是安全的。)
    3. 验证摘要和签名中的签名算法ID的有序列表是否相同。 (这是为了防止签名剥离/添加。)
    4. 使用与签名算法使用的摘要算法相同的摘要算法来计算APK内容的摘要。
    5. 确认计算出的摘要与来自摘要的相应摘要相同。
    6. 确认第一张证书证书的SubjectPublicKeyInfo与公钥相同。
  4. 如果至少找到一个签名者并且步骤3成功找到每个找到的签名者,则验证成功。

注:APK不能如果在步骤3中发生了故障或4

JAR签名验证APK(V1方案)

的JAR签名的使用V1方案进行验证APK是标准签名JAR,必须包含META-INF/MANIFEST.MF中列出的条目,并且所有条目必须由相同的一组签名者签名。

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

我是否应该使用(或两者)签署apk来发布Play商店? 答案是YES

作为每https://source.android.com/security/apksigning/v2.html#verification

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

我试图检查V2(全部的.apk签名)选项生成构建。然后,当我试图安装一个发布版本在7.0设备下,我无法在设备上安装版本。

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

1

根据此链接:signature help

APK签名方案V2提供:

  1. 更快的应用程序安装时间
  2. 更多的保护,防止擅自改变APK文件。

的Android 7.0引入了APK签名方案V2,一个新的应用程序,签署 方案,提供更快的应用程序安装的时间和更多的保护 防止擅自改变APK文件。默认情况下,Android Studio 2.2和Android插件Gradle 2.2使用 签署您的应用程序 APK签名方案v2和传统签名方案,其中 使用JAR签名。

这是推荐使用APK签名方案V2不是强制性

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

+0

Hi @Shirish, 我们可以从eclipse制作v2版本吗? –

相关问题