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

J'avais téléchargé mon application sur Google Play (à L'époque où elle s'appelait Android Market) il y a quelque temps.

Aujourd'Hui, j'ai mis à jour l'application, mais j'avais supprimé le fichier antérieur et en créé un nouveau.
Lors du téléchargement, il est indiqué que L'APK doit être signé avec les mêmes certificats que la version précédente:

Échec du téléchargement

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

Votre les APK existants sont signés avec le(s) certificat (s) 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) certificat (s) utilisé (s)pour signer L'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 certificat et je ne veux pas supprimer et publier à nouveau l'application, car elle a des utilisateurs actifs.

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

154
demandé sur Christopher Orr 2011-01-30 16:39:12

7 réponses

Rien. Lisez la documentation: Publication des mises à jour sur Android Market

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

156
répondu Rubycon 2011-01-30 13:51:04

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 keystore 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 APK qui a été signé en mode débogage. Vous devez signer votre APK en mode release."

Cependant, si vous essayez de télécharger un update qui est signé avec le keystore de débogage, vous ne verrez pas ce message; Google Play affichera le message indiqué dans la question, se référant aux empreintes digitales SHA1.

Tout D'abord, vérifiez si vous avez signé l'application avec votre clé de débogage par erreur.


Comment puis-je vérifier quelles clés de signature ont été utilisées?

Recueillir les informations de L'APK

Vous pouvez vérifier avec Quels certificats l'APK d'origine et l'APK de mise à jour ont été signés en utilisant ces commandes, en utilisant Java keytool:

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épropriétaire et les datesvalides de/jusqu'à .


Si cette commande keytool ne fonctionne pas (L'option -jarfile nécessite Java 7), vous pouvez obtenir plus d'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 L'empreinte SHA1, mais montre l'identité du propriétaire X. 509, ainsi que le certificat de date d'expiration. 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
    [certificate 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é", ainsi que les avertissements sur les chaînes de certificats ou les horodatages; ils ne sont pas pertinents dans ce cas.

Comparez les valeurs de propriétaire, SHA1 et D'expiration entre les APK

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

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

  • Si le propriétaire /X. 509 les valeurs d'identité sont différentes, ou les dates d'expiration du certificat diffèrent entre les deux APK, alors 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 certificats, cela ne signifie pas que les certificats sont identiques - si rien d'autre ne correspond pas - comme l'empreinte digitale des valeurs les certificats sont différents.


Recherchez le magasin de clés d'origine, vérifiez les sauvegardes

Si les deux APK ont des informations de certificat différentes, alors vous devez trouver le keystore d'origine, c'est-à-dire le fichier avec la première valeur d'empreinte SHA1 que Google Play (ou keytool) vous a indiqué.

Recherche à travers tous les fichiers keystore que vous pouvez trouver sur votre ordinateur, et dans toutes les sauvegardes que vous avez, jusqu'à ce que vous ayez celui avec l'empreinte SHA1 correcte:

keytool -list -keystore my-release.keystore

Appuyez simplement sur Enter si vous êtes invité à entrer le mot de passe - vous n'avez pas nécessairement à le saisir si vous voulez simplement vérifier rapidement la valeur SHA1.


Je ne trouve nulle part le magasin de clés d'origine

Si vous ne trouvez pas le magasin de clés d'origine, vous ne pourrez jamais publier des mises à jour application en particulier.

Android le mentionne explicitement sur la page signature de votre Application :

Attention: Gardez votre keystore et votre clé privée dans un endroit sûr et sécurisé, et assurez-vous d'avoir des sauvegardes sécurisées de ceux-ci. Si vous publiez une application sur Google Play et que vous perdez la clé avec laquelle vous avez signé votre application, vous ne pourrez pas publier de mises à jour de 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é exacte.


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 vos 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 signer le prochaine mise à jour avec les deux clés A et B, puis signez la prochaine mise à jour après cela avec seulement la clé B.

Signer un APK (ou tout fichier JAR) avec plusieurs clés est techniquement possible, mais Google Play n'accepte plus les APK avec plusieurs signatures.

Tenter de le faire se traduira par le message " Votre APK a été signé avec plusieurs certificats. Veuillez signer avec un certificat et le télécharger à nouveau."


Que puis-je faire?

Vous devrez créez votre application avec un nouvel ID d'application (par exemple, changer de " com.exemple.myapp" à "com.exemple.myapp2") et créer une toute nouvelle liste sur Google Play.

Peut-être que vous devrez également changer votre code pour que les gens puissent installer la nouvelle application même s'ils ont installé l'ancienne application, par exemple, vous devez vous assurer que vous n'avez pas de fournisseurs de contenu en conflit.

Vous perdrez votre base d'installation existante, vos critiques, etc., et devra trouver un moyen d'obtenir vos clients existants pour désinstaller l'ancienne application et installer la nouvelle version.

Encore une fois, assurez-vous d'avoir des sauvegardes sécurisées du magasin de clés et du(des) mot (s) de passe (s) que vous utilisez pour cette version.

88
répondu Christopher Orr 2015-12-24 20:18:04

Rien-Google 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.

7
répondu Eugene Mayevski 'Allied Bits 2011-01-30 13:51:22

Aujourd'hui, j'ai fait face au même problème, malheureusement, j'avais deux alias dans mon fichier keystore.entrez la description de l'image ici

4
répondu Krishan 2017-07-26 17:53:06

Ici, j'ai la réponse à cette question . Après avoir cherché trop longtemps, j'arrive enfin à casser 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écharger ce-keytool IUI Version 2.4.1 plugin entrez la description de l'image ici

La fenêtre apparaîtra maintenant elle affichera le nom de l'alias ..si votre fichier jks est correct .. faites un clic droit sur alias et appuyez sur "Afficher la chaîne de certificats".. il montrera la clé SHA1 .. faites correspondre cette clé avec la touche tha que vous obtenez pendant que vous téléchargiez l'apk dans google App store ...

Si elle correspond alors vous êtes avec le bon fichier jks et alias ..

Maintenant chanceux, j'ai un tas de mot de passe pour correspondre .. entrez la description de l'image ici

Maintenant, allez à ce scrren mettre le même chemin jks .. et mot de passe (parmi le mot de passe que vous avez ) mettez n'importe quel chemin dans "fichier de Certificat"

Si l'écran affiche toute erreur alors le mot de passe ne correspond pas .. si cela ne montre aucune erreur, cela signifie que vous êtes avec le fichier JKS correct . alias et mot de passe corrects() maintenant, avec cela, vous pouvez télécharger votre apk dans play store:)

2
répondu Arun Yadav 2016-08-10 13:29:59

Si vous avez un fichier Apk précédent avec vous (sauvegarde), utilisez jarSigner pour extraire le certificat de cet apk, puis utilisez cette clé ou utilisez keytool pour cloner ce certificat, peut-être que cela aidera... Liens utiles sont jarsigner docs et keytool docs.

1
répondu om252345 2013-01-25 12:19:51

J'avais fait face à ce problème récemment, après avoir essayé différentes façons de me connecter comme enable V1 ou V2, connecté en changeant le nom de l'alias et enfin appris que j'utilise le mauvais fichier de magasin de clés

0
répondu user2837615 2018-08-04 05:30:59