Che cos'è il formato di file APK?
Un file con estensione .apk contiene un archivio compresso con un'applicazione, un gioco o un firmware per il sistema Android. I pacchetti APK sono basati sul formato contenitore ZIP/JAR, il che significa che qualsiasi strumento di archiviazione standard può aprire ed ispezionare il loro contenuto. Google Play originariamente imponeva un limite di 100 MB per i download di .apk, con un massimo di due file di espansione fino a 2 GB ciascuno per risorse aggiuntive; da agosto 2021, Google Play richiede che le nuove app siano pubblicate come .AAB (Android App Bundles), che generano APK suddivisi ottimizzati per il dispositivo al momento dell'installazione invece di spedire un singolo pacchetto monolitico.
Struttura di un file APK
La struttura dei file APK si basa sull'archivio JAR - possono contenere le seguenti sottocartelle e file:
res- con una descrizione delle risorse in forma non compilata,lib- contiene i sorgenti compilati e le librerie dell'applicazione, suddivisi in base alle diverse piattaforme informatiche (es.arm64-v8a,x86_64),META-INF- con file contenenti informazioni sul pacchetto, ad esempio il fileMANIFEST.MF, o i certificati,assets- che contiene varie risorse utilizzate dall'app,classes.dex- bytecode Dalvik/ART compilato eseguito dal runtime di Android,AndroidManifest.xml- manifest codificato in binario che dichiara i permessi dell'app, i componenti e i requisiti SDK,resources.arsc- tabella delle risorse precompilata che mappa gli ID a stringhe, layout e drawable.
I file Android Package vengono utilizzati per creare e distribuire programmi per piattaforme mobili che operano sul sistema Android. Il contenuto dei file .apk può essere decompresso con la maggior parte dei programmi di decompressione che supportano la compressione ZIP, o ispezionato semplicemente rinominando il file in .zip. Per mantenere l'integrità, i pacchetti sono protetti da APK Signature Scheme v2/v3 (e v4 per gli aggiornamenti incrementali), con l'installazione rifiutata se la firma non corrisponde. L'installazione di pacchetti .apk dall'esterno del Play Store non è consentita per impostazione predefinita - gli utenti devono abilitare il permesso Installa app sconosciute nelle impostazioni di Android, o inviare il pacchetto tramite adb install app.apk. Le app troppo grandi per un singolo .apk possono essere distribuite come .XAPK, che raggruppa un APK di base con uno o più APK suddivisi in un unico archivio.
Sicurezza e incolumità
RISCHIO: HIGHL'APK è il vettore numero 1 di malware su Android: il sideloading bypassa la scansione di Google Play Protect. Checklist dei rischi per gli utenti: installare solo da fonti attendibili (Google Play, F-Droid, APKMirror - che verifica le firme rispetto a quelle dello sviluppatore), controllare che i permessi richiesti corrispondano allo scopo dell'app, non installare mai un APK arrivato non richiesto via chat/SMS (campagne di «smishing») e confrontare la firma dell'app durante l'aggiornamento. Il trucco del rinominare in .zip permette di ispezionare i contenuti prima dell'installazione.
Dettagli del formato
in sintesiProgrammi che aprono file APK
Dettagli tecnici
specifiche approfondite| Codifica | Binario |
| Ordine dei byte | Little-endian |
| Contenitore | Archivio ZIP (valido anche come JAR) |
| Compressione | DEFLATE per voce; le voci sensibili all'allineamento sono memorizzate non compresse (metodo STORED) e allineate tramite zipalign |
| Firma / integrità | APK Signature Scheme v2/v3 (blocco inserito prima della directory centrale ZIP); v4 per aggiornamenti incrementali sul dispositivo; installazione rifiutata in caso di mancata corrispondenza della firma |
| Magic bytes | 50 4B 03 04 - header file locale standard ZIP «PK» all'offset 0; si distingue dal semplice ZIP per la presenza di AndroidManifest.xml e classes.dex |
| File interni | AndroidManifest.xml, classes.dex (+ classes2.dex …), resources.arsc, res/, lib/, assets/, META-INF/ |
| Bytecode | Dalvik Executable (DEX) in classes.dex - compilato da sorgente Java/Kotlin, eseguito da ART (Android Runtime) |
| Allineamento | zipalign impone il limite di 4 byte per le voci non compresse; Android 15+ punta all'allineamento di pagina a 16 KB |
| Formato manifest | XML codificato in binario (AXML) che dichiara nome del pacchetto, permessi, componenti Activity/Service/Provider, minSdkVersion, targetSdkVersion |
| Layout librerie native | Sottocartella lib/<ABI> per architettura: arm64-v8a, armeabi-v7a, x86, x86_64 |
| Tabella risorse | resources.arsc - file binario piatto che mappa gli ID risorsa interi a stringhe, layout, drawable e varianti di configurazione |
| Dimensione tipica | 2 MB - 1.5 GB; gli APK delle app di base solitamente 5-100 MB; i giochi con asset inclusi raggiungono la fascia superiore |
| Tipo MIME | application/vnd.android.package-archive |
| Piattaforma | Android (nativo); eseguibile su Windows, Linux, macOS tramite emulatori (BlueStacks, Android Studio AVD, Waydroid) |
| Rilasciato | 2008 (Android 1.0) |
| Ultima versione | APK Signature Scheme v3 (Android 9, 2018); v4 incremental (Android 11, 2020) |
| Standard aperto | Sì · royalty-free |
| Specifica | source.android.com |