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 unsigned
apk. 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 dall'SDK Android che si trova ad esempio, %ANDROID_HOME%/sdk/build-tools/24.0.2/
è 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 apksigner
metodo 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 jarsigner
che, 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). Pertanto, 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 /lib
sottocartella). 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.