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 mise à jour qui est signé avec le keystore de débogage, vous pourrez pas voir ce message ; Google Play affichera le message indiqué dans la question, faisant référence aux empreintes SHA1.
Tout d'abord, vérifiez si vous n'avez pas 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 les commandes suivantes, à l'aide de l'application Java keytool
:
keytool -printcert -jarfile original.apk
keytool -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 éléments importants à noter ici - pour chaque APK - sont les suivants SHA1 la valeur de l'empreinte digitale, le Propriétaire et la valeur d'identité Valable du/jusqu'au dates.
Si cela keytool
ne fonctionne pas (la commande -jarfile
requiert Java 7), vous pouvez obtenir des informations plus basiques via l'option jarsigner
commandement :
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 not validated", ainsi que les avertissements concernant les chaînes de certificats ou les timestamps ; ils ne sont pas pertinents dans ce cas.
Comparez les valeurs Owner, SHA1 et Expiry entre les APKs.
-
Si le Propriétaire / X.509 la valeur d'identité est CN=Android Debug, O=Android, C=US
alors vous avez signé l'APK avec votre carte de crédit. clé de débogage pas la clé de sortie originale
-
Si le SHA1 La valeur de l'empreinte digitale est différente entre les APK d'origine et de mise à jour, alors vous avez fait pas utiliser la même clé de signature pour les deux APKs
-
Si le Propriétaire / X.509 sont différentes, ou que les dates d'expiration du certificat diffèrent entre les deux APK, alors vous avez fait pas utiliser la même clé de signature pour les deux APKs
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 autre chose ne correspond pas - comme les valeurs de l'empreinte digitale - alors les certificats sont différents.
Recherchez le keystore original, vérifiez les sauvegardes.
Si les deux APKs ont des informations de certificat différentes, alors vous doit trouver le keystore original, c'est-à-dire le fichier avec la première valeur d'empreinte SHA1 que Google Play (ou keytool
) vous a dit.
Recherchez 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
Il suffit d'appuyer sur Enter si le mot de passe vous est demandé - vous n'avez pas nécessairement besoin de le saisir si vous voulez simplement vérifier rapidement la valeur SHA1.
Je ne peux pas trouver le keystore original n'importe où.
Si vous ne pouvez pas trouver le keystore original, vous devrez jamais être en mesure de publier toute mise à jour de cette application particulière.
Android le mentionne explicitement dans le Signature de votre demande page :
Attention : Conservez votre keystore et votre clé privée dans un endroit sûr, et assurez-vous d'en avoir des 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 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é.
Puis-je extraire la clé de signature originale de l'APK original ?
Non, ce n'est pas possible. L'APK ne contient que des informations publiques, et pas les informations de votre 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 mise à jour suivante avec les clés A et B, puis signer la mise à jour suivante avec la clé B uniquement.
La signature d'un APK (ou de tout fichier JAR) avec plusieurs clés est techniquement possible, mais Google Play n'accepte plus les APKs avec des signatures multiples.
Si vous tentez de le faire, vous obtiendrez le message "Votre APK a été signé avec plusieurs certificats. Veuillez le signer avec un seul certificat et le télécharger à nouveau."
Qu'est-ce que je peux faire ?
Vous devrez créer votre application avec un nouvel identifiant (par exemple, remplacer "com.example.myapp" par "com.example.myapp2") et créer une toute nouvelle fiche sur Google Play.
Il est possible que vous deviez également modifier votre code afin que les utilisateurs puissent installer la nouvelle application même si l'ancienne est déjà installée, par exemple en vous assurant que les fournisseurs de contenu ne sont pas en conflit.
Vous perdrez votre base d'installation existante, les avis, etc., et devrez trouver un moyen d'inciter vos clients actuels à désinstaller l'ancienne application et à installer la nouvelle version.
Encore une fois, assurez-vous de disposer de sauvegardes sécurisées du keystore et du ou des mots de passe que vous utilisez pour cette version.
32 votes
J'ai un problème différent : J'ai essayé de mettre à jour une application mais je n'arrête pas de dire cette erreur. Le fait est que je n'ai jamais changé le keystore ! !! Qu'est-ce que je peux faire ? !?
0 votes
Comment avez-vous résolu le problème ?
0 votes
@int_32 comment tu l'as résolu ??