web-dev-qa-db-fra.com

Signature d'un fichier 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 la signature de l'application Google Play.

Voici ce que j'ai fait:

  1. Créé une application
  2. Keytool.exe utilisé pour générer une clé pour cette application
  3. Téléchargé l'application sur Google Play
  4. Inscrit dans la signature de l'application Google Play
  5. Essayez de télécharger à nouveau l'application sans succès.

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

Télécharger un nouveau fichier APK dans Production

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

Après avoir cherché pendant un moment. Je découvre comment placer le certificat publié sur ma console Google Play dans mon magasin de clés. Quelque chose comme ça:

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

Le certificat semble être présent. Lorsque je liste le contenu du magasin de clés, voici ce que je reçois:

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

Type de magasin de clés: JKS Fournisseur de magasin de clés: Sun

Votre magasin de clés contient 2 entrées

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

Maintenant, où je suis bloqué ...

Dans Android Studio, j'essaie de générer un fichier APK signé avec la clé de téléchargement.

Construire> Générer un APK signé Sélectionnez le magasin de clés ci-dessus Entrez le mot de passe du magasin de clés Sélectionnez la clé de téléchargement comme alias de clé que je force pour 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 lecture de la clé de téléversement du magasin "C:\Utilisateurs\Admin\AndroidStudioProjects\keystores\myappfull-release-key.keystore": les entrées de certificats sécurisées ne sont pas protégées par mot de passe

Ma question est la suivante:

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

Merci

42
Ronald

J'ai pu signer mon fichier APK à l'aide de la clé de téléchargement fournie par Google Play. Voici les étapes que j'ai suivies pour une nouvelle application:

  1. Créez un magasin de clés et ajoutez une clé de signature à l'aide de Android Studio.
  2. Signer l'application en utilisant la clé créée dans (1)
  3. Télécharger l'APK sur Google Play
  4. Téléchargez "Certificat de téléchargement" depuis la console Google Play
  5. Ajoutez le certificat téléchargé au magasin de clés créé à l'étape (1) à l'aide de la commande keytool.exe -importcert -file upload_cert.der -keystore <keystorefile>
  6. Il devrait indiquer que "Le certificat existe déjà dans le magasin de clés sous un alias. Voulez-vous toujours l'ajouter? [No]:"
  7. Tapez 'y' et appuyez sur Entrée
  8. Un message de confirmation apparaîtra
  9. Pour les versions ultérieures, signez l'application en utilisant le même processus que dans (2)

Il est important de noter ici que, à l’étape (6), l’importation keytool met à jour le certificat original avec celui téléchargé de Google Play.

51
Ayaz Aslam

La réponse courte:

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

Espérons que cette réponse empêchera les autres de perdre autant de temps que moi à essayer de trouver une solution qui n'existe pas.


La réponse longue:

L'article de support technique de Google Play Gérez les clés de signature de votre application contient les informations nécessaires pour le comprendre.

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

  • Clé de téléchargement (facultatif pour les applications existantes) : nouvelle clé générée lors de votre inscription au programme. Vous utiliserez la clé de téléchargement pour signer tous les futurs APK avant de les télécharger sur la Play Console.
  • Clé privée : Pour les signatures 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 APK, il s'agit de la clé utilisée pour vérifier la signature d'un APK. La clé publique peut être visible par tout le monde.
  • Certificat : un certificat contient une clé publique ainsi que des informations d'identification supplémentaires permettant de savoir à qui appartient la clé.

Notez ensuite que dans la console Google Play, vous pouvez uniquement télécharger un certificat de téléchargement (par opposition à une 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 , car la clé de téléchargement est utilisée pour signer les fichiers APK.
  2. le certificat de téléchargement ne contient pas de clé privée , car les certificats contiennent généralement des clés publiques et non des clés privées (il existe des exceptions, en quelque sorte, mais pas dans ce cas).
  3. Par conséquent, le certificat de téléchargement ne peut pas être utilisé pour signer un APK , quelles que soient les étapes à suivre. Il ne contient simplement pas les informations nécessaires.

Comme preuve supplémentaire, cette autre SO question (erreur de signature Android: les entrées de certificats de confiance ne sont pas protégées par mot de passe) résout le même problème, mais ne mentionne pas les clés de téléchargement/certificats, il est facile de passer à côté des implications de cette question: rien que vous puissiez télécharger à partir de Google Play ne résoudra ce problème.


Réclamations au contraire

Bien que certaines personnes signalent qu'il est IS possible de signer votre APK avec votre certificat de téléchargement téléchargé depuis Google Play, je pense qu'elles ne comprennent pas ce qui s'est passé. Notez que ces rapports indiquent généralement que vous devez importer le certificat dans le magasin de clés d'origine utilisé pour générer la clé. En fait, lorsqu'ils pensent importer la clé (privée) nécessaire pour signer les fichiers APK, ils ne font qu'importer la clé publique et écraser la moitié publique de la paire de clés - avec la même clé publique exportée dans le certificat. en premier lieu.

S'ils avaient tenté 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 magasin de clés d'origine, pas avec un nouveau magasin de clés.


Alors, que pouvez-vous faire à la place?

Cela dépend de ta situation. L'objectif étant de signer un fichier APK et de le télécharger correctement sur Google:

  1. À un moment donné, lors de la configuration de la "signature d'application par Google Play", une personne 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 magasin de clés, 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, puis l'avez importée dans votre fichier de clés et que vous conserviez le fichier généré d'origine, vous pouvez réimporter la clé privée dans un autre magasin de clés, en utilisant le processus utilisé. la première fois.
  3. Si aucune des options ci-dessus ne constitue une option, vous pouvez suivre les instructions de la section "Créer une nouvelle clé de téléchargement" de article sur la gestion des clés de signature de votre application pour générer une nouvelle clé de téléchargement et la remplacer par Google. .
22
zacronos

Je pense que vous devez avoir généré votre magasin de clés comme ceci à partir de votre dossier "Java\bin":

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 magasin de clés que vous avez généré.

  1. Allez à Construire> Générer un APK signé.

  2. Sélectionnez "Choisir existant" et naviguez jusqu'au chemin du magasin de clés.

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

  4. Dans l’alias de clé, appuyez sur "..." et vérifiez si votre alias de clé est identique à celui que vous avez fourni lors de la génération du magasin de clés.

  5. Si oui à nouveau, indiquez "mot de passe clé"

  6. Appuyez sur "Suivant"

Dites-moi à quelle étape vous avez trouvé le problème afin que je puisse vous guider en conséquence.

3
Patrick R

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

Keytool -list -keystore WeatherForecast.jks (votre magasin de clés)

Appuyez sur Entrée quand il vous demande le mot de passe.

Vous verrez deux entrées et le premier mot serait l'alias de votre magasin de clés.

Cela a fonctionné pour moi et je pense que cela fonctionnera sûrement pour vous.

1
Shubham Kajaria

Je devais 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 fichiers 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 Android Centre d'aide Studio pour générer une nouvelle clé. Il doit être différent 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 2048 bits et avoir une validité de 25 ans.

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

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

0
Manoj Alwis