So signieren Sie eine Android-Apk-Datei

111

Ich versuche meine apk Datei zu signieren. Ich kann nicht herausfinden, wie es geht. Ich kann keine guten Anweisungen finden. Ich habe sehr wenig Programmiererfahrung, daher wäre jede Hilfe dankbar.

chriss
quelle
2
Überprüfen Sie dies: So unterschreiben Sie Android-Projekt apk
Droidenkind
2
Ein großartiges Tutorial dazu finden Sie hier bei androidcookers.co.cc/2012/06/…
Bratin
1
Ich habe dieses vollständige Tutorial vom Erstellen meines eigenen Keystores bis zum Exportieren einer signierten APK in Eclipse verwendet. mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo

Antworten:

84

Das Handbuch ist klar genug. Bitte geben Sie an, an welchem ​​Teil Sie hängen bleiben, nachdem Sie es durchgearbeitet haben. Ich würde vorschlagen:

https://developer.android.com/studio/publish/app-signing.html

Okay, eine kleine Übersicht ohne Referenz oder Finsternis, lassen Sie also etwas Platz für Fehler, aber es funktioniert so

  • Öffnen Sie Ihr Projekt in Eclipse
  • Drücken Sie die rechte Maustaste -> Tools (Android Tools?) -> signierte Anwendung exportieren (apk?)
  • Gehen Sie durch den Assistenten:
  • Erstellen Sie einen neuen Schlüsselspeicher. Merke dir dieses Passwort
  • Unterschreibe deine App
  • Speichern Sie es usw.

Auch vom Link:

Kompilieren und signieren Sie mit Eclipse ADT

Wenn Sie Eclipse mit dem ADT-Plugin verwenden, können Sie mit dem Export-Assistenten eine signierte APK-Datei exportieren (und bei Bedarf sogar einen neuen Schlüsselspeicher erstellen). Der Export-Assistent führt die gesamte Interaktion mit dem Keytool und dem Jarsigner für Sie aus. Auf diese Weise können Sie das Paket über eine grafische Benutzeroberfläche signieren, anstatt die oben beschriebenen manuellen Verfahren zum Kompilieren, Signieren und Ausrichten auszuführen. Sobald der Assistent Ihr Paket kompiliert und signiert hat, führt er auch die Paketausrichtung mit zip align aus. Da der Export-Assistent sowohl Keytool als auch Jarsigner verwendet, sollten Sie sicherstellen, dass auf Ihrem Computer auf sie zugegriffen werden kann, wie oben in der Grundeinstellung für das Signieren beschrieben.

So erstellen Sie eine signierte und ausgerichtete APK in Eclipse:

  1. Wählen Sie das Projekt im Paket-Explorer aus und wählen Sie Datei> Exportieren.
  2. Öffnen Sie den Android-Ordner, wählen Sie Android-Anwendung exportieren und klicken Sie auf Weiter.

    Der Assistent zum Exportieren von Android-Anwendungen wird jetzt gestartet, der Sie durch den Vorgang des Signierens Ihrer Anwendung führt, einschließlich der Schritte zum Auswählen des privaten Schlüssels, mit dem die APK signiert werden soll (oder zum Erstellen eines neuen Schlüsselspeichers und eines neuen privaten Schlüssels).

  3. Schließen Sie den Export-Assistenten ab, und Ihre Anwendung wird kompiliert, signiert, ausgerichtet und zur Verteilung bereit.
Nanne
quelle
Ich verstehe nicht, wie ich anfangen soll. Ich benutze Eclipse Version: Helios Service Release 1
chriss
2
aber bitte lesen Sie die ganze Sache.
Nanne
1
Was muss ich in der Schlüsselerstellung für den Alias ​​eingeben?
Chris
9
Hast du das Handbuch gelesen? -alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.Es ist nur ein Alias. Ein Name, wenn Sie so wollen. Ich würde "firstkey" vorschlagen :-)
Nanne
1
Entschuldigung, ich verstehe immer noch nicht. Wie würde ich diesen Alias ​​verwenden? Was ist seine Aufgabe?
user462990
37

Hier finden Sie eine Anleitung zum manuellen Signieren einer APK. Es enthält Informationen zu den neu apk-signereingeführten in build-tools 24.0.3 (10/2016)

Automatisierter Prozess:

Verwenden Sie dieses Tool (verwendet den neuen Apksigner von Google):

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

Haftungsausschluss: Ich bin der Entwickler :)

Manueller Prozess:

Schritt 1: Keystore generieren (nur einmal)

Sie müssen einmal einen Keystore generieren und damit Ihre unsignedapk signieren . Verwenden Sie das vom JDK bereitgestellte inkeytool %JAVA_HOME%/bin/

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

Schritt 2 oder 4: Zipalign

zipalign %ANDROID_HOME%/sdk/build-tools/24.0.2/Dies ist ein Tool, das vom Android SDK bereitgestellt wird, z. B. ein obligatorischer Optimierungsschritt, wenn Sie die Apk in den Play Store hochladen möchten.

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

Hinweis: Wenn Sie das alte verwenden jarsigner, müssen Sie NACH dem Signieren zipalignieren . Wenn Sie die neue apksignerMethode verwenden, tun Sie dies VOR dem Signieren (verwirrend, ich weiß). Das Aufrufen von zipalign vor apksigner funktioniert einwandfrei, da apksigner die APK-Ausrichtung und -Komprimierung beibehält (im Gegensatz zu jarsigner).

Sie können die Ausrichtung mit überprüfen

zipalign -c 4 my-aligned.apk

Schritt 3: Signieren und überprüfen

Verwenden von Build-Tools 24.0.2 und älter

Verwendung jarsigner, die wie die keytool, mit der JDK - Distribution kommt gefunden %JAVA_HOME%/bin/und es verwendet , etwa so:

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

und kann mit überprüft werden

jarsigner -verify -verbose my_application.apk

Verwenden von Build-Tools 24.0.3 und neuer

Android 7.0 führt das APK-Signaturschema v2 ein, ein neues App-Signaturschema, das schnellere App-Installationszeiten und mehr Schutz vor unbefugten Änderungen an APK-Dateien bietet ( weitere Informationen finden Sie hier und hier ). Deshalb hat Google einen eigenen Apk-Signer namensapksigner (duh!) Implementiert. Die Skriptdatei befindet sich in %ANDROID_HOME%/sdk/build-tools/24.0.3/(die .jar befindet sich im /libUnterordner). Verwenden Sie es so

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

und kann mit überprüft werden

apksigner verify my-app.apk

Die offizielle Dokumentation finden Sie hier.

Patrick Favre
quelle
10

Führen Sie für Benutzer von IntelliJ IDEA oder Android Studio die folgenden Schritte aus:
* Über das Menü Build/Generate signed APK
* Sie müssen einen Schlüsselspeicherpfad erstellen. Klicken Sie im Dialogfeld auf Create new. Sie erstellen eine JKS-Datei, die Ihre Schlüssel enthält. Ordner auswählen, Passwort definieren. Also dein Keystore ok.
* Erstellen Sie einen neuen Schlüssel für Ihre Anwendung, indem Sie Alias, Schlüsselkennwort, Ihren Namen usw. verwenden.
* Klicken Sie auf Weiter.
* Wählen Sie im Dialogfeld entweder Proguard oder nicht.

Ihre signierte APK-Datei ist fertig.

Hilfedatei: https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html

trante
quelle
8

Mach dir keine Sorgen ...! Befolgen Sie diese Schritte, um Ihre signierte APK-Datei zu erhalten. Ich war auch darüber besorgt, aber diese Schritte reiten mich von der Frustration ab. Schritte zum Unterzeichnen Ihrer Bewerbung:

  1. Exportieren Sie das nicht signierte Paket:

Klicken Sie mit der rechten Maustaste auf das Projekt in Eclipse -> Android Tools -> Nicht signiertes Anwendungspaket exportieren (wie hier exportieren wir unsere GoogleDriveApp.apk auf den Desktop).

Signieren Sie die Anwendung mit Ihrem Keystore und dem Jarsigner-Tool (folgen Sie den nachstehenden Schritten):

Öffnen Sie cmd -> ändern Sie das Verzeichnis, in dem Ihre "jarsigner.exe" vorhanden ist (wie hier in meinem System unter "C: \ Programme \ Java \ jdk1.6.0_17 \ bin").

Geben Sie nun den folgenden Befehl in cmd ein:

jarsigner -verbose -keystore c: \ users \ android \ debug.keystore c: \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk my_keystore_alias

Sie werden aufgefordert, Ihr Passwort anzugeben: Geben Sie die Passphrase für den Keystore ein: Es wird Ihre apk signieren. Um zu überprüfen, ob die Signatur erfolgreich ist, können Sie Folgendes ausführen:

jarsigner -verify c: \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk

Es sollte zurückkommen mit: Glas verifiziert.

Methode 2

Wenn Sie Eclipse mit ADT verwenden, ist es einfach, die Datei zu kompilieren, zu signieren, auszurichten und für die Verteilung vorzubereiten. Führen Sie dazu einfach die folgenden Schritte aus.

  • Datei> Exportieren.
  • Android-Anwendung exportieren
  • Durchsuchen -> wählen Sie Ihr Projekt aus
  • Weiter -> Weiter

Mit diesen Schritten wird Ihr Projekt kompiliert, signiert und per Zip ausgerichtet. Jetzt können Sie Ihr Projekt verteilen oder im Google Play Store hochladen.

Pir Fahim Shah
quelle
Das war genau das, was ich brauchte, war die Verwendung eines neuen Online-Build-Tools und musste meinen vorherigen Keystore verwenden, nicht den neu generierten. Das einzige, was mir fehlte, war ZIP ALIGNing the apk. Wenn also jemand das gleiche Problem hat, gehen Sie hier stackoverflow.com/a/22682132/826194
Larzan
5

APK-Signaturprozess

Führen Sie die folgenden drei Befehle aus, um eine Android APK-Datei manuell zu signieren:

  1. Generieren Sie eine Keystore-Datei

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
  2. Signieren Sie Ihre APK-Datei mit jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
  3. Signierte APK mit dem Zipalign-Tool ausrichten

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

SCHRITT 1


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000

Beispiel:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000

Schlüsselspeicherkennwort : yourApp @ 123 Schlüsselkennwort: yourApp @ 123

CMD O / P.

D:\ru\SignedBuilds\MySignedApp>keytool -genkey -v -keystore id.keystore
 -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  MySignedApp Sample
What is the name of your organizational unit?
  [Unknown]:  Information Technology
What is the name of your organization?
  [Unknown]:  MySignedApp Demo
What is the name of your City or Locality?
  [Unknown]:  Mumbai
What is the name of your State or Province?
  [Unknown]:  Maharashtra
What is the two-letter country code for this unit?
  [Unknown]:  IN
Is CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra, C=IN corr
ect?
  [no]:  y

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,
000 days
        for: CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra,
 C=IN
Enter key password for <MySignedApp>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing id.keystore]

D:\ru\SignedBuilds\MySignedApp>

SCHRITT 2


Sign your app with your private keystore using jarsigner

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME

Beispiel

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id

CMD O / P.

D:\ru\SignedBuilds\MySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id ---
ect
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/---.SF
   adding: META-INF/---.RSA
  signing: AndroidManifest.xml
  ..... 
    signing: classes.dex
  signing: lib/commons-codec-1.6.jar
  signing: lib/armeabi/libkonyjsvm.so
jar signed.

Warning:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not
be able to validate this jar after the signer certificate's expiration date (2044-02-07) or after an
y future revocation date.

D:\ru\SignedBuilds\MySignedApp>

Verify that your APK is signed

jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

Beispiel

jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk

CMD O / P.

D:\ru\SignedBuilds\MySignedApp>jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
 s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not b
e able to validate this jar after the signer certificate's expiration date (2044-02-09) or after any
 future revocation date.

D:\ru\SignedBuilds\MySignedApp>

SCHRITT 3


Richten Sie das endgültige APK-Paket mit zipalign aus

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

Beispiel

zipalign -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P.

D:\Android\android-sdk\build-tools\19.1.0>zipalign -v 4 D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16
_prod_playstore\MySignedAppS1-release-unsigned.apk D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16_prod
_playstore\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

  4528613 classes.dex (OK - compressed)
 5656594 lib/commons-codec-1.6.jar (OK - compressed)
 5841869 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

Verify that your APK is Aligned successfully

zipalign -c -v 4 YOUR_APK_PATH

Beispiel

zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P.

D:\Android\android-sdk\build-tools\19.1.0>zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

 4453984 res/drawable/zoomout.png (OK)
 4454772 res/layout/tabview.xml (OK - compressed)
 4455243 res/layout/wheel_item.xml (OK - compressed)
 4455608 resources.arsc (OK)
 4470161 classes.dex (OK - compressed)
 5597923 lib/commons-codec-1.6.jar (OK - compressed)
 5783198 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

Hinweis:

Der Befehl verify dient nur dazu, zu überprüfen, ob APK korrekt erstellt und signiert wurde!

Verweise

Ich hoffe das wird allen helfen :)

Rupesh Yadav
quelle
2

Ich bin auf dieses Problem gestoßen und wurde durch Überprüfen der min sdk-Version im Manifest gelöst. Es war auf 15 (ICS) eingestellt, aber auf meinem Telefon lief 10 (Lebkuchen)

RJL
quelle