簡體   English   中英

在 Android Studio 中生成簽名的 APK 時簽名版本 - V1(Jar 簽名)和 V2(完整 APK 簽名)之間的區別?

[英]Difference between signature versions - V1 (Jar Signature) and V2 (Full APK Signature) while generating a signed APK in Android Studio?

請至少選擇一個簽名版本以在 Android Studio 2.3 中使用

現在,在 Android Studio 中生成簽名 APK 時,在簽名 APK 生成過程的最后一步中顯示兩個選項 (CheckBox),即 1. V1 (Jar Signature)和 2. V2 (Full APK Signature)作為簽名版本

**簽名版本**選項

那么,Android Studio 新更新中的V1(Jar 簽名)V2(完整 APK 簽名)有什么區別?

我應該使用哪個(或兩者)來為 Play 商店發布簽名 apk?

此外,當我使用第二個選項時,我在安裝 APK 時遇到錯誤Install Parse Failed No Certificates

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

這不是強制性的。 如果可能,您應該選中這兩個復選框,但如果新的 V2 簽名機制給您帶來問題,您可以省略它。

因此,如果遇到問題,您可以不選中 V2,但如果可能,應該檢查它。

更新:現在在針對 Android 11 時這是強制性的。

我應該使用(或兩者)為 Play 商店發布簽名 apk 嗎? 答案是肯定的

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

在 Android 7.0 中,可以根據 APK Signature Scheme v2(v2 方案)或 JAR 簽名(v1 方案)對 APK 進行驗證。 較舊的平台忽略 v2 簽名,僅驗證 v1 簽名。

我嘗試通過檢查V2(Full Apk Signature)選項來生成構建。 然后,當我嘗試在低於7.0 的設備中安裝發布版本時,我無法在設備中安裝版本。

之后,我嘗試通過選中兩個版本復選框並生成發布版本來構建。 然后就可以安裝build了。

此處寫道:“默認情況下,Android Studio 2.2 和適用於 Gradle 2.2 的 Android 插件使用 APK 簽名方案 v2 和使用 JAR 簽名的傳統簽名方案對您的應用進行簽名。”

由於這些新復選框似乎出現在 Android 2.3 中,我知道我以前的 Android Studio 版本(至少是 2.2)確實使用了兩個簽名。 因此,要像以前一樣繼續,我認為最好同時選中兩個復選框。

編輯 2017 年 3 月 31 日:提交了幾個具有兩個簽名的應用程序 => 沒問題:)

根據此鏈接: 簽名幫助

APK 簽名方案 v2 提供:

  1. 更快的應用安裝時間
  2. 更多保護,防止對 APK 文件進行未經授權的更改。

Android 7.0 引入了 APK 簽名方案 v2,這是一種新的應用簽名方案,可提供更快的應用安裝時間和更多保護,防止對 APK 文件進行未經授權的更改。 默認情況下,Android Studio 2.2 和適用於 Gradle 2.2Android 插件使用APK 簽名方案 v2 和使用 JAR 簽名的傳統簽名方案對您的應用進行簽名。

建議使用 APK Signature Scheme v2不是強制性的

盡管我們建議將 APK 簽名方案 v2 應用於您的應用,但這種新方案不是強制性的。 如果您的應用在使用 APK 簽名方案 v2 時無法正確構建,您可以禁用新方案。

我認為是一個很好的答案。

APK 簽名方案 v2 驗證

  1. 找到APK Signing Block並驗證:
    1. APK Signing Block兩個大小字段包含相同的值。
    2. ZIP Central Directory后面緊跟着ZIP End of Central Directory記錄的ZIP End of Central Directory
    3. ZIP End of Central Directory后面沒有更多數據。
  2. APK Signing Block找到第一個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 都成功,則驗證成功。

注意:如果第 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 條目, META-INF/MANIFEST.MF包含一個相應命名的部分,其中包含該條目未壓縮內容的摘要。 所有這些摘要都經過驗證。
  5. 如果 APK 包含未在MANIFEST.MF列出且不屬於 JAR 簽名的 JAR 條目,則 APK 驗證將失敗。 因此,保護​​鏈是<signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF → 每個受完整性保護的 JAR 條目的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM