L’apk doit être signé avec les mêmes certificates que la version précédente

J’avais déjà téléchargé mon application sur Google Play (alors qu’elle s’appelait Android Market).

Aujourd’hui, j’ai mis à jour l’application, mais j’avais supprimé le fichier de clés précédent et en ai créé un nouveau.
Lors du téléchargement, l’APK doit être signé avec les mêmes certificates que la version précédente:

Le téléchargement a échoué

Vous avez téléchargé un fichier APK qui est signé avec un certificate différent de vos APK précédents. Vous devez utiliser le même certificate.

Vos APK existants sont signés avec le ou les certificates avec empreinte (s):
[SHA1: 89: 2F: 11: FE: CE: D6: CC: DF: 65: E7: 76: 3E: DD: A7: 96: 4F: 84: DD: BA: 33]
et le (s) certificate (s) utilisé (s) pour signer le fichier APK que vous avez téléchargé ont des empreintes digitales:
[SHA1: 20: 26: F4: C1: DF: 0F: 2B: D9: 46: 03: FF: AB: 07: B1: 28: 7B: 9C: 75: 44: CC]

Mais je n’ai pas ce certificate et je ne veux pas supprimer et republier l’application, car elle a des utilisateurs actifs.

Que puis-je faire pour signer mon application avec un nouveau certificate?

Rien. Lire la documentation: Publication de mises à jour sur Android Market

Avant de télécharger l’application mise à jour, assurez-vous d’avoir incrémenté les atsortingbuts Android: versionCode et android: versionName dans l’élément du fichier manifeste. En outre, le nom du package doit être identique et le fichier .apk doit être signé avec la même clé privée. Si le nom du package et le certificate de signature ne correspondent pas à ceux de la version existante, Market le considérera comme une nouvelle application et ne l’offrira pas aux utilisateurs en tant que mise à jour.

Avez-vous signé avec la clé de débogage par erreur?

Google Play ne vous permet pas de publier une application signée avec votre magasin de clés de débogage. Si vous essayez de télécharger un tel APK, Google Play échouera avec le message “Vous avez téléchargé un fichier APK qui a été signé en mode débogage. Vous devez signer votre APK en mode édition.”

Toutefois, si vous essayez de télécharger une mise à jour signée avec le fichier de clés de débogage, vous ne verrez pas ce message. Google Play affichera le message affiché dans la question, en faisant référence aux empreintes digitales SHA1.

Donc, premièrement, vérifiez si vous avez signé l’application avec votre clé de débogage par erreur.


Comment vérifier les clés de signature utilisées?

Rassemblez les informations de l’APK

Vous pouvez vérifier avec quels certificates l’APK d’origine et la mise à jour APK ont été signés en utilisant l’ keytool Java:

 keytool -list -printcert -jarfile original.apk keytool -list -printcert -jarfile update.apk 

Cela vous montre des informations détaillées sur la façon dont un APK a été signé, par exemple:

 Owner: CN=My App, O=My Company, L=Somewhere, C=DE Issuer: CN=My App, O=My Company, L=Somewhere, C=DE Serial number: 4790b086 Valid from: Mon Nov 11 15:01:28 GMT 2013 until: Fri Mar 29 16:01:28 BST 2041 Certificate fingerprints: MD5: A3:2E:67:AF:74:3A:BD:DD:A2:A9:0D:CA:6C:D4:AF:20 SHA1: A6:E7:CE:64:17:45:0F:B4:C7:FC:76:43:90:04:DC:A7:84:EF:33:E9 SHA256: FB:6C:59:9E:B4:58:E3:62:AD:81:42:...:09:FC:BC:FE:E7:40:53:C3:D8:14:4F Signature algorithm name: SHA256withRSA Version: 3 

Les parties importantes à noter ici – pour chaque APK – sont la valeur d’empreinte SHA1 , la valeur d’identité du propriétaire et les dates de début et de fin valides .


Si cette commande keytool ne fonctionne pas (l’option -jarfile nécessite Java 7), vous pouvez obtenir des informations de base via la commande jarsigner :

 jarsigner -verify -verbose:summary -certs original.apk jarsigner -verify -verbose:summary -certs update.apk 

Cela ne montre malheureusement pas les empreintes digitales SHA1, mais montre l’identité du propriétaire X.509, ainsi que les dates d’expiration du certificate. Par exemple:

 sm 4642892 Thu Apr 17 10:57:44 CEST 2014 classes.dex (and 412 more) X.509, CN=My App, O=My Company, L=Somewhere, C=DE [certificatee is valid from 11/11/13 12:12 to 29/03/41 12:12] [CertPath not validated: Path does not chain with any of the trust anchors] 

Vous pouvez ignorer tout message “CertPath non validé”, avec des avertissements sur les chaînes de certificates ou les horodatages; ils ne sont pas pertinents dans ce cas.

Comparez les valeurs Owner, SHA1 et Expiry entre les APK

  • Si la valeur d’identité Owner / X.509 est CN=Android Debug, O=Android, C=US , vous avez signé l’APK avec votre clé de débogage , pas la clé de version d’origine

  • Si la valeur d’empreinte SHA1 est différente entre l’original et la mise à jour APK, vous n’avez pas utilisé la même clé de signature pour les deux APK

  • Si les valeurs d’identité Owner / X.509 sont différentes ou si les dates d’expiration du certificate diffèrent entre les deux APK, vous n’avez pas utilisé la même clé de signature pour les deux APK

Notez que même si les valeurs Owner / X.509 sont identiques entre les deux certificates, cela ne signifie pas que les certificates sont identiques – si quelque chose ne correspond pas – comme les valeurs d’empreintes digitales – les certificates sont différents.


Rechercher le fichier de clés d’origine, vérifier les sauvegardes

Si les deux fichiers APK ont des informations de certificate différentes, vous devez rechercher le fichier de clés original, c’est-à-dire le fichier avec la première valeur d’empreinte SHA1 que Google Play (ou l’outil keytool ) vous a indiqué.

Recherchez dans tous les fichiers de clés que vous pouvez trouver sur votre ordinateur et dans toutes les sauvegardes que vous avez, jusqu’à ce que vous ayez celle qui possède la bonne empreinte SHA1:

 keytool -list -keystore my-release.keystore 

Appuyez simplement sur Entrée si vous êtes invité à saisir le mot de passe – vous ne devez pas nécessairement le saisir si vous souhaitez simplement vérifier rapidement la valeur SHA1.


Je ne trouve pas le keystore original

Si vous ne trouvez pas le fichier de clés original, vous ne pourrez jamais publier de mises à jour pour cette application particulière.

Android le mentionne explicitement sur la page Signing Your Application :

Avertissement: Conservez votre fichier de clés et votre clé privée dans un endroit sûr et sécurisé et assurez-vous de disposer de sauvegardes sécurisées. Si vous publiez une application sur Google Play et que vous perdez ensuite la clé avec laquelle vous avez signé votre application, vous ne pourrez plus publier de mises à jour sur votre application, car vous devez toujours signer toutes les versions de votre application avec la même clé.

Après la première version d’un APK, toutes les versions suivantes doivent être signées avec la même clé.


Puis-je extraire la clé de signature d’origine de l’APK d’origine?

Non, ce n’est pas possible. L’APK ne contient que des informations publiques et non des informations de clé privée.


Puis-je migrer vers une nouvelle clé de signature?

Non. Même si vous trouvez l’original, vous ne pouvez pas signer un APK avec la clé A, puis signez la prochaine mise à jour avec les clés A et B, puis signez la prochaine mise à jour avec uniquement la clé B.

La signature d’un APK (ou d’un fichier JAR) avec plusieurs clés est techniquement possible, mais Google Play n’accepte plus les APK avec plusieurs signatures.

Si vous essayez de le faire, le message “Votre APK a été signé avec plusieurs certificates. Veuillez ne signer qu’avec un seul certificate et le télécharger à nouveau.”


Que puis-je faire?

Vous devrez créer votre application avec un nouvel ID d’application (par exemple, passer de “com.example.myapp” à “com.example.myapp2”) et créer une nouvelle liste sur Google Play.

Vous devrez peut-être également modifier votre code pour que les utilisateurs puissent installer la nouvelle application même si l’ancienne application est installée. Par exemple, vous devez vous assurer que vos fournisseurs de contenu ne sont pas en conflit.

Vous perdrez votre base d’installation existante, vos avis, etc., et vous devrez trouver un moyen pour que vos clients existants désinstallent l’ancienne application et installent la nouvelle version.

Encore une fois, assurez-vous d’avoir des sauvegardes sécurisées du fichier de clés et du ou des mots de passe que vous utilisez pour cette version.

Rien – Google le dit clairement que l’application est identifiée par les clés utilisées pour la signer. Par conséquent, si vous avez perdu les clés, vous devez créer une nouvelle application.

Aujourd’hui, j’ai rencontré le même problème, malheureusement, j’avais deux alias dans mon fichier de clés. entrer la description de l'image ici

Ici, je reçois la réponse à cette question. Après avoir cherché trop longtemps, je parviens à déchiffrer la clé et le mot de passe pour cela. J’oublie ma clé et alias aussi le fichier jks mais heureusement je connais le tas de mot de passe que j’avais mis dedans. mais trouver des combinaisons correctes pour cela était la tâche la plus difficile pour moi.

Solution – Téléchargez ceci – Keytool IUI version 2.4.1 plugin entrer la description de l'image ici

la fenêtre apparaîtra maintenant elle montre le nom d’alias ..si votre fichier jks est correct .. cliquez avec le bouton droit sur l’alias et appuyez sur “afficher la chaîne de certificates” .. il affichera la clé SHA1. pendant que vous téléchargiez l’apk dans Google App Store …

si cela correspond, alors vous êtes avec le bon fichier jks et alias ..

maintenant j’ai la chance d’avoir beaucoup de mot de passe pour correspondre .. entrer la description de l'image ici

maintenant aller à ce scrren mettre le même chemin de jks .. et mot de passe (parmi le mot de passe que vous avez) mettre n’importe quel chemin dans “fichier de certificate”

Si l’écran affiche une erreur, alors le mot de passe ne correspond pas. S’il ne montre aucune erreur, cela signifie que vous avez un fichier jks correct. alias et mot de passe corrects () maintenant avec ce que vous pouvez télécharger votre fichier apk dans play store 🙂

Si vous avez un fichier apk précédent avec vous (backup), utilisez jarSigner pour extraire le certificate de cet apk, puis utilisez cette clé ou utilisez keytool pour cloner ce certificate, peut-être que cela vous aidera … .

Je me suis heurté à ce problème récemment, après avoir essayé différentes manières de me connecter, comme activer V1 ou V2, connecté en changeant le nom de l’alias et en dernier lieu savoir que j’utilise un fichier de clés incorrect