webentwicklung-frage-antwort-db.com.de

Kann ich ein .apk mit einem anderen Zertifikat als mit dem Zertifikat neu signieren?

Wenn ich eine apk habe, kann ich die aktuelle Signatur entfernen und wie kann ich sie mit einer anderen .keystore-Datei erneut signieren und die Anwendung trotzdem installieren?

Update : Ich habe es geschafft, mit Jorgesys 'Lösung zusammenzuarbeiten, und wo ich es vorher vermasselt habe, habe ich die .apk-Datei entpackt und dann nach dem Entfernen des META-INF-Ordners erneut gekippt und die Dateierweiterung in .apk geändert. Was ich hätte tun sollen, ist es einfach mit winzip zu öffnen und den Ordner innerhalb von winzip zu löschen.

40
Anton

versuche dies

1) Ändern Sie die Erweiterung von .apk in .Zip

2) Öffnen und entfernen Sie den Ordner META-INF

3) Ändern Sie die Erweiterung in .apk

4) Verwenden Sie jarsigner und zipalign für Ihren neuen Schlüsselspeicher.

ich hoffe es hilft

67
Elenasys

Wenn Sie nach einer schnellen Lösung suchen, können Sie ein Open-Source-Apk-Resigner-Skript oder das Apksigner-Tool von Google verwenden

   ./signapk.sh application.apk keystore key-pass alias
  • Als noch einfachere Lösung können Sie das Google apksigner-Befehlszeilenwerkzeug verwenden, das in Version 24.0.3 und höher verfügbar ist.
apksigner sign --ks release.jks application.apk

Weitere Informationen zum apksigner-Tool finden Sie auf der Entwickler-Website von Android. 

https://developer.Android.com/studio/command-line/apksigner.html

25
Fatih

Zum Release unterzeichnen: $ 1.apk -> $ 1_release.apk " GeneralMills & GoogleApps # 2012 Schritt 1: Entfernen einer vorherigen Signatur Ändern Sie die Erweiterung Ihres .apk in .Zip Öffnen Sie und löschen Sie das Ordner META-INF Ändern Sie die Erweiterung in .apk Oder Befehl: • Zip [originalapk] Beispiel: • Zip "$ 1" .apk -d 

Schritt 2: Signieren mit release.keystore .. Befehl: • jarsigner –verbose –keystore [keystorefile] –signedjar [unalignedapk] [originalapk] alias_name Beispiel: • C:\Programme\Java\jdk1.6.0_43\bin> jarsigner -verbose -keystore release.keystore -signedjar "$ 1" _unaligned.apk "$ 1" .apk release

Schritt 3: Ausrichten Befehl: • zipalign -f 4 [unalignedapk] [releaseapk] Beispiel: • C:\Users\G535940\Downloads\adt-bundle-windows-x86\adt -bundle-windows-x86\sdk\too ls> zipalign -f 4 "$ 1" _unaligned.apk "$ 1" _release.apk

Schritt 4: Aufräumen Befehl: • rm 4 [unalignedapk] Beispiel: • rm "$ 1" _unaligned.apk

Zusätzliche Befehle können helfen:

  1. So erstellen Sie einen neuen Schlüssel mit keytool Keytool -genkey -alias -keystore 

  2. Zum Auflisten der Schlüssel Keytool -list -keystore 

Befehl zum Generieren eines Keyhash für die Facebook-Funktionen

Befehl: • keytool -exportcert -alias aliasname -keystore [keystorefile] | openssl sha1 -binary | openssl base64

Beispiel: • C:\Programme\Java\jdk1.6.0_43\bin> keytool -exportcert -alias release -keyst Ore release.keystore | öffnet l sha1 -binary | openssl base64

Hinweis: Zum Signieren unserer apks haben wir das JDK von 1.7 auf 1.6.0_43 aktualisiert.

Grund: Seit JDK 7 wurde der Standard-Signaturalgorithmus geändert, sodass Sie beim Signieren einer APK die Signatur- und Digest-Algorithmen (-sigalg und -digestalg) angeben müssen.

Befehl: Jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [Keystorefile] [Originalapk] alias_name

7
Harsha.Vaswani
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
6
kreker

Wenn Sie v2-Signaturschema verwenden (dies wird automatisch bei Verwendung der Build-Tools 24.0.3+ in AS verwendet), können Sie den Ordner META-INF nicht einfach aus dem APK entfernen, da v2 seine Signaturdaten einer Zip-Datei hinzufügt Meta-Block.

Google new apksigner wurde in Build-Tools 24.03 (Android 7) eingeführt, kann jedoch APKs zurücktreten. Sie können den Signaturbefehl einfach wiederholen, um mit einem neuen Keystore/Cert zu signieren (die alten werden entfernt).

apksigner sign --ks keystore.jks signed_app.apk

Shameless plug: Wenn Sie ein einfacheres Tool suchen, das mehrere apks signieren kann und eine bessere Protokollausgabe hat, verwenden Sie: https://github.com/patrickfav/uber-apk-signer (verwendet die apksigner.jar von Google in der Hintergrund)

6
patrickf

Alle oben genannten Lösungen funktionieren. Nur ein Hinweis, warum es für Sie nicht funktioniert hat, als Sie die ZIP-Datei geändert haben: 

Einige der Dateien in .apk müssen gespeichert bleiben (Komprimierung bei 0%). Dies liegt daran, dass Android die Speicherzuordnung (mmap) verwendet, um den Inhalt zu lesen, ohne ihn in den Speicher zu packen. Solche Dateien sind .ogg und einige der Symbole.

3
gilm

Wenn Ihre Schlüssel in keys.keystore gespeichert sind, können Sie Folgendes ausführen:

$ 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

um den Alias ​​Ihres Schlüssels zu bestimmen. Dann renne:

Zip -d your_app.apk "META-INF/*"
jarsigner -verbose -keystore keys.keystore \
   -sigalg MD5withRSA -digestalg SHA1 -sigfile CERT \
   your_app.apk your_key_alias

your_app.apk mit dem Schlüssel your_key_alias erneut signieren.

Die zusätzliche -sigfile CERT-Option scheint ab JDK 8 erforderlich zu sein.

0
Phil Calvin