web-dev-qa-db-fra.com

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

J'avais déjà téléchargé mon application sur Google Play (à l'époque où elle s'appelait Android Market).

Aujourd'hui, j'ai mis à jour l'application, mais j'avais supprimé le magasin de clés précédent et créé un nouveau.
Lors du téléchargement, 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 fichier APK signé avec un certificat différent de vos fichiers APK précédents. Vous devez utiliser le même certificat.

Vos fichiers 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 ou les certificats utilisés pour signer l'APK que vous avez téléchargé ont une ou plusieurs 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 republier l'application, car elle a des utilisateurs actifs.

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

168
arts777

Rien. Lisez 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 attributs Android: versionCode et Android: versionName dans l'élément du fichier manifeste. En outre, le nom du package doit être identique et the .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 la considérera comme une nouvelle application et ne la proposera pas aux utilisateurs sous forme de mise à jour.

167
Rubycon

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 fichier 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 fichier APK en mode de publication".

Cependant, si vous essayez de charger un pdate qui est signé avec le magasin de clés de débogage, vous verrez not ​​voir ce message; Google Play affiche le message indiqué dans la question, faisant référence aux empreintes digitales SHA1.

Alors tout d’abord, vérifiez si vous avez signé l’application avec votre clé de débogage par erreur.


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

Recueillir les informations de l'APK

Vous pouvez vérifier les certificats avec lesquels l'APK d'origine et l'APK mis à jour ont été signés à l'aide de ces commandes, à l'aide de 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 digitale SHA1 , le propriétaire la valeur d’identité et les dates valables du/jusqu’au .


Si cette commande keytool ne fonctionne pas (l'option -jarfile requiert Java 7), vous pouvez obtenir davantage d'informations de base via la commande jarsigner:

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

Malheureusement, cela ne montre pas l’empreinte SHA1, mais l’identité du propriétaire X.509 ainsi que les dates d’expiration du certificat. 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 concernant les chaînes de certificats ou les horodatages. ils ne sont pas pertinents dans ce cas.

Comparez les valeurs Propriétaire, SHA1 et Expiration entre les fichiers APK

  • Si la valeur d’identité du propriétaire / X.509 est CN=Android Debug, O=Android, C=US, alors vous avez signé l'APK avec votre clé de débogage et non la clé de version d'origine.

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

  • Si les valeurs d’identité du propriétaire / X.509 sont différentes, ou si les dates d'expiration des certificats diffèrent entre les deux fichiers APK, puis vous n'utilisez pas la même clé de signature pour les deux fichiers APK

Notez que même si les valeurs Propriétaire/X.509 sont identiques entre les deux certificats, cela ne signifie pas pour autant que les certificats sont identiques - si quelque chose ne correspond pas - comme les valeurs d'empreinte digitale, les certificats sont différents.


Rechercher le magasin de clés d'origine, vérifier les sauvegardes

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

Effectuez une recherche dans tous les fichiers de clés que vous pouvez trouver sur votre ordinateur, ainsi que dans les sauvegardes que vous avez, jusqu'à ce que vous obteniez celui avec l'empreinte SHA1 correcte:

keytool -list -keystore my-release.keystore

Appuyez simplement sur Enter si le mot de passe vous est demandé, vous n'avez pas nécessairement besoin de le saisir si vous souhaitez 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 pouvoir publier les mises à jour de cette application particulière.

Android le mentionne explicitement à la page signature de votre application :

Avertissement: Conservez votre magasin 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 perdez la clé avec laquelle vous avez signé votre application, vous ne pourrez publier aucune mise à jour de votre application, car vous devez toujours signer toutes les versions de votre application avec le même clé.

Après la première version d'un fichier APK, toutes les versions suivantes doivent être signées avec exactement 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 contient uniquement des informations publiques et non vos informations de clé privée.


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

Même si vous trouvez l'original, vous ne pouvez pas signer un APK avec la touche A, puis signez la mise à jour suivante avec les touches A et B, puis signez la mise à jour suivante après avec uniquement la touche B.

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

Si vous tentez de le faire, le message "Votre APK a été signé avec plusieurs certificats. Veuillez le signer avec un seul certificat 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 fiche sur Google Play.

Vous devrez peut-être également modifier votre code pour que les utilisateurs puissent installer la nouvelle application même s'ils possèdent l'ancienne application, par exemple. vous devez vous assurer que vos fournisseurs de contenu ne sont pas en conflit.

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

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

104
Christopher Orr

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. 

Aujourd'hui, j'ai rencontré le même problème. Malheureusement, mon fichier de clés comportait deux alias . enter image description here

6
Krishan

Ici, je reçois la réponse à cette question. Après avoir cherché trop longtemps, je dois enfin déchiffrer la clé et le mot de passe pour cela. J'ai oublié ma clé et mon pseudonyme, mais aussi le fichier jks, mais heureusement, je connais le type de mot de passe que j'avais mis dedans. mais trouver la bonne combinaison était la tâche la plus difficile pour moi. 

Solution - Téléchargez ceci - Plugin Keytool IUI version 2.4.1  enter image description here

la fenêtre qui apparaît va maintenant montrer le nom de l’alias ..si votre fichier jks est correct .. faites un clic droit sur alias et cliquez sur "Afficher la chaîne de certificats" .. il affichera la clé SHA1 ... correspond à cela touche avec la clé que vous obtenez 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 de la chance d'avoir un mot de passe à faire correspondre ..  enter image description here

allez maintenant à cet écran mettez 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 une erreur, le mot de passe ne correspond pas. S'il ne montre aucune erreur, cela signifie que le fichier JKS correspondant est correct. alias correct et mot de passe () maintenant avec que vous pouvez télécharger votre apk dans Play Store :) 

4
Arun Yadav

Si vous avez déjà un fichier apk 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 vous aidera .... Des liens utiles sont jarsigner docs et keytool docs .

3
om252345

Je viens d'avoir cela se produire hors du bleu clair. Je ne pense vraiment pas avoir rien changé.

Cependant, 'Build'/'Clean Project' l'a corrigé.

1
Dave Hubbard

Je recommande fortement Keystore Explorer ( https://keystore-Explorer.org/ ) qui vous permet d'accéder à votre magasin de clés sans avoir à le télécharger sur Google Play. De cette façon, vous pouvez déterminer si vous entrez un mot de passe incorrect.

1
drdiv

Mon erreur [stupide] est que j'ai utilisé le fichier app-debug.apk au lieu du fichier app-release.apk. Vous devez choisir "release" dans le cadre "Build Variants" lorsque vous générez un APK signé. Le fichier app-release.apk doit être situé dans le dossier "app\release" de la racine de votre projet.

0
M. Marmor

J'avais récemment rencontré ce problème après avoir essayé différentes méthodes de connexion, telles que enable V1 ou V2, connecté en changeant de nom d'alias et pour la dernière fois, j'ai appris que j'utilise un mauvais fichier de stockage de clés  

0
user2837615

Vous pouvez utiliser la nouvelle fonctionnalité de signature de l'application Google Play pour générer un nouveau fichier de clé.

Après mai 2017, Google Play Store ajoute une nouvelle fonctionnalité sur Play Store et constitue une bonne nouvelle pour les développeurs Android. À partir de cette fonctionnalité, les développeurs peuvent mettre à jour leur application ou Apk qui a perdu un fichier KeyStore. vous devez activer la signature de l'application Google Play sur la console Play Store.

https://support.google.com/googleplay/Android-developer/answer/7384423?hl=fr

http://www.geekcodehub.com/2018/05/23/keystore-lost-in-Android/

0
Gibs