Avez-vous signé par erreur la clé de débogage?
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 signé en mode débogage. Vous devez signer votre fichier APK en mode de publication."
Toutefois, si vous essayez de télécharger une mise à jour signée avec le magasin de clés de débogage, vous ne verrez pas ce message; Google Play affichera le message affiché dans la question, faisant référence aux empreintes digitales SHA1.
Vérifiez d'abord 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?
Rassemblez 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 à 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 , la valeur d'identité du propriétaire et les dates de validité du / au .
Si cette keytool
commande ne fonctionne pas (l' -jarfile
option nécessite Java 7), vous pouvez obtenir des informations plus basiques via la jarsigner
commande:
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 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 sur les chaînes de certificats ou les horodatages; ils ne sont pas pertinents dans ce cas.
Comparez les valeurs Owner, SHA1 et Expiration entre les fichiers APK
Si la valeur d'identité Owner / X.509 est CN=Android Debug, O=Android, C=US
, alors vous avez signé l'APK avec votre clé de débogage , pas la clé de version d'origine
Si la valeur d'empreinte digitale SHA1 est différente entre les fichiers APK d'origine et de mise à jour, vous n'avez pas utilisé 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, vous n'avez pas utilisé la même clé de signature pour les deux fichiers 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 - comme les valeurs d'empreintes digitales - alors les certificats sont différents.
Recherchez le fichier de clés d'origine, vérifiez les sauvegardes
Si les deux fichiers APK ont des informations de certificat différentes, vous devez trouver le fichier de clés d'origine, c'est-à-dire le fichier avec la première valeur d'empreinte digitale SHA1 que Google Play (ou keytool
) vous a indiqué.
Recherchez 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 celui avec l'empreinte SHA1 correcte:
keytool -list -keystore my-release.keystore
Appuyez simplement sur Entersi 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 le magasin de clés d'origine nulle part
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 après cela avec uniquement la clé B.
La signature d'un APK (ou de tout fichier JAR) avec plusieurs clés est techniquement possible, mais Google Play n'accepte plus les 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 toute nouvelle liste 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 que vous disposez de sauvegardes sécurisées du fichier de clés et du ou des mots de passe que vous utilisez pour cette version.