Firma e allineamento di un'apk per Android
Una volta generato il file apk di un'app Android, occorre (nell'ordine) firmarla ed eseguire l'allineamento dell'apk.
Firma
Un keystore è un contenitore di chiavi pubbliche e private. Ogni chiave privata è identificata da un alias ed è protetta da una password: per utilizzare una chiave privata del keystore per firmare un'app è necessario indicare l'alias della chiave e fornire la password. Una volta caricata un'app sul Play Store, le nuove versioni dell'app dovranno essere firmate con la medesima chiave (e quindi con il medesimo keystore).
Pertanto occorre:
- Se non si dispone già di una chiave (contenuta in un keystore), generarla con il comando keytool
- Firmare l'apk con il comando jarsigner
La procedura dettagliata è descritta nella documentazione dei tool di Android. Su Arch/Manjaro, i tool si trovano nel pacchetto android-tools (non è necessario scaricare tutto lo sdk).
In sintesi, il comando per firmare si usa così:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <Il mio keystore> <LaMiaApk.apk> <Il mio alias>
Allineamento
Dopo aver firmato l'apk occorre allinearlo, ossia ottimizzare il file zip per far partire i singoli file compressi in un byte la cui posizione è multipla di 4 (ottimizzazione per le architetture a 32 bit).
Per far ciò occorre lo strumento zipalign, che si trova nell'sdk di Android. Il file eseguibile del tool non è installato nel path di sistema (di solito).
La sintassi del comando è:
./zipalign 4 <app_da_allineare.apk> <app_allineata.apk>
N.B. Se non si esegue l'allineamento, quando si tenta di caricare l'APK con la console sviluppatori si ottiene il seguente messaggio di errore: "Hai caricato un APK di cui non è stato eseguito l'allineamento dell'archivio. Dovrai eseguire uno strumento di allineamento dell'archivio sull'APK e caricare di nuovo l'APK."