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 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 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). 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 /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.