66 votes

Signature d'un APK avec une clé de téléchargement fournie par Google Play

J'essaie de comprendre comment télécharger une application sur Google Play tout en utilisant Google Play App Signing.

Voici ce que j'ai fait :

  1. Création d'une application
  2. J'ai utilisé keytool.exe pour générer une clé pour cette application.
  3. Téléchargement de l'application sur Google Play
  4. Inscription à la signature de l'application Google Play
  5. Essayez à nouveau de télécharger l'application sans succès.

Il se plaint que le certificat n'est pas le certificat.

Téléchargez le nouvel APK vers la production

Échec du téléchargement Vous avez téléchargé un APK qui n'est pas signé avec le certificat de téléchargement. Vous devez utiliser le même certificat. Le certificat d'upload a une empreinte digitale : [ SHA1 : 0C :... ] et le certificat utilisé pour signer l'APK que vous avez téléchargé ont une empreinte digitale : [ SHA1 : 2D :... ]

Après avoir cherché pendant un certain temps. J'ai trouvé comment mettre le certificat affiché sur ma console Google Play dans mon keystore. Quelque chose comme ça :

keytool.exe -importcert -file upload.pem -keystore myapp-release-key.keystore

Le certificat semble être en place. Lorsque je liste le contenu du keystore, voici ce que j'obtiens :

keytool.exe -list -keystore trackcoachfull-release-key.keystore Entrez le mot de passe du keystore :

Type de magasin de clés : JKS Fournisseur de la base de données de clés : SUN

Votre keystore contient 2 entrées

myappfull, 18 mai 2017, PrivateKeyEntry, Empreinte digitale du certificat (SHA1) : 2D :... uploadkey, 19 mai 2017, trustedCertEntry, Empreinte digitale du certificat (SHA1) : 0C :...

Maintenant, là où je suis bloqué...

Dans Android Studio, j'essaie de générer un APK signé avec l'uploadkey.

Build > Generate Signed APK Sélectionnez le keystore ci-dessus Entrez le mot de passe du keystore Sélectionnez uploadkey comme alias de la clé Je suis obligé d'entrer un mot de passe de clé.

Erreur dans Android Studio :

Erreur:L'exécution a échoué pour la tâche ':app:packageFullRelease'.

com.Android.ide.common.signing.KeytoolException : Échec de la lecture de la clé uploadkey depuis le magasin " C:\Users\Admin\AndroidStudioProjects\keystores\myappfull -release-key.keystore" : les entrées du certificat de confiance ne sont pas protégées par un mot de passe

Ma question est la suivante :

Comment générer un APK signé avec une clé de téléchargement fournie par Google Play ?

Merci

2 votes

J'obtiens exactement le même message d'erreur. La seule différence est que j'ai essayé d'utiliser le deployment.pem pour télécharger un APK Beta. Des progrès ?

0 votes

Cette question peut m'aider à résoudre mon problème. Je cherche comment signer un apk avec la clé de téléchargement de la console Play Store, et je trouve la solution dans votre question, en important le certificat dans mon keystore. Lorsque j'essaie de les importer, il semble que le certificat existe déjà dans mon premier alias. J'ai donc essayé de construire l'apk en utilisant le même keystore mais en utilisant mon premier alias et cela a fonctionné. Vous devriez donc peut-être utiliser votre premier alias. myappfull lors de la construction de votre apk.

0 votes

Je suis également confronté au même problème, j'ai déjà publié mon application dans Play Store il y a un an en utilisant le magasin .key et quand j'étais sur le point de libérer l'application pour les tests alpha, Google m'a demandé de télécharger le certificat et en suivant les étapes, j'ai signé l'application en utilisant le fichier .jks. J'utilisais l'API de carte et maintenant elle ne s'affiche pas.

78voto

Ayaz Aslam Points 523

J'ai pu signer mon APK en utilisant la clé Upload fournie par Google Play. Voici les étapes que j'ai suivies pour une nouvelle application :

  1. Créer un keystore et ajouter une clé de signature à l'aide d'Android Studio
  2. Signer l'application en utilisant la clé créée en (1)
  3. Téléchargez l'APK sur Google Play
  4. Téléchargez "Upload certificate" depuis la Google Play Console
  5. Ajouter le certificat téléchargé au keystore créé à l'étape (1) en utilisant la commande keytool.exe -importcert -file upload_cert.der -keystore <keystorefile>
  6. Le message suivant devrait apparaître : "Le certificat existe déjà dans le keystore sous l'alias . Voulez-vous toujours l'ajouter ? [non] :"
  7. Tapez 'y' et appuyez sur entrée
  8. Un message de confirmation apparaît
  9. Pour les constructions ultérieures, signez l'application en utilisant le même processus que dans (2)

Un point important à noter ici est qu'à l'étape (6), l'importation de keytool met à jour le certificat original avec celui téléchargé depuis Google Play.

4 votes

Le 5. keytool error : java.lang.Exception : Les clés publiques dans la réponse et le keystore ne correspondent pas.

2 votes

J'ai suivi le processus -importcert mais tout ce qui a été ajouté est l'alias dans le fichier upload_cert.der et non la référence SHA1. Est-ce quelque chose que je peux corriger ?

9 votes

Cela semble être une partie importante du puzzle. La différence essentielle ici est que keytool importe le certificat, ce qui est ce que nous essayons tous de faire. J'ai pu générer avec succès le keystore avec ceci. Mais, quand je signe mon APK avec le keystore, l'empreinte digitale est toujours fausse et j'obtiens le même problème mentionné ci-dessus.

58voto

zacronos Points 662

La réponse courte :

Vous ne pouvez pas signer un APK avec le certificat de téléchargement dans la console Google Play.

J'espère que cette réponse évitera à d'autres de perdre autant de temps que moi à essayer de trouver une solution qui n'existe pas.


La longue réponse :

L'article d'assistance de Google Play Gérez les clés de signature de vos applications a les informations nécessaires pour comprendre cela.

De la " Types de clés et définitions importantes section " :

  • Clé de téléchargement (facultatif pour les applications existantes) : Une nouvelle clé que vous générez lors de votre inscription au programme. Vous utiliserez cette clé pour signer tous les APK futurs avant de les télécharger sur la Play Console.
  • Clé privée : Pour les signatures d'APK, il s'agit de la clé utilisée pour signer l'APK. La clé privée doit être gardée secrète.
  • Clé publique : Pour les signatures d'APK, il s'agit de la clé utilisée pour vérifier la signature d'un APK. La clé publique peut être visible par tous.
  • Certificat : Un certificat contient une clé publique ainsi que des informations d'identification supplémentaires sur le propriétaire de la clé.

Ensuite, notez que dans la Google Play Console, vous ne pouvez télécharger qu'une télécharger le certificat (par opposition à un clé de téléchargement ). Sur la base des définitions ci-dessus, nous pouvons conclure que :

  1. la clé de téléchargement est une clé privée puisque la clé de téléchargement est utilisée pour signer les APKs.
  2. le certificat de téléchargement ne contient pas de clé privée En effet, les certificats contiennent généralement des clés publiques et non des clés privées (il y a des exceptions, mais pas dans ce cas).
  3. Par conséquent, le certificat de téléchargement ne peut pas être utilisé pour signer un APK peu importe les mesures que vous prenez. Il ne contient tout simplement pas les informations nécessaires.

Comme preuve supplémentaire, cette autre question SO (Android signing error : trusted certificate entries are not password-protected) aborde le même problème, mais comme il ne fait pas référence aux clés/certificats de téléchargement, il est facile de ne pas voir les implications de cette question, à savoir que rien de ce que vous pouvez télécharger à partir de Google Play ne résoudra ce problème.


Affirmations contraires

Bien que certaines personnes rapportent qu'il EST possible de signer votre APK avec votre certificat de téléchargement téléchargé depuis Google Play, je pense qu'elles comprennent mal ce qui s'est passé. Notez que généralement, ces rapports indiquent que vous devez importer le certificat dans le keystore original utilisé pour générer la clé. En fait, quand ils pensent qu'ils importent la clé (privée) nécessaire pour signer les APKs, ils importent simplement la clé publique et écrasent la moitié publique de la paire de clés - avec la même clé publique qui a été exportée dans le certificat en premier lieu.

S'ils avaient essayé de signer l'APK avec cet alias SANS effectuer la procédure d'importation, cela aurait tout aussi bien fonctionné. (L'importation n'a rien changé pour eux.) C'est pourquoi l'importation ne semble fonctionner que lorsqu'elle est utilisée avec le keystore original, et non avec un nouveau keystore.


Alors que pouvez-vous faire à la place ?

Cela dépend de votre situation. Puisque le but est de signer un APK et de le télécharger avec succès sur Google :

  1. À un moment donné, lors de la configuration de la fonction "signature d'applications par Google Play", quelqu'un a généré une clé de téléchargement et l'a enregistrée auprès de Google. Si vous avez toujours cette clé (privée) dans un keystore quelque part, c'est exactement ce dont vous avez besoin pour signer votre APK.
  2. Si vous avez généré la clé de téléchargement avec un outil autre que keytool et que vous l'avez importée dans votre keystore, et que vous disposez toujours du fichier généré à l'origine, vous pouvez importer à nouveau la clé privée dans un keystore différent, en utilisant le processus utilisé la première fois.
  3. Si aucune des options ci-dessus n'est possible, vous pouvez suivre les instructions de la section "Créer une nouvelle clé de téléchargement" du site Web de la Commission européenne. Article sur la gestion des clés de signature de vos applications pour générer une nouvelle clé de téléchargement et la faire échanger par Google.

0 votes

"la clé de téléchargement est une clé privée, puisque la clé de téléchargement est utilisée pour signer les APKs." Pas capable de comprendre les étapes pour les phrases ci-dessus.

0 votes

@VivekPratapSingh Cette partie est juste une explication de la raison pour laquelle il est impossible de faire ce que le PO essaie de faire. Si vous souhaitez passer directement aux étapes à suivre, vous pouvez vous rendre à la section "Que pouvez-vous faire à la place ?".

0 votes

Tant que vous spécifiez le même nom que votre fichier keystore existant, les informations sont ajoutées au keystore. C'est la partie critique pour que cela fonctionne.

3voto

Patrick R Points 3313

Je pense que vous avez dû générer votre keystore comme ceci à partir de votre "java". \bin dossier " :

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

Lorsque vous souhaitez mettre à jour votre application, vous devez utiliser le même keystore que celui que vous avez généré.

  1. Allez dans Build > Generate Signed APK.

  2. Sélectionnez "Choose existing" et recherchez le chemin de votre keystore.

  3. Entrez "mot de passe du magasin de clés".

  4. Dans l'alias de la clé, tapez sur "..." et vérifiez si votre alias de clé est le même que celui que vous avez fourni lors de la génération du keystore.

  5. Si oui, fournissez à nouveau le "Mot de passe clé".

  6. Tapez sur "Suivant".

Faites-moi savoir à quelle étape vous rencontrez le problème, afin que je puisse vous guider en conséquence.

0 votes

D'accord, mais quel est le rapport avec le processus décrit dans la question ? Il y a déjà un certificat/clé disponible (upload.pem) et converti en keystore. Le problème se produit lors de la signature de l'APK en utilisant le keystore généré.

2 votes

Oui, comme déjà mentionné, si vous suivez toutes les étapes, il couvrira ce scénario aussi bien, voir #4, où il est clairement indiqué que si Keystore est faux, alors l'alias de la clé sera différent. Ainsi, l'APK signé ultérieurement ne sera pas le même que celui téléchargé. Faites-moi savoir si vous avez besoin de plus d'informations à ce sujet.

0 votes

Eh bien, j'ai fini par désactiver Google Play App Signing pour le moment et je l'ai fait à l'"ancienne" manière en générant un fichier keystore et un certificat localement pour le premier téléchargement (d'ici : developer.Android.com/studio/publish/app-signing.html ). Il est intéressant de noter qu'après cela, j'ai obtenu les nouvelles options et instructions, y compris l'outil PEPK, dans la console sous App Signing. Peut-être que cela ne fonctionne que si vous effectuez le premier téléchargement avec le certificat auto-généré ? Je ne suis pas encore sûr.

2voto

Shubham Kajaria Points 11

Voici ce qui se passe parfois : Un seul keystore a deux certificats et ils sont différenciés par un nom d'alias ou un mot de passe. Essayez de voir les propriétés des deux entrées d'un keystore. Je suis sûr que n'importe laquelle est une clé valide avec un nom d'alias correct. Utilisez cette commande :

Keytool -list -keystore WeatherForecast.jks(Votre Keystore)

Appuyez sur la touche Entrée lorsque le système vous demande un mot de passe.

Vous verrez deux entrées et le premier mot sera l'alias de votre keystore.

Cela a marché pour moi et je pense que cela marchera sûrement pour vous.

2voto

Manoj Alwis Points 151

J'ai dû contacter google et suivre les instructions ci-dessous pour générer une nouvelle clé et télécharger le certificat.

La nouvelle clé de téléchargement sera utilisée pour signer les APK que vous téléchargez sur Play.

Voici comment générer et enregistrer une nouvelle clé de téléchargement :

  1. Suivez les instructions du centre d'aide d'Android Studio pour générer une nouvelle clé. Elle doit être différente de toutes les clés précédentes. Vous pouvez également utiliser la ligne de commande suivante pour générer une nouvelle clé : keytool -genkeypair -alias upload -keyalg RSA -keysize 2048 -validity 9125 -keystore keystore.jks

Cette clé doit être une clé RSA de 2048 bits et avoir une validité de 25 ans.

2. exporter le certificat pour cette clé au format PEM : keytool -export -rfc -alias upload -file upload_certificate.pem -keystore keystore.jks

Répondez à cet e-mail et joignez le fichier upload_certificate.pem.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X