web-dev-qa-db-fra.com

Impossible de télécharger l'APK mis à jour sur Google Play en raison d'un certificat différent

J'utilise Android Studio pour construire mes Android projets et, lorsque je télécharge mon APK sur Google Play, il continue de me montrer cette erreur malgré l'utilisation de le même keystore que j'ai utilisé pour les versions antérieures de mon application:

Échec du téléchargement

Vous avez importé un fichier APK signé avec un certificat différent dans 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 (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]

18
user3871129

Premièrement, il est peu probable que Google Play se trompe ici. Êtes-vous sûr de ne pas avoir utilisé votre clé de débogage par erreur?

Vérifiez les clés de signature utilisées

Vous devez vérifier les certificats que contiennent l'ancien APK et le nouveau APK, avec les commandes:

jarsigner -verify -verbose:summary -certs old.apk
jarsigner -verify -verbose:summary -certs new.apk

Cela vous montre des informations sur les fichiers signés dans chaque APK, comme ceci:

sm  4642892 Thu Apr 17 10:57:44 CEST 2014 classes.dex (and 412 more)

    X.509, CN=My App, O=My Company, C=DE, L=Köln
    [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]

Si le nouveau fichier APK indique X.509, CN=Android Debug, O=Android, C=US, vous avez ensuite signé l'APK avec votre clé de débogage au lieu de la clé de version d'origine.

Si les chaînes d'identité X.509 sont par ailleurs différentes ou si les dates de certificat sont différentes entre les deux fichiers APK, vous venez de confirmer que vous n'avez pas utilisé la même clé de signature pour les deux fichiers APK.

Vous pouvez ignorer tout message "CertPath non validé"; ce n'est pas pertinent dans ce cas.

Rechercher le fichier de clés d'origine

Si les informations du certificat sont différentes, vous devez trouver le fichier de clés d'origine, c'est-à-dire le fichier avec la première valeur SHA1 que Google Play vous a indiqué.

Recherchez parmi tous les fichiers de clés que vous pouvez trouver jusqu'à ce que vous ayez celui avec l'empreinte SHA1 correcte:

keytool -list -keystore my-release.keystore

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

Si vous ne trouvez pas le magasin de clés d'origine, vous ne pourrez jamais publier de mises à jour de cette application particulière.

Android le mentionne explicitement sur la page Signing Your Application :

Avertissement: Conservez votre magasin de clés et votre clé privée dans un endroit sûr et sécurisé, et assurez-vous que vous en avez des sauvegardes sécurisées. Si vous publiez une application sur Google Play et perdez ensuite 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 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 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 la prochaine mise à jour avec les deux clés A et B, puis signer la prochaine mise à jour avec uniquement la clé B.

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

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 toute nouvelle fiche sur Google Play.

Vous devrez peut-être également modifier votre code afin que les gens puissent installer la nouvelle application même si l'ancienne application est installée, 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 avis, etc., et devrez trouver un moyen d'amener vos clients existants à désinstaller l'ancienne application et à installer la nouvelle version.

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

44
Christopher Orr