Ok, ci siamo. Il modo più frequente per creare un apk non firmato è usando la linea di comando:
./gradlew assemble<$Flavor><$BuildType>
E’ abbastanza simile per i bundle di app:
./gradlew bundle<$Flavor><$BuildType>
per esempio:
./gradlew assembleProdRelease // building apk./gradlew bundleProdRelease // building app bundle
In genere, questi sono i comandi per costruire un bundle di apk/app, ma la gente spesso aggiunge il signingConfig a build.gradle per fare la parte della firma allo stesso tempo.
Quindi, rimuovendo questa parte nel file build.gradle, siamo a posto per creare un bundle apk/app non firmato.
L’apk costruito sarà ospitato in: build/outputs/apk/flavor/buildtype/
L’app bundle sarà in: build/outputs/bundle/flavorBuildType/
Nota che questo apk non può essere installato nel tuo dispositivo senza essere firmato. Otterrai un errore se provi a installarlo:
Per firmare quell’apk o quel bundle di app, prima usiamo keytool per generare un keystore (se non ne hai uno) e poi usiamo jarsigner o apksigner per firmare l’apk o il bundle di app con il keystore generato.
Genera keystore:
Esegui il comando seguente:
keytool -genkey -v -keystore <release_keystore.keystore> -alias <alias_name> -keyalg RSA -keysize 2048 -validity 10000
Allora ti verranno chieste alcune informazioni come al solito ma le più importanti sono la password del keystore e la password dell’alias. Una volta generato il keystore, lo firmeremo con diverse opzioni.
Firma un bundle apk/app con jarsigner
Supponiamo che tu abbia già installato JDK.
jarsigner -keystore <keystore_file> -storepass <storepass> -keypass <keypass> <unsigned_apk_file> <alias_name>
Questo comando non genera alcun nuovo file ma l’apk non firmato diventerà firmato senza alcuna modifica esterna visibile (nome e dimensione del file).
Con un app bundle, il comando è esattamente lo stesso, dobbiamo solo cambiare il percorso del file apk nel file app bundle.
In effetti, jarsigner è uno strumento generale che viene utilizzato per firmare un file jar. Lo strumento più adattabile per firmare un apk è apksigner che funziona in modo simile a jarsigner, tranne che non supporta la firma di un bundle di app.
Firma un apk con apksigner
Importante: come indica il suo nome, apksigner è solo un apk signer, non può firmare un App Bundle
La sintassi per questo è semplice come quella di jarsigner:
apksigner sign --ks <keystore_file> <apk_file>
Dopo aver eseguito questo comando, ti verrà richiesta la password del keystore e la password dell’alias. Inserite queste informazioni e abbiamo finito.