Come firmare un file apk Android


111

Sto provando a firmare il mio file apk. Non riesco a capire come farlo. Non riesco a trovare buone indicazioni approfondite. Ho poca esperienza di programmazione, quindi qualsiasi aiuto sarebbe apprezzato.



2
Puoi trovare un ottimo tutorial su questo qui su androidcookers.co.cc/2012/06/…
Bratin,

1
Ho usato questo tutorial completo dalla creazione del mio keystore all'esportazione di un APK firmato in Eclipse. mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo,

Risposte:


84

Il manuale è abbastanza chiaro. Si prega di specificare quale parte si rimane bloccati dopo averla elaborata, suggerirei:

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

Ok, una piccola panoramica senza riferimenti o eclissi in giro, quindi lascia un po 'di spazio per gli errori, ma funziona così

  • Apri il tuo progetto in Eclipse
  • Premi il tasto destro del mouse -> strumenti (strumenti android?) -> esporta applicazione firmata (apk?)
  • Segui la procedura guidata:
  • Crea un nuovo archivio chiavi. ricorda quella password
  • Firma la tua app
  • Salvalo ecc.

Inoltre, dal link:

Compila e firma con Eclipse ADT

Se stai usando Eclipse con il plug-in ADT, puoi usare l'Esportazione guidata per esportare un .apk firmato (e persino creare un nuovo keystore, se necessario). La procedura guidata di esportazione esegue per te tutta l'interazione con Keytool e Jarsigner, che ti consente di firmare il pacchetto utilizzando una GUI invece di eseguire le procedure manuali di compilazione, firma e allineamento, come discusso sopra. Una volta che la procedura guidata ha compilato e firmato il pacchetto, eseguirà anche l'allineamento del pacchetto con zip align. Poiché l'esportazione guidata utilizza sia Keytool che Jarsigner, assicurati che siano accessibili sul tuo computer, come descritto sopra nella Configurazione di base per la firma.

Per creare un file .apk firmato e allineato in Eclipse:

  1. Seleziona il progetto in Esplora pacchetti e seleziona File> Esporta.
  2. Apri la cartella Android, seleziona Esporta applicazione Android e fai clic su Avanti.

    Viene avviata la procedura guidata Esporta applicazione Android, che ti guiderà attraverso il processo di firma dell'applicazione, inclusi i passaggi per la selezione della chiave privata con cui firmare il file .apk (o la creazione di un nuovo keystore e di una chiave privata).

  3. Completa la procedura guidata di esportazione e la tua applicazione sarà compilata, firmata, allineata e pronta per la distribuzione.

Non capisco come iniziare. Sto usando la versione di eclipse: Helios Service Release 1
chriss

2
ma per favore leggi l'intera cosa. ci sono alcuni suggerimenti alla fine anche per Eclipse
Nanne

1
nella creazione della chiave cosa devo inserire per l'alias?
Chriss

9
Hai letto il manuale? -alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.È solo un alias. Un nome, se vuoi. Suggerirei "firstkey" :-)
Nanne

1
Scusa, ancora non capisco. Come utilizzerei questo alias. Qual è il suo scopo?
user462990

37

Ecco una guida su come firmare manualmente un APK. Include informazioni sulla novità apk-signerintrodotta in build-tools 24.0.3 (10/2016)

Processo automatizzato:

Usa questo strumento (utilizza il nuovo apksigner di Google):

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

Disclaimer: sono lo sviluppatore :)

Processo manuale:

Passaggio 1: genera il keystore (solo una volta)

Devi generare un keystore una volta e usarlo per firmare il tuo unsignedapk. Usa il fornito dal JDK trovato inkeytool %JAVA_HOME%/bin/

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

Passaggio 2 o 4: Zipalign

zipalign che è uno strumento fornito%ANDROID_HOME%/sdk/build-tools/24.0.2/ dall'SDK Android che si trova ad esempio, è un passaggio di ottimizzazione obbligatorio se si desidera caricare l'apk sul Play Store.

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

Nota: quando si utilizza il vecchio jarsignerè necessario zipalign DOPO la firma. Quando usi il nuovo apksignermetodo lo fai PRIMA di firmare (confuso, lo so). Invocare zipalign prima di apksigner funziona bene perché apksigner conserva l'allineamento e la compressione dell'APK (a differenza di jarsigner).

È possibile verificare l'allineamento con

zipalign -c 4 my-aligned.apk

Passaggio 3: firma e verifica

Utilizzo di build-tools 24.0.2 e versioni precedenti

Usa jarsignerche, come il keytool, viene fornito con la distribuzione JDK trovata in %JAVA_HOME%/bin/e usalo in questo modo:

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

e può essere verificato con

jarsigner -verify -verbose my_application.apk

Utilizzo di build-tools 24.0.3 e versioni successive

Android 7.0 introduce APK Signature Scheme v2, un nuovo schema di firma delle app che offre tempi di installazione delle app più rapidi e maggiore protezione contro le alterazioni non autorizzate dei file APK (vedi qui e qui per maggiori dettagli). Quindi Google ha implementato il proprio firmatario dell'apk chiamatoapksigner (duh!) Il file di script può essere trovato in %ANDROID_HOME%/sdk/build-tools/24.0.3/(il .jar è nella /libsottocartella). Usalo in questo modo

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

e può essere verificato con

apksigner verify my-app.apk

La documentazione ufficiale può essere trovata qui.


10

Per gli utenti di IntelliJ IDEA o Android Studio, eseguire questi passaggi:
* Dal menu Build/Generate signed APK
* È necessario creare un percorso del keystore. Dalla finestra di dialogo fare clic su Create new. Creerai un file jks che include le tue chiavi. Seleziona cartella, definisci una password. Quindi il tuo keystore va bene.
* Crea una nuova chiave per la tua applicazione utilizzando alias, password della chiave, il tuo nome, ecc.
* Fai clic su Avanti.
* Dalla finestra di dialogo selezionare Proguard o meno.

Il tuo file APK firmato è pronto.

File della guida: https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html


8

Non preoccuparti ...! Segui questi passaggi sottostanti e otterrai il tuo file .apk firmato. Ero anche preoccupato per questo, ma questi passaggi mi hanno sollevato dalla frustrazione. Passaggi per firmare la tua domanda:

  1. Esporta il pacchetto non firmato:

Fare clic con il tasto destro sul progetto in Eclipse -> Strumenti Android -> Esporta pacchetto di applicazioni non firmate (come qui esportiamo il nostro GoogleDriveApp.apk sul desktop)

Firma l'applicazione utilizzando il tuo keystore e lo strumento jarsigner (segui i passaggi seguenti):

Apri cmd -> cambia la directory in cui esiste il tuo "jarsigner.exe" (come qui nel mio sistema esiste in "C: \ Program Files \ Java \ jdk1.6.0_17 \ bin"

Ora inserisci il comando belwo in cmd:

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

Ti chiederà di fornire la tua password: Inserisci passphrase per keystore: firmerà il tuo apk. Per verificare che la firma sia andata a buon fine puoi eseguire:

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

Dovrebbe tornare con: jar verificato.

Metodo 2

Se stai usando eclipse con ADT, è semplice compilare, firmare, allineare e pronto il file per la distribuzione. Quello che devi fare è sufficiente seguire questi passaggi.

  • File> Esporta.
  • Esporta l'applicazione Android
  • Sfoglia -> seleziona il tuo progetto
  • Avanti -> Avanti

Questi passaggi compileranno, firmeranno e allineano zip il tuo progetto e ora sei pronto per distribuire il tuo progetto o caricarlo su Google Play Store.


Questo è esattamente ciò di cui avevo bisogno, stava usando un nuovo strumento di compilazione online e dovevo usare il mio precedente keystore, non quello appena generato. L'unica cosa che mi mancava era ZIP allineando l'apk, quindi se qualcuno ha lo stesso problema, andare qui stackoverflow.com/a/22682132/826194
Larzan

5

Processo di firma APK

Per firmare manualmente un file APK Android, esegui questi tre comandi:

  1. Genera file archivio chiavi

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
  2. Firma il tuo file APK usando jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
  3. Allinea l'APK firmato utilizzando lo strumento zipalign

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

PASSO 1


Generate Keystore file

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

Esempio:

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

password archivio chiavi: tuaApp @ 123 password chiave: tuaApp @ 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>

PASSO 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

Esempio

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

Esempio

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>

FASE 3


Allinea il pacchetto APK finale utilizzando zipalign

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

Esempio

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

Esempio

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>

Nota:

Il comando di verifica serve solo per verificare se l'APK è stato creato e firmato correttamente!

Riferimenti

Spero che questo possa aiutare tutti :)


2

Mi sono imbattuto in questo problema ed è stato risolto controllando la versione min sdk nel manifest. Era impostato su 15 (ICS), ma il mio telefono funzionava 10 (Gingerbread)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.