Wat is het APK-bestandsformaat?
Een bestand met een .apk-extensie bevat een gecomprimeerd archief met een applicatie, game of firmware voor het Android-systeem. APK-pakketten zijn gebouwd op het ZIP/JAR-containerformaat, wat betekent dat elk standaard archiefprogramma de inhoud ervan kan openen en inspecteren. Google Play legde oorspronkelijk een limiet van 100 MB op aan .apk-downloads, met maximaal twee uitbreidingsbestanden van elk maximaal 2 GB voor extra bronnen; sinds augustus 2021 vereist Google Play dat nieuwe apps worden gepubliceerd als .AAB (Android App Bundles), die tijdens de installatie apparaat-geoptimaliseerde split-APK's genereren in plaats van één enkel monolithisch pakket te verzenden.
Structuur van een APK-bestand
De structuur van APK-bestanden is gebaseerd op het JAR-archief - ze kunnen de volgende submappen en bestanden bevatten:
res- met een beschrijving van de bronnen in een niet-gecompileerde vorm,lib- bevat gecompileerde bronnen en applicatiebibliotheken, onderverdeeld naar verschillende computerplatforms (bijv.arm64-v8a,x86_64),META-INF- met bestanden die informatie over het pakket bevatten, bijvoorbeeld hetMANIFEST.MF-bestand of certificaten,assets- bevat verschillende bronnen die door de app worden gebruikt,classes.dex- gecompileerde Dalvik/ART-bytecode uitgevoerd door de Android-runtime,AndroidManifest.xml- binair gecodeerd manifest waarin de machtigingen, componenten en SDK-vereisten van de app worden gedeclareerd,resources.arsc- vooraf gecompileerde brontabel die ID's koppelt aan strings, lay-outs en drawables.
Android Package-bestanden worden gebruikt om programma's te maken en te distribueren voor mobiele platforms die op het Android-systeem draaien. De inhoud van .apk-bestanden kan worden uitgepakt met de meeste decompressieprogramma's die ZIP-compressie ondersteunen, of worden geïnspecteerd door het bestand simpelweg te hernoemen naar .zip. Om de integriteit te behouden, worden pakketten beschermd door APK Signature Scheme v2/v3 (en v4 voor incrementele updates), waarbij de installatie wordt geweigerd als de handtekening niet overeenkomt. Het installeren van .apk-pakketten van buiten de Play Store is standaard niet toegestaan - gebruikers moeten de machtiging Onbekende apps installeren inschakelen in de Android-instellingen, of het pakket pushen via adb install app.apk. Apps die te groot zijn voor een enkele .apk kunnen worden gedistribueerd als .XAPK, die een basis-APK bundelt met een of meer split-APK's in een enkel archief.
Beveiliging & veiligheid
RISICO: HIGHAPK is de belangrijkste vector voor Android-malware: sideloading omzeilt de scans van Google Play Protect. Risicochecklist voor gebruikers: installeer alleen uit vertrouwde bronnen (Google Play, F-Droid, APKMirror - die handtekeningen verifieert tegen die van de ontwikkelaar), controleer of gevraagde machtigingen overeenkomen met het doel van de app, installeer nooit een APK die ongevraagd via chat/SMS is binnengekomen („smishing”-campagnes), en vergelijk de handtekening van de app bij het updaten. Met de truc om de extensie naar .zip te wijzigen, kunt u de inhoud inspecteren voordat u installeert.
Formaatdetails
in een notendopProgramma's die APK-bestanden openen
Technische details
diepe specificaties| Codering | Binair |
| Byte-volgorde | Little-endian |
| Container | ZIP-archief (ook geldig als JAR) |
| Compressie | DEFLATE per item; uitlijningsgevoelige items ongecomprimeerd opgeslagen (STORED-methode) en zipaligned |
| Ondertekening / integriteit | APK Signature Scheme v2/v3 (blok ingevoegd vóór ZIP central directory); v4 voor incrementele updates op het apparaat; installatie geweigerd bij handtekening-mismatch |
| Magic bytes | 50 4B 03 04 - standaard ZIP „PK” local-file header op offset 0; onderscheidt zich van gewone ZIP door aanwezigheid van AndroidManifest.xml en classes.dex |
| Interne bestanden | AndroidManifest.xml, classes.dex (+ classes2.dex …), resources.arsc, res/, lib/, assets/, META-INF/ |
| Bytecode | Dalvik Executable (DEX) in classes.dex - gecompileerd uit Java/Kotlin-broncode, uitgevoerd door ART (Android Runtime) |
| Uitlijning | zipalign dwingt 4-byte grens af voor ongecomprimeerde items; Android 15+ richt zich op 16 KB pagina-uitlijning |
| Manifest-formaat | Binair gecodeerde XML (AXML) die pakketnaam, machtigingen, Activity/Service/Provider-componenten, minSdkVersion en targetSdkVersion declareert |
| Native lib lay-out | lib/<ABI>/ submap per architectuur: arm64-v8a, armeabi-v7a, x86, x86_64 |
| Brontabel | resources.arsc - plat binair bestand dat integer-bron-ID's koppelt aan strings, lay-outs, drawables en configuratievarianten |
| Typische grootte | 2 MB - 1,5 GB; basis-app-APK's gewoonlijk 5-100 MB; games met gebundelde assets bereiken de bovenste grens |
| MIME-type | application/vnd.android.package-archive |
| Platform | Android (native); uitvoerbaar op Windows, Linux, macOS via emulators (BlueStacks, Android Studio AVD, Waydroid) |
| Uitgebracht | 2008 (Android 1.0) |
| Laatste versie | APK Signature Scheme v3 (Android 9, 2018); v4 incremental (Android 11, 2020) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | source.android.com |