web-dev-qa-db-fra.com

Comment signer un Apk déjà compilé

J'ai décodé un fichier APK avec apktool (le code source original a été perdu) afin de résoudre certains problèmes liés aux fichiers XML de mise en page. Je l'ai ensuite reconstruit avec apktool et quand j'ai essayé de l'installer sur mon appareil (en utilisant adb: adb install appname.apk), il m'a donné cette erreur:

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

l'apk original était cependant signé par un magasin de clés (sur Eclipse IDE). Celui-ci ne l'est pas. Comment puis-je le signer correctement avec son fichier de distorsion d'origine en dehors d'Eclipse!?

106
svarog

créer une clé en utilisant

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

puis signez l'apk en utilisant:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

vérifier ici pour plus d'informations

239
user3854546

Process automatisé:

Utilisez cet outil (utilise le nouvel apksigner de Google):

https: //github.com/patrickfav/uber-apk-signer

Disclaimer: Je suis le développeur :)

Processus manuel:

Étape 1: générer le magasin de clés (une seule fois)

Vous devez générer un magasin de clés une fois et l’utiliser pour signer votre apk unsigned. Utilisez le keytoolfourni par le JDK trouvé dans %Java_HOME%/bin/

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

Étape 2 ou 4: Zipalign

zipalign, outil fourni par le Android SDK trouvé, par exemple, dans %Android_HOME%/sdk/build-tools/24.0.2/ est une étape d'optimisation obligatoire si vous souhaitez télécharger l'apk sur le Play Store.

zipalign -p 4 my.apk my-aligned.apk

Remarque: Lorsque vous utilisez l'ancien jarsigner, vous devez compresser APRÈS. Lorsque vous utilisez la nouvelle méthode apksigner, vous le faites AVANT signature (confusion, je sais). Invoquer zipalign avant que apksigner fonctionne correctement car apksigner préserve l'alignement et la compression de l'APK (contrairement à jarsigner).

Vous pouvez vérifier l'alignement avec

zipalign -c 4 my-aligned.apk

Étape 3: Signer et vérifier

Utiliser les outils de compilation 24.0.2 et plus anciens

Utilisez jarsigner qui, comme l'outil de clé, est fourni avec la distribution JDK trouvée dans %Java_HOME%/bin/ et utilisez-le comme suit:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name

et peut être vérifié avec

jarsigner -verify -verbose my_application.apk

Utilisation des outils de compilation 24.0.3 et plus récents

Android 7.0 présente APK Signature Scheme v2, un nouveau schéma de signature d'application qui offre des temps d'installation plus courts et une protection accrue contre les modifications non autorisées des fichiers APK (voir ici et ici pour plus de détails). Par conséquent, Google a implémenté son propre apk signataire appelé apksigner (duh!). Le fichier de script se trouve dans %Android_HOME%/sdk/build-tools/24.0.3/ (le .jar est dans le /lib sous-dossier). Utilisez-le comme ça

apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name

et peut être vérifié avec

apksigner verify my-app.apk

La documentation officielle peut être trouvée ici.

58
patrickf

le moyen le plus rapide est de signer avec le magasin de clés de débogage:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.Android/debug.keystore app.apk androiddebugkey -storepass Android

ou sous Windows:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.Android/debug.keystore test.apk androiddebugkey -storepass Android
13
Pellet

Vous utilisez jarsigner pour signer les APK. Vous n'avez pas besoin de signer avec le magasin de clés d'origine, mais d'en générer un nouveau. Lisez les détails: http://developer.Android.com/guide/publishing/app-signing.html

6
Nikolay Elenkov

Pour ceux d'entre vous qui ne veulent pas créer un fichier bat à éditer pour chaque projet, ou ne veulent pas se souvenir de toutes les commandes associées aux programmes keytools et jarsigner et veulent juste le faire en un processus, utilisez ce programme:

http://lukealderton.com/projects/programs/Android-apk-signer-aligner.aspx

Je l'ai construit parce que j'en avais marre du long processus de devoir taper tous les emplacements de fichiers à chaque fois.

Ce programme peut sauvegarder votre configuration afin que la prochaine fois que vous la démarrez, il vous suffira de cliquer sur Générer et qu’il le gérera pour vous. C'est ça.

Aucune installation requise, il est entièrement portable et enregistre ses configurations dans un fichier CSV dans le même dossier.

4
Luke Alderton

Réponse mise à jour

Vérifiez https://shatter-box.com/knowledgebase/Android-apk-signing-tool-apk-signer/

Ancienne réponse

check apk-signer un bon moyen de signer votre application

4
shereifhawary