Si j'ai un apk, est-ce que je peux supprimer la signature en cours et comment le signer avec un fichier .keystore différent tout en maintenant l'installation de l'application?
Mise à jour : J'ai réussi à le faire fonctionner avec la solution de Jorgesys. Là où je me suis planté avant, c'est que j'ai décompressé le fichier .apk puis le rippé après avoir supprimé le dossier META-INF et modifié l'extension de fichier en .apk. Ce que j’aurais dû faire, c’est tout simplement de l’ouvrir avec Winzip et de supprimer le dossier à l’intérieur de Winzip.
essaye ça
1) Changez l’extension de votre .apk en .Zip
2) Ouvrez et supprimez le dossier META-INF.
3) changer l'extension en .apk
4) Utilisez jarsigner et zipalign avec votre nouveau magasin de clés.
j'espère que ça aide
Si vous cherchez une solution rapide, vous pouvez utiliser un script open-source apk-resigner ou l'outil apksigner de Google.
Script Open Source apk-resigner https://github.com/onbiron/apk-resigner
Tout ce que vous avez à faire est de télécharger le script et de taper:
./signapk.sh application.apk keystore key-pass alias
apksigner
de Google} disponible dans les versions 24.0.3 et supérieures.apksigner sign --ks release.jks application.apk
Vous pouvez trouver plus d'informations sur apksigner tool sur le site du développeur Android.
https://developer.Android.com/studio/command-line/apksigner.html
Signature pour publication: $ 1.apk -> $ 1_release.apk " GeneralMills & GoogleApps # 2012 Étape 1: Suppression de toute signature précédente Modifiez l'extension de votre .apk en .Zip Ouvrez et supprimez le dossier META-INF Changez l’extension en .apk Ou .__ Commande: • Zip [originalapk] Exemple: • Zip "$ 1" .apk -d
Étape 2: Signature avec release.keystore .. Commande: • jarsigner –verbose –keystore [fichier de clés] –signedjar [unalignapk] [originalapk] nom_alias Exemple: • • C:\Program Files\Java\jdk1.6.0_43\bin> jarsigner -verbose -keystore version.keystore -signedjar "$ 1" _unaligned.apk "$ 1" version .apk
Étape 3: alignement de la commande .__: • zipalign -f 4 [unalignapk] [releaseapk] Exemple: • C:\Users\G535940\Téléchargements\adt-bundle-windows-x86\adt -bundle-windows-x86\sdk\aussi ls> zipalign -f 4 "$ 1" _unaligned.apk "$ 1" _release.apk
Étape 4: nettoyage de Commande: • rm 4 [unalignapk] Exemple: • rm "$ 1" _unaligned.apk
Des commandes supplémentaires pourraient aider:
Pour générer une nouvelle clé avec keytool Keytool -genkey -alias -keystore
Pour lister les clés Keytool -list -keystore
Commande pour générer un keyhash pour les fonctionnalités de Facebook
Commande: • keytool -exportcert -alias nom_alias -keystore [fichier_fichier] | openssl sha1 -binary | openssl base64
Exemple: • C:\Program Files\Java\jdk1.6.0_43\bin> keytool -exportcert -alias release -keyst Ou release.keystore | opens l sha1 -binary | openssl base64
Remarque: Pour signer nos apks, nous avons rétrogradé JDK de la mise à jour 1.7 à 1.6.0_43.
Motif: À partir de JDK 7, l’algorithme de signature par défaut a été modifié. Vous devez donc spécifier les algorithmes de signature et de synthèse (-sigalg et -digestalg) lorsque vous signez un APK.
Commande: Jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [fichier de stockage de clés] [Originalapk] nom_alias
Zip -d my_application.apk META-INF/\*
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
Notez que si vous utilisez schéma de signature v2 (que vous utiliserez automatiquement si vous utilisez build-tools 24.0.3+ en AS), vous ne pouvez pas simplement supprimer le dossier META-INF de l'APK car la v2 ajoute ses données de signature à un bloc méta Zip.
Le nouvel apksigner de Google introduit dans build-tools 24.03 (Android 7) est toutefois capable de démissionner des APK. Vous pouvez simplement répéter la commande de signature pour signer avec un nouveau magasin de clés/certificat (les anciens seront supprimés).
apksigner sign --ks keystore.jks signed_app.apk
Prise sans scrupule: si vous voulez un outil plus simple capable de signer plusieurs apks et d'avoir une meilleure sortie de journal, utilisez: https://github.com/patrickfav/uber-apk-signer _ (utilise l'apksigner.jar de Google en arrière-plan)
Toutes les solutions ci-dessus fonctionnent. Juste une note pourquoi cela n'a pas fonctionné pour vous lorsque vous avez compressé à nouveau:
Certains fichiers du fichier .apk doivent rester stockés (compression à 0%). En effet, Android utilisera le mappage de mémoire (mmap) pour lire le contenu sans le décompresser en mémoire. Ces fichiers sont .ogg et certaines des icônes.
En supposant que vos clés soient stockées dans keys.keystore
, vous pouvez exécuter:
$ keytool -list -keystore keys.keystore
Your keystore contains 1 entry
your_key_alias, Jan 3, 2013, PrivateKeyEntry,
Certificate fingerprint (SHA1): 8C:C3:6A:DC:7E:B6:12:F1:4C:D5:EE:F1:AE:17:FB:90:89:73:50:53
pour déterminer le pseudonyme de votre clé. Puis lancez:
Zip -d your_app.apk "META-INF/*"
jarsigner -verbose -keystore keys.keystore \
-sigalg MD5withRSA -digestalg SHA1 -sigfile CERT \
your_app.apk your_key_alias
re-signer your_app.apk
avec la clé nommée your_key_alias
.
L'option supplémentaire -sigfile CERT
semble être nécessaire à partir de JDK 8.