APK (Android Package Kit) is een archiefbestandsformaat dat wordt gebruikt voor het distribueren en installeren van apps op Android. Elke app die een gebruiker downloadt uit Google Play of handmatig installeert, is een APK-bestand. Volgens Android Open Source Project, 2026 is het formaat gebaseerd op de ZIP-standaard en bevat het gecompileerde code, bronnen, manifest en een digitale handtekening.
Belangrijkste punten
APK (Android Package Kit) is een archiefformaat waarin een Android-app wordt verpakt voor distributie. Technisch gezien is APK een ZIP-archief met een bepaalde structuur dat alle componenten bevat die nodig zijn om de app op een apparaat te laten werken.
Het APK-formaat verscheen samen met de eerste versie van Android in 2008. Als basis werd de JAR-standaard (Java Archive) genomen, die op zijn beurt op ZIP is gebaseerd. Deze overerving zorgde voor compatibiliteit met bestaande archiefhulpmiddelen — elke archiveringsprogramma opent APK als een gewone ZIP.
Google Play is het belangrijkste distributiekanaal voor APK, maar het formaat wordt ook in andere scenario's gebruikt: directe installatie via de browser (sideloading), bedrijfsapp-winkels, testen op ontwikkelaarsapparaten en installatie in emulators. Volgens Statista vindt ongeveer 15% van de Android-app-installaties in 2025 buiten Google Play plaats.
De interne structuur van APK is strikt gereguleerd: elke app moet bepaalde bestanden en mappen bevatten. Overtreding van de structuur leidt tot een installatiefout.
| Bestand/map | Doel |
|---|---|
| AndroidManifest.xml | App-manifest: machtigingen, componenten, SDK-versie |
| classes.dex | Gecompileerde DEX-bytecode (kan meerdere bestanden zijn) |
| resources.arsc | Gecompileerde bronnen: strings, stijlen, lay-outs |
| res/ | Niet-gecompileerde bronnen: afbeeldingen, lettertypen, XML |
| lib/ | Native bibliotheken (.so) voor verschillende CPU-architecturen |
| META-INF/ | Metadata: certificaten, bestandslijsten, hashes |
Het manifest is het centrale configuratiebestand van de app. In gecompileerde binaire vorm (niet in leesbare XML) bevat het de pakketnaam, versie, lijst van activiteiten, services, machtigingen en SDK-vereisten. Zonder manifest weet het systeem niet hoe het de app moet starten.
De broncode in Java of Kotlin wordt gecompileerd naar DEX-bestanden (Dalvik Executable). Het hoofdbestand heet classes.dex. Als de bytecode de limiet van 64K methoden overschrijdt, worden classes2.dex, classes3.dex enzovoort gemaakt — het multidex-mechanisme.
De map lib/ bevat gecompileerde C/C++-bibliotheken voor verschillende architecturen: armeabi-v7a, arm64-v8a, x86, x86_64. Elke bibliotheek heeft de extensie .so (Shared Object). Moderne apps leveren meestal alleen arm64-v8a.
Het bouwen van een APK is een meerstappenproces dat wordt geautomatiseerd door het buildsysteem Gradle en de Android Gradle Plugin. Elke stap transformeert bronbestanden in componenten van het uiteindelijke archief.
De broncode wordt gecompileerd naar Java-bytecode (.class), vervolgens geconverteerd naar DEX via de tool d8 (voorheen dx). Bronnen worden gecompileerd naar binair formaat via AAPT2. Alle componenten worden verpakt in een ZIP-archief en ondertekend met een digitale handtekening.
// build.gradle.kts — basisconfiguratie van APK-bouw
android {
defaultConfig {
applicationId = "com.example.app"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt")
)
}
}
}
ProGuard of R8 verduisteren de code, verwijderen ongebruikte klassen en methoden, waardoor de APK-grootte afneemt. Zonder verduistering bevat APK volledige klassennamen, wat decompilatie vergemakkelijkt. R8 voert ook bytecode-optimalisatie uit op DEX-niveau.
Een digitale handtekening is een verplicht onderdeel van APK. Android installeert geen ongetekende pakketten. De handtekening garandeert dat de app niet is gewijzigd na publicatie en bepaalt aan wie het pakket toebehoort.
v1 (JAR signing) — het originele schema gebaseerd op het ondertekenen van elk bestand in het archief. Kwetsbaarheid: bestanden kunnen uit META-INF worden verwijderd zonder detectie. v2 (APK Signature Scheme v2) verscheen in Android 7.0 — het hele archief wordt ondertekend, wat wijzigingen voorkomt. v3 ondersteunt sleutelrotatie en v4 ondersteunt incrementele installatie.
Google Play vereist v2 of hoger voor alle nieuwe apps sinds augustus 2021. Het wordt aanbevolen om APK met alle drie schema's te ondertekenen voor maximale compatibiliteit met verschillende Android-versies.
In build.gradle worden keystore, wachtwoord en alias opgegeven. De privésleutel wordt opgeslagen in een versleutelde opslagplaats. Voor publicatie in Google Play wordt App Signing gebruikt — Google bewaart de privésleutel en de ontwikkelaar uploadt de ondertekende APK.
Het installeren van APK gebeurt via de systeempakketbeheerder PackageManager. Het proces omvat handtekeningverificatie, het parseren van het manifest, het kopiëren van bestanden en DEX-optimalisatie via dex2oat.
De tool ADB (Android Debug Bridge) maakt het mogelijk APK rechtstreeks vanaf de ontwikkelaarscomputer te installeren. Het commando `adb install app.apk` kopieert het bestand naar het apparaat en start de installatie. De vlag -r herinstalleert de app met behoud van gegevens, de vlag -d staat installatie toe van een versie met een lagere versionCode.
Sinds Android 8.0 vereist het systeem voor elke app afzonderlijk bevestiging van installatie uit onbekende bronnen. Android 14 heeft de controle versterkt: installatie van APK via externe winkels is alleen mogelijk na expliciete toestemming in de instellingen. Google Play Protect scant elke APK bij installatie op schadelijke code.
Voor apps groter dan 150 MB ondersteunt Google Play Expansion Files — aanvullende OBB-pakketten tot 2 GB elk. OBB-bestanden maken geen deel uit van de APK, maar worden na installatie apart gedownload. Het formaat ondersteunt twee typen: main (basisbronnen) en patch (updates).
// APK-versie controleren via PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
"com.example.app",
PackageManager.GET_ACTIVITIES
)
Log.d("APK", "Versie: ${info.versionName}")
Op apparaten met ART (Android Runtime) wordt na installatie compilatie van DEX naar native code gestart via dex2oat. Het proces kan enkele seconden duren en vergroot de grootte van de geïnstalleerde app, maar versnelt het opstarten ervan.
AAB (Android App Bundle) is een formaat dat Google promoot als alternatief voor APK voor publicatie in Google Play. Het verschil is fundamenteel: AAB wordt niet direct geïnstalleerd, maar dient als container waaruit Google Play geoptimaliseerde APK's genereert.
| Parameter | APK | AAB |
|---|---|---|
| Downloadgrootte | Volledig archief | Alleen benodigde componenten |
| Directe installatie | Ja | Nee (APK genereren) |
| Distributie | Elk kanaal | Google Play |
| Versiebeheer | Versie in manifest | Dynamic Delivery |
| Publicatie | Google Play + externe | Google Play |
Google Play vereist AAB sinds augustus 2021 voor nieuwe apps. APK blijft echter het belangrijkste formaat voor distributie buiten Google Play — via websites, bedrijfswinkels en testen.
Ontwikkelaars komen regelmatig problemen tegen bij het bouwen en installeren van APK's. De meeste hebben te maken met versie-incompatibiliteit, handtekening of archiefstructuur.
De fout treedt op bij het proberen te installeren van een APK met dezelfde pakketnaam maar een andere handtekening. Android staat herinstallatie van een app met een gewijzigd certificaat niet toe. Oplossing — verwijder de oude versie voor installatie.
Als het project de limiet van 65536 methoden overschrijdt, mislukt de build met een dex-fout. Oplossing — schakel multidex in build.gradle in of optimaliseer afhankelijkheden door ongebruikte bibliotheken te verwijderen.
Google Play beperkt de APK-grootte tot 150 MB. Voor grotere apps worden APK Expansion Files (OBB) gebruikt. Het wordt aanbevolen de grootte te verminderen via R8, WebP-afbeeldingen en Android App Bundle. Elke extra megabyte heeft een negatieve invloed op de installatieconversie: volgens Google vermindert elke 10 MB de conversie met 1%.
APK kan worden gedecompileerd met tools als JADX, APKTool of Bytecode Viewer. JADX herstelt de originele Java-code uit DEX, waardoor apps zonder verduistering volledig leesbaar zijn. Voor codebescherming wordt ProGuard/R8 gebruikt, die klassen, methoden en velden hernoemt naar korte onleesbare namen en debug-informatie verwijdert.
Voor analyse van APK-inhoud worden Android Studio Profiler, apkanalyzer (CLI-tool uit Android SDK) en externe hulpprogramma's gebruikt. apkanalyzer toont de grootte van elk APK-onderdeel: DEX, bronnen, native bibliotheken en handtekening. Analyse helpt te identificeren welke afhankelijkheden de meeste ruimte innemen en een beslissing te nemen over vervanging of verwijdering.
Veelgestelde vragen
Ja, elk archiveringsprogramma (7-Zip, WinRAR) opent APK als ZIP. De inhoud kan worden bekeken, maar voor decompilatie van de code zijn speciale tools nodig — JADX of apktool.
XAPK is een niet-officieel formaat dat door sommige externe winkels wordt gebruikt. Het combineert APK met extra OBB-bestanden in één archief. Google Play en de officiële Android-documentatie gebruiken XAPK niet.
Android Studio ondertekent automatisch de debug-build met debug.keystore bij het starten op het apparaat. Voor distributie van een testversie aan het team is een handtekening met een releasesleutel of het gebruik van App Signing vereist.
Gebruik R8 voor verduistering en minimalisatie, converteer afbeeldingen naar WebP, verwijder ongebruikte bronnen via Lint, en schakel voor grote projecten over naar Android App Bundle met Dynamic Delivery.
Nee — elke wijziging van APK na ondertekening verbreekt de digitale handtekening. Voor een update moet een nieuwe versie met verhoogde versionCode worden gebouwd en ondertekend.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook