署名バージョンの違い-Android Studioで署名済みAPKを生成するときのV1(Jar署名)とV2(完全APK署名)?


234

Android Studio 2.3で使用する署名バージョンを少なくとも1つ選択してください

Android Studio で署名済みAPKを生成しているときに、署名済みAPK生成プロセスの最後のステップで、署名バージョンとして1 V1 (Jar Signature)と2の2つのオプション(CheckBox)を表示しています。V2 (Full APK Signature)

**署名バージョン**オプション

では、新しいAndroid StudioアップデートでのV1(Jar署名)V2(フルAPK署名)の違いは何ですか?

そして、私はプレイストアリリースのAPKに署名するためにどちらを使うべきですか?

また、2番目のオプションを使用すると、APKのインストール中に「Install Parse Failed No Certificates」というエラーが表示されます。

回答:


219

これは、Android 7.0で導入された新しい署名メカニズムであり、APK署名をより安全にするために設計された追加機能を備えています。

必須ではありません。可能であれば、両方のチェックボックスをオンにする必要がありますが、新しいV2署名メカニズムで問題が発生する場合は、省略できます。

したがって、問題が発生した場合はV2をオフのままにしておくことができますが、可能であればオンにしておく必要があります。


ただし、質問を書き直す必要があります。リンクされたドキュメントをまだ読んでいないようです...チェックマークをオフのままにしておくと便利です。おそらく、「発生したエラーメッセージと問題)を追加すると、この質問は将来にとってより貴重になります
Booger

V1とV2を使用して署名付きアプリケーションでアプリをアップロードしました。その後、Google Playからアプリケーションをダウンロードし、Android Studioから同じバージョンを実行すると、「デバイスに同じパッケージで署名が異なるアプリケーションがあるため、インストールに失敗しました。.。..」というダイアログが表示されます。 build.gradleを更新する必要がありますか?
Usman Afzal 2017

@UsmanAfzal、リリース付きのプレイストアでアプリに署名したので予想される動作であり、デバッグしてAndroid Studioを介してアプリをデバッグまたは実行する必要があります。リリースとデバッグは異なる署名であることに注意してください
Parama Dharmika

44

PlayストアリリースのAPKへの署名に(または両方を)使用する必要がありますか? 答えは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未満のデバイスにリリースビルドをインストールしようとしたときに、デバイスにビルドをインストールできません。

その後、バージョンチェックボックスとリリースビルドの両方をチェックしてビルドを試みました。その後、ビルドをインストールできます。


24

書かれている、ここで「デフォルトでは、Gradleの2.2用のAndroid Studioの2.2とAndroidのプラグインは、両方のAPKの署名スキームv2とJARの署名を使用し、伝統的な署名方式を使用してアプリに署名する。」ということ

これらの新しいチェックボックスはAndroid 2.3で表示されたようですが、私の以前のバージョンのAndroid Studio(少なくとも2.2)は両方の署名で署名したことを理解しています。したがって、以前と同じように続けるには、両方のチェックボックスをオンにすることをお勧めします。

EDIT 2017年3月31日:両方の署名でいくつかのアプリを提出しました=>問題ありません:)


7

これは良い答えだと思います。

APK署名スキームv2検証

  1. を見つけて次のことAPK Signing Blockを確認します。
    1. の2つのサイズフィールドに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. 少なくとも1人の署名者が見つかり、見つかった署名者ごとにステップ3が成功した場合、検証は成功します。

注:手順3または4でエラーが発生した場合、APKをv1スキームを使用して検証しないでください。

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)PKCS #7 CMS ContentInfo、その署名の上に検証されるのSignedData構造を持つ<signer>.SFファイルが。
  3. <signer>.SFfileには、のファイル全体のMETA-INF/MANIFEST.MFダイジェストとの各セクションのダイジェストが含まれていますMETA-INF/MANIFEST.MF。のファイル全体のダイジェストMANIFEST.MFが検証されます。それが失敗した場合、MANIFEST.MF代わりに各セクションのダイジェストが検証されます。
  4. META-INF/MANIFEST.MF整合性が保護されたJARエントリごとに、対応する名前が付けられたセクションに、エントリの圧縮されていないコンテンツのダイジェストが含まれます。これらのダイジェストはすべて検証されます。
  5. にリストされてMANIFEST.MFおらず、JAR署名の一部ではないJARエントリがAPKに含まれている場合、APK検証は失敗します。保護チェーンはこのようです<signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF各整合性が保護JARエントリの内容→。

「注:ステップ3または4でエラーが発生した場合、v1スキームを使用してAPKを検証してはなりません」、スキーム2またはスキーム1のステップ3または4 また、v2のステップ3または4で障害が発生し、v1スキームを使用して検証できないというメッセージが表示された場合、v1またはv2では検証されません。どのように検証されますか?
isJulian00

7

このリンクによると:署名ヘルプ

APK署名スキームv2が提供するもの:

  1. アプリのインストール時間を短縮
  2. APKファイルへの不正な変更に対する保護を強化します。

Android 7.0では、新しいアプリ署名スキームであるAPK署名スキームv2が導入されています。これにより、アプリのインストール時間が短縮され、APKファイルの不正な変更に対する保護が強化されます。デフォルトでは、Android Studio 2.2およびGradle 2.2のAndroidプラグインは、 APK署名スキームv2とJAR署名を使用する従来の署名スキームの両方を使用してアプリに署名します。

APK署名方式v2を使用することをお勧めしますが、必須ではありません

アプリにAPK署名スキームv2を適用することをお勧めしますが、この新しいスキームは必須ではありません。APK署名スキームv2を使用しているときにアプリが正しくビルドされない場合は、新しいスキームを無効にできます。


こんにちは@Shirish、Eclipseからv2ビルドを作成できますか?
Arjun T Raj 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.