请至少选择一个签名版本以在 Android Studio 2.3 中使用
现在,在 Android Studio 中生成签名 APK 时,它在签名 APK 生成过程的最后一步显示两个选项 (CheckBox),即 1. V1 (Jar Signature)
和 2. V2 (Full APK Signature)
作为 Signature Versions。
https://i.stack.imgur.com/1CPP5.png
那么,在新的 Android Studio 更新中,V1(Jar 签名)和 V2(完整 APK 签名)有什么区别呢?
我应该使用哪个(或两者)来签署 apk 以发布 Play 商店?
此外,当我使用第二个选项时,我在安装 APK 时收到错误 Install Parse Failed No Certificates。
它是 Android 7.0 中引入的一种新的签名机制,具有旨在使 APK 签名更加安全的附加功能。
这不是强制性的。如果可能,您应该选中这两个复选框,但如果新的 V2 签名机制给您带来问题,您可以省略它。
因此,如果遇到问题,您可以不选中 V2,但如果可能的话应该检查它。
更新:现在在针对 Android 11 时这是强制性的。
我应该使用(或两者)来签署 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 Signature) 选项生成构建。然后,当我尝试在 7.0 以下设备中安装发布版本时,我无法在设备中安装版本。
之后,我尝试通过选中版本复选框并生成发布版本来构建。然后能够安装构建。
here 写道:“默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 使用 APK 签名方案 v2 和使用 JAR 签名的传统签名方案对您的应用程序进行签名。”
似乎这些新复选框出现在 Android 2.3 中,我知道我以前的 Android Studio 版本(至少是 2.2)确实使用两个签名进行签名。因此,要像以前一样继续,我认为最好同时选中两个复选框。
编辑 2017 年 3 月 31 日:提交了几个带有两个签名的应用程序 => 没问题 :)
根据此链接:signature help
APK 签名方案 v2 提供:
更快的应用安装时间 对 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 时无法正确构建,您可以禁用新方案。
我认为 this 代表了一个很好的答案。
APK 签名方案 v2 验证
找到 APK 签名块并验证: APK 签名块的两个大小字段包含相同的值。 ZIP Central Directory 后紧跟 ZIP End of Central Directory 记录。中央目录的 ZIP 结尾后面没有更多数据。找到 APK 签名块内的第一个 APK 签名方案 v2 块。如果存在 v2 块,则继续执行步骤 3。否则,回退到使用 v1 方案验证 APK。对于 APK Signature Scheme v2 Block 中的每个签名者:从签名中选择支持的最强签名算法 ID。强度排序取决于每个实现/平台版本。使用公钥验证签名与签名数据的相应签名。 (现在可以安全地解析签名数据。)验证摘要和签名中签名算法 ID 的有序列表是否相同。 (这是为了防止签名剥离/添加。)使用与签名算法使用的摘要算法相同的摘要算法计算 APK 内容的摘要。验证计算的摘要是否与摘要中的相应摘要相同。验证第一个证书的 SubjectPublicKeyInfo 是否与公钥相同。如果至少找到一个签名者并且步骤 3 对每个找到的签名者都成功,则验证成功。
注意:如果第 3 步或第 4 步失败,则不能使用 v1 方案验证 APK。
JAR 签名的 APK 验证(v1 方案)
JAR 签名的 APK 是一个标准签名的 JAR,它必须完全包含 META-INF/MANIFEST.MF
中列出的条目,并且所有条目都必须由同一组签名者签名。其完整性验证如下:
每个签名者由 META-INF/