Perché i file APK devono essere firmati?
Ogni app Android deve essere firmata digitalmente prima di poter essere installata. La firma ha diversi scopi:
- Verifica l'identità dello sviluppatore dell'app
- Garantisce che l'APK non sia stato manomesso
- Consente ad Android di abbinare gli aggiornamenti dell'app all'originale
- Necessario per l'installazione su tutti i dispositivi Android
Strumento desktop obbligatorio
La firma dell'APK richiede strumenti da riga di comando (JDK/SDK Android). Questa operazione non può essere eseguita in un browser Web. Segui la guida qui sotto per firmare gli APK sul tuo computer.
Metodo 1: firma con apksigner (consigliato)
apksigner è lo strumento di firma APK ufficiale di Google, incluso in Android SDK Build Tools.
Passaggio 1: generare un archivio chiavi
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Passaggio 2: firma l'APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Passaggio 3: verifica la firma
apksigner verify --verbose signed-app.apk
Metodo 2: firma con jarsigner (legacy)
# Sign
jarsigner -verbose -sigalg SHA256withRSA \
-digestalg SHA-256 \
-keystore my-release-key.jks \
app-unsigned.apk my-key-alias
# Verify
jarsigner -verify -verbose app-signed.apk
Passaggio 4: Zipalign (importante!)
Dopo aver firmato, ottimizza l'APK con zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Firma di debug (per test)
A scopo di test, puoi utilizzare il keystore di debug Android predefinito:
# Location of debug keystore:
# Linux/Mac: ~/.android/debug.keystore
# Windows: C:\Users\{USERNAME}\.android\debug.keystore
# Sign with debug key
apksigner sign --ks ~/.android/debug.keystore \
--ks-key-alias androiddebugkey \
--ks-pass pass:android \
app.apk
Confronto degli strumenti di firma
| Metrica | apksigner | jarsigner |
|---|---|---|
| Firma V1 | ||
| Firma V2 | ||
| Firma V3 | ||
| Raccomandato | Eredità |
Firmatario APK: domande frequenti
Domande comuni sulla firma APK, sugli archivi chiavi e sulla firma del codice Android
Perché l'ordine di allineamento (zipalign prima di apksigner) è importante su Android 11-15
Uno degli errori più frequenti commessi da sviluppatori e modder quando firmano un APK modificato o unito è eseguire zipalign Dopo firmando il pacchetto o utilizzare l'utilità jarsigner legacy di Java invece dell'SDK Android apksigner di Google. Poiché APK Signature Scheme v2 e v3 calcolano un hash crittografico sull'intero layout binario dell'archivio ZIP, la modifica degli offset dei byte con zipalign dopo la firma invalida immediatamente il blocco della firma v2/v3.
A partire da Android 11 (livello API 30) e applicato rigorosamente su Android 14 e 15, PackageManager richiede due condizioni non negoziabili per qualsiasi APK destinato ai livelli SDK moderni:
- resources.arsc non compresso allineato a 4 byte: La tabella delle risorse compilata (resources.arsc) deve essere archiviata non compressa (STORED) e allineata su un limite di 4 byte in modo che Android possa mapparla in memoria (mmap) direttamente senza copiarla nella RAM. Eseguire sempre la firma zipalign -p -f -v 4 input.apk aligned.apk Prima.
- Blocco firma v2+ obbligatorio: La firma di un APK con targeting API 30+ con jarsigner (che scrive solo una firma META-INF/ v1) farà sì che Android 11-15 rifiuti l'installazione con INSTALL_PARSE_FAILED_NO_CERTIFICATES. Utilizza il generatore di comandi interattivo sopra per creare il comando apksigner --v2-signing-enabled=true esatto per il tuo archivio di chiavi o verifica l'output firmato nel nostro Verificatore firma APK.