Différence entre les versions de signature - V1 (Jar Signature) et V2 (Full APK Signature) lors de la génération d'un APK signé dans Android Studio?

234

Veuillez sélectionner au moins une des versions de signature à utiliser dans Android Studio 2.3

Maintenant, lors de la génération d'un fichier APK signé dans Android Studio, il affiche deux options (CheckBox) à savoir 1. V1 (Jar Signature)et 2. en V2 (Full APK Signature)tant que versions de signature à la dernière étape du processus de génération d'APK signé.

** Versions Signature ** options

Alors, quelle est la différence entre V1 (Jar Signature) et V2 (Full APK Signature) dans la nouvelle mise à jour d'Android Studio?

Et lequel dois-je utiliser (ou les deux) pour signer apk pour la sortie de Play Store?

De plus, je reçois une erreur d' installation parse failed Aucun certificat lors de l' installation APK lorsque j'utilise la deuxième option.

Shirish Herwade
la source

Réponses:

219

Il s'agit d'un nouveau mécanisme de signature introduit dans Android 7.0, avec des fonctionnalités supplémentaires conçues pour rendre la signature APK plus sécurisée.

Ce n'est pas obligatoire. Vous devriez cocher les DEUX cases à cocher si possible, mais si le nouveau mécanisme de signature V2 vous pose des problèmes, vous pouvez l'omettre.

Vous pouvez donc laisser la V2 non cochée si vous rencontrez des problèmes, mais vous devriez la faire vérifier si possible.

crotte de nez
la source
Vous devriez reformuler votre question, il semble que vous n'ayez même pas lu la documentation qui a été liée ... il est utile de savoir que vous pouvez laisser cette coche décochée. Peut-être que si vous ajoutez le "message d'erreur et le problème que vous avez rencontré), cette question deviendra plus précieuse pour l'avenir
Booger
J'ai téléchargé l'application par application signée en utilisant V1 et V2. Après cela, je télécharge l'application à partir de Google Play et exécute la même version d'Android Studio, il affiche la boîte de dialogue "Échec de l'installation car l'appareil a une application avec le même package mais une signature différente ..." Pouvez-vous me suggérer ce que je fais mal besoin de mettre à jour le build.gradle?
Usman Afzal
@UsmanAfzal, il s'agit d'un comportement attendu depuis que vous avez signé l'application sur le Playstore avec la version, et maintenant vous voulez la déboguer ou l'exécuter via Android Studio avec Debug. Notez que la libération et le débogage sont des signatures différentes
Parama Dharmika
44

Dois-je utiliser (ou les deux) pour signer apk pour la sortie de Play Store? Une réponse est OUI .

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

Dans Android 7.0, les fichiers APK peuvent être vérifiés conformément au schéma de signature APK v2 (schéma v2) ou à la signature JAR (schéma v1). Les plateformes plus anciennes ignorent les signatures v2 et vérifient uniquement les signatures v1.

J'ai essayé de générer une build en vérifiant l' option V2 (Full Apk Signature) . Ensuite, lorsque j'ai essayé d'installer une version de build dans un appareil inférieur à 7.0 et que je ne peux pas installer de build dans l'appareil.

Après cela, j'ai essayé de construire en cochant les deux versions et en générant la version. Puis en mesure d'installer la build.

praNaY
la source
24

Il est écrit ici que "Par défaut, Android Studio 2.2 et le plug-in Android pour Gradle 2.2 signent votre application en utilisant à la fois le schéma de signature APK v2 et le schéma de signature traditionnel, qui utilise la signature JAR."

Comme il semble que ces nouvelles cases à cocher soient apparues avec Android 2.3, je comprends que mes versions précédentes d'Android Studio (au moins la 2.2) ont signé avec les deux signatures. Donc, pour continuer comme je l'ai fait auparavant, je pense qu'il vaut mieux cocher les deux cases.

EDIT 31 mars 2017: soumis plusieurs applications avec les deux signatures => pas de problème :)

Regis_AG
la source
7

Je pense que cela représente une bonne réponse.

Vérification du schéma de signature APK v2

  1. Localisez le APK Signing Blocket vérifiez que:
    1. Deux champs de taille APK Signing Blockcontiennent la même valeur.
    2. ZIP Central Directoryest immédiatement suivi d'un ZIP End of Central Directoryenregistrement.
    3. ZIP End of Central Directory n'est pas suivi par plus de données.
  2. Localisez le premier APK Signature Scheme v2 Blockà l'intérieur du APK Signing Block. Si le bloc v2 est présent, passez à l'étape 3. Sinon, revenez à la vérification de l'APK à l'aide du schéma v1.
  3. Pour chaque signataire dans APK Signature Scheme v2 Block:
    1. Choisissez l'ID d'algorithme de signature pris en charge le plus puissant parmi les signatures. L'ordre de force dépend de chaque version d'implémentation / plateforme.
    2. Vérifiez la signature correspondante des signatures par rapport aux données signées à l'aide de la clé publique. (Il est désormais sûr d'analyser les données signées.)
    3. Vérifiez que la liste ordonnée des ID d'algorithme de signature dans les résumés et les signatures est identique. (Ceci pour empêcher la suppression / l'ajout de signature.)
    4. Calculez le résumé du contenu APK en utilisant le même algorithme de résumé que l'algorithme de résumé utilisé par l'algorithme de signature.
    5. Vérifiez que le résumé calculé est identique au résumé correspondant des résumés.
    6. Vérifiez que SubjectPublicKeyInfole premier certificat de certificats est identique à la clé publique.
  4. La vérification réussit si au moins un signataire a été trouvé et l'étape 3 a réussi pour chaque signataire trouvé.

Remarque: APK ne doit pas être vérifié à l'aide du schéma v1 si une défaillance se produit à l'étape 3 ou 4.

Vérification APK signée JAR (schéma v1)

L'APK signé JAR est un fichier JAR standard signé, qui doit contenir exactement les entrées répertoriées dans META-INF/MANIFEST.MFet où toutes les entrées doivent être signées par le même ensemble de signataires. Son intégrité est vérifiée comme suit:

  1. Chaque signataire est représenté par une entrée META-INF/<signer>.SFet META-INF/<signer>.(RSA|DSA|EC)JAR.
  2. <signer>.(RSA|DSA|EC)est une PKCS #7 CMS ContentInfostructure avec SignedData dont la signature est vérifiée sur le <signer>.SFfichier.
  3. <signer>.SFLe fichier contient un résumé complet du fichier META-INF/MANIFEST.MFet des résumés de chaque section de META-INF/MANIFEST.MF. Le résumé de l'ensemble du fichier MANIFEST.MFest vérifié. Si cela échoue, le résumé de chaque MANIFEST.MFsection est vérifié à la place.
  4. META-INF/MANIFEST.MFcontient, pour chaque entrée JAR à intégrité protégée, une section nommée de façon correspondante contenant le résumé du contenu non compressé de l'entrée. Tous ces résumés sont vérifiés.
  5. La vérification de l'APK échoue si l'APK contient des entrées JAR qui ne sont pas répertoriées dans MANIFEST.MFet ne font pas partie de la signature JAR. La chaîne de protection est donc <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ le contenu de chaque entrée JAR protégée en intégrité.
zonda
la source
où il est indiqué "Remarque: l'APK ne doit pas être vérifié à l'aide du schéma v1 en cas de défaillance à l'étape 3 ou 4", à l'étape 3 ou 4 du schéma 2 ou du schéma 1? aussi si un échec se produit à l'étape 3 ou 4 de la v2 et que l'on dit qu'il ne peut pas être vérifié à l'aide du schéma v1, il ne sera pas vérifié dans la v1 ou la v2 comment sera-t-il vérifié?
isJulian00
7

Selon ce lien: aide à la signature

APK Signature Scheme v2 offre:

  1. Temps d'installation des applications plus rapides
  2. Plus de protection contre les modifications non autorisées des fichiers APK.

Android 7.0 présente APK Signature Scheme v2, un nouveau schéma de signature d'application qui offre des temps d'installation d'application plus rapides et plus de protection contre les modifications non autorisées des fichiers APK. Par défaut, Android Studio 2.2 et le plug-in Android pour Gradle 2.2 signent votre application à l'aide du schéma de signature APK v2 et du schéma de signature traditionnel, qui utilise la signature JAR.

Il est recommandé d'utiliser APK Signature Scheme v2 mais n'est pas obligatoire .

Bien que nous recommandions d'appliquer APK Signature Scheme v2 à votre application, ce nouveau schéma n'est pas obligatoire. Si votre application ne se construit pas correctement lorsque vous utilisez APK Signature Scheme v2, vous pouvez désactiver le nouveau schéma.

Shirish Herwade
la source
Salut @Shirish, pouvons-nous faire des builds v2 à partir d'éclipse?
Arjun T Raj