Unterschied zwischen Signaturversionen - V1 (Jar Signature) und V2 (Full APK Signature) beim Generieren einer signierten APK in Android Studio?

234

Bitte wählen Sie mindestens eine der Signaturversionen aus, die in Android Studio 2.3 verwendet werden sollen

Beim Generieren einer signierten APK in Android Studio werden im letzten Schritt des Generierungsprozesses für signierte APK zwei Optionen (CheckBox) angezeigt, nämlich 1. V1 (Jar Signature)und 2. V2 (Full APK Signature)als Signaturversionen .

** Signaturversionen ** Optionen

Was ist der Unterschied zwischen V1 (Jar Signature) und V2 (Full APK Signature) im neuen Android Studio-Update?

Und welches sollte ich (oder beides) verwenden, um apk für die Veröffentlichung im Play Store zu signieren?

Außerdem wird beim Installieren von APK die Fehlermeldung Install Parse Failed No Certificates angezeigt, wenn ich die zweite Option verwende.

Shirish Herwade
quelle

Antworten:

219

Es handelt sich um einen neuen Signaturmechanismus, der in Android 7.0 eingeführt wurde und zusätzliche Funktionen bietet, um die APK-Signatur sicherer zu machen.

Es ist nicht zwingend erforderlich. Sie sollten BEIDE dieser Kontrollkästchen aktivieren, wenn dies möglich ist. Wenn der neue V2-Signaturmechanismus jedoch Probleme verursacht, können Sie ihn weglassen.

Sie können V2 also einfach deaktivieren, wenn Probleme auftreten, sollten es aber nach Möglichkeit überprüfen lassen.

Popel
quelle
Sie sollten Ihre Frage jedoch umformulieren. Es sieht so aus, als hätten Sie die verknüpfte Dokumentation noch nicht einmal gelesen. Es ist hilfreich zu wissen, dass Sie dieses Häkchen deaktivieren können. Wenn Sie die "Fehlermeldung und das aufgetretene Problem" hinzufügen, wird diese Frage möglicherweise für die Zukunft wertvoller
Booger
Ich habe eine App von einer signierten Anwendung mit V1 und V2 hochgeladen. Danach lade ich die Anwendung von Google Play herunter und starte dieselbe Version von Android Studio. Es wird der Dialog "Installation fehlgeschlagen, da das Gerät eine Anwendung mit demselben Paket, aber einer anderen Signatur hat ..." angezeigt. Können Sie mir vorschlagen, was ich tun soll? Muss ich das build.gradle falsch aktualisieren?
Usman Afzal
@UsmanAfzal, es wird ein Verhalten erwartet, da Sie die App im Playstore mit Release signiert haben und sie nun mit Debug über Android Studio debuggen oder ausführen möchten. Beachten Sie, dass Release und Debug unterschiedliche Signaturen sind
Parama Dharmika
44

Soll ich (oder beides) zum Signieren von apk für die Veröffentlichung im Play Store verwenden? Eine Antwort lautet JA .

Gemäß https://source.android.com/security/apksigning/v2.html#verification :

In Android 7.0 können APKs gemäß dem APK-Signaturschema v2 (v2-Schema) oder der JAR-Signatur (v1-Schema) überprüft werden. Ältere Plattformen ignorieren v2-Signaturen und überprüfen nur v1-Signaturen.

Ich habe versucht, einen Build mit der Option V2 (Full Apk Signature) zu generieren . Als ich dann versuchte, ein Release-Build unter 7.0 zu installieren, konnte ich Build nicht auf dem Gerät installieren.

Danach habe ich versucht zu erstellen, indem ich beide Versions-Kontrollkästchen aktiviert und einen Release-Build generiert habe. Dann in der Lage, Build zu installieren.

pRaNaY
quelle
24

Es steht geschrieben , hier , dass „standardmäßig Android Studio 2.2 und die Android - Plugin für Gradle 2.2 anmelden , um App sowohl APK Signature Scheme v2 und das traditionelle Unterzeichnung Schema verwendet, die JAR Unterzeichnung verwendet.“

Da diese neuen Kontrollkästchen anscheinend mit Android 2.3 angezeigt wurden, habe ich verstanden, dass meine früheren Versionen von Android Studio (zumindest die Version 2.2) mit beiden Signaturen signiert haben. Um wie zuvor fortzufahren, denke ich, dass es besser ist, beide Kontrollkästchen zu aktivieren.

BEARBEITEN 31. März 2017: Mehrere Apps mit beiden Signaturen eingereicht => kein Problem :)

Regis_AG
quelle
7

Ich denke, das ist eine gute Antwort.

Überprüfung des APK-Signaturschemas v2

  1. Suchen Sie das APK Signing Blockund überprüfen Sie Folgendes:
    1. Zwei Größenfelder von APK Signing Blockenthalten den gleichen Wert.
    2. ZIP Central Directorywird sofort von ZIP End of Central DirectoryAufzeichnung gefolgt .
    3. ZIP End of Central Directory Es folgen keine weiteren Daten.
  2. Suchen Sie die erste APK Signature Scheme v2 Blockin der APK Signing Block. Wenn der v2-Block vorhanden ist, fahren Sie mit Schritt 3 fort. Andernfalls können Sie die APK mithilfe des v1-Schemas überprüfen.
  3. Für jeden Unterzeichner in der APK Signature Scheme v2 Block:
    1. Wählen Sie aus den Signaturen die am stärksten unterstützte Signaturalgorithmus-ID aus. Die Reihenfolge der Stärken hängt von jeder Implementierungs- / Plattformversion ab.
    2. Überprüfen Sie die entsprechende Signatur von Signaturen anhand signierter Daten mit dem öffentlichen Schlüssel. (Es ist jetzt sicher, signierte Daten zu analysieren.)
    3. Stellen Sie sicher, dass die geordnete Liste der Signaturalgorithmus-IDs in Digests und Signaturen identisch ist. (Dies soll das Entfernen / Hinzufügen von Signaturen verhindern.)
    4. Berechnen Sie den Digest von APK-Inhalten mit demselben Digest-Algorithmus wie den Digest-Algorithmus, der vom Signaturalgorithmus verwendet wird.
    5. Stellen Sie sicher, dass der berechnete Digest mit dem entsprechenden Digest aus Digests identisch ist.
    6. Stellen Sie sicher, dass SubjectPublicKeyInfodas erste Zertifikat mit dem öffentlichen Schlüssel identisch ist.
  4. Die Überprüfung ist erfolgreich, wenn mindestens ein Unterzeichner gefunden wurde und Schritt 3 für jeden gefundenen Unterzeichner erfolgreich war.

Hinweis: APK darf nicht mit dem Schema v1 überprüft werden, wenn in Schritt 3 oder 4 ein Fehler auftritt.

JAR-signierte APK-Überprüfung (v1-Schema)

Die JAR-signierte APK ist eine standardmäßig signierte JAR, die genau die darin aufgeführten META-INF/MANIFEST.MFEinträge enthalten muss und bei der alle Einträge von derselben Gruppe von Unterzeichnern signiert werden müssen. Seine Integrität wird wie folgt überprüft:

  1. Jeder Unterzeichner wird durch einen META-INF/<signer>.SFund einen META-INF/<signer>.(RSA|DSA|EC)JAR-Eintrag dargestellt.
  2. <signer>.(RSA|DSA|EC)ist eine PKCS #7 CMS ContentInfoStruktur mit SignedData, deren Signatur über die <signer>.SFDatei überprüft wird.
  3. <signer>.SFDatei enthält eine Gesamtdatei Digest der META-INF/MANIFEST.MFund Digests jedes Abschnitts von META-INF/MANIFEST.MF. Der Digest der gesamten Datei von MANIFEST.MFwird überprüft. Wenn dies fehlschlägt, MANIFEST.MFwird stattdessen der Digest jedes Abschnitts überprüft.
  4. META-INF/MANIFEST.MFenthält für jeden integritätsgeschützten JAR-Eintrag einen entsprechend benannten Abschnitt, der den Digest des unkomprimierten Inhalts des Eintrags enthält. Alle diese Digests werden überprüft.
  5. Die APK-Überprüfung schlägt fehl, wenn die APK JAR-Einträge enthält, die nicht in der MANIFEST.MFJAR-Signatur aufgeführt sind und nicht Teil dieser sind. Die Schutzkette ist somit <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ Inhalt jedes integritätsgeschützten JAR-Eintrags.
Zonda
quelle
wo steht "Hinweis: APK darf nicht mit dem v1-Schema überprüft werden, wenn in Schritt 3 oder 4 ein Fehler auftritt", Schritt 3 oder 4 in Schema 2 oder Schema 1? Auch wenn in Schritt 3 oder 4 in Version 2 ein Fehler auftritt und dann angegeben wird, dass er nicht mit dem Schema v1 überprüft werden kann, wird er in Version 1 oder Version 2 nicht überprüft. Wie wird er überprüft?
isJulian00
7

Laut diesem Link: Signaturhilfe

APK Signature Scheme v2 bietet:

  1. Schnellere Installationszeiten für Apps
  2. Mehr Schutz vor unbefugten Änderungen an APK-Dateien.

Android 7.0 führt APK Signature Scheme v2 ein, ein neues App-Signaturschema, das schnellere App-Installationszeiten und mehr Schutz vor unbefugten Änderungen an APK-Dateien bietet. Standardmäßig signieren Android Studio 2.2 und das Android Plugin für Gradle 2.2 Ihre App sowohl mit dem APK Signature Scheme v2 als auch mit dem traditionellen Signaturschema, das die JAR-Signatur verwendet.

Es wird empfohlen , APK Signature Scheme v2 zu verwenden , dies ist jedoch nicht obligatorisch .

Obwohl wir empfehlen, APK Signature Scheme v2 auf Ihre App anzuwenden, ist dieses neue Schema nicht obligatorisch. Wenn Ihre App bei Verwendung von APK Signature Scheme v2 nicht ordnungsgemäß erstellt wird, können Sie das neue Schema deaktivieren.

Shirish Herwade
quelle
Hallo @Shirish, können wir aus Eclipse v2-Builds erstellen?
Arjun T Raj