AAB (Android App Bundle) — is een publicatieformaat voor Android-applicaties dat APK in Google Play heeft vervangen sinds 2021. In tegenstelling tot APK is AAB geen installatiebestand — het is een container waaruit Google Play dynamisch geoptimaliseerde APK's voor elk apparaat genereert. Volgens gegevens van Android Developers, 2026 verkleint het formaat de gemiddelde downloadgrootte van de applicatie met 15% door ongebruikte bronnen uit te sluiten.
Belangrijkste punten
AAB (Android App Bundle) — is een publicatieformaat ontwikkeld door Google als vervanging voor APK voor distributie via Google Play. Binnenin AAB bevindt zich een ZIP-archief met de extensie .aab, met gecompileerde code, bronnen en metadata. Het belangrijkste verschil: AAB wordt niet rechtstreeks op het apparaat geïnstalleerd.
De ontwikkelaar uploadt AAB naar Google Play Console. Wanneer een gebruiker de app probeert te installeren, analyseert Google Play de apparaatconfiguratie: schermdichtheid (DPI), CPU-architectuur, taal en Android-versie. Op basis van deze analyse wordt een minimale APK gegenereerd die alleen de noodzakelijke componenten bevat.
Google introduceerde AAB in 2018 op de I/O-conferentie. Sinds augustus 2021 is het formaat verplicht voor alle nieuwe applicaties in Google Play. Bestaande applicaties kunnen APK blijven gebruiken, maar nieuwe moeten alleen in AAB-formaat worden gepubliceerd.
Het verschil tussen AAB en APK is fundamenteel: APK is een volledig installatiebestand, klaar voor installatie. AAB is een container met broncomponenten die verwerking vereist.
| Parameter | APK | AAB |
|---|---|---|
| Type | Installatiebestand | Publicatiecontainer |
| Installatie | Rechtstreeks op apparaat | Via Google Play |
| Grootte | Volledig archief | Broncomponenten |
| Modules | Alles in één bestand | Aparte modules |
| Handtekening | Ontwikkelaar | Google Play |
| Distributie | Elk kanaal | Google Play |
APK is geschikt voor distributie buiten Google Play — via websites, e-mail of bedrijfs-MDM-systemen. AAB is gebonden aan de Google Play-infrastructuur en wordt niet rechtstreeks geïnstalleerd. Voor het testen van AAB wordt het hulpmiddel bundletool gebruikt, dat het genereren van APK's op de lokale machine emuleert.
De interne structuur van AAB lijkt op APK, maar bevat extra mappen en bestanden voor het beschrijven van modules en hun afhankelijkheden.
| Bestand/map | Doel |
|---|---|
| base/ | Basismodule: code, bronnen, manifest |
| BundleConfig.pb | Configuratie van de bundle in protobuf-formaat |
| Bundle-metadata/ | Metadata over moduleversies |
| feature/ | Dynamische modules (on-demand) |
| assets/ | Applicatie-activa |
| manifest/ | Manifesten van elke module |
De base-module — is een verplicht onderdeel van AAB. Het bevat de hoofdcode, bronnen en het manifest van de applicatie. Zonder de base-module kan de applicatie niet worden gebouwd. Alle andere modules zijn optioneel en worden via Dynamic Delivery aangesloten.
AAB-configuratie gebruikt Protocol Buffers (protobuf) in plaats van XML. .pb-bestanden zijn compacter en worden sneller geparseerd door de serverinfrastructuur van Google. Het hulpmiddel bundletool converteert protobuf naar een leesbaar formaat voor foutopsporing.
Dynamic Delivery — de belangrijkste technologie waarop AAB is gebouwd. Hiermee kunnen alleen die delen van de applicatie aan de gebruiker worden geleverd die overeenkomen met zijn apparaat en taal, en kunnen extra modules op verzoek worden geladen.
Install-time modules worden samen met de basis-APK geladen tijdens de installatie. Conditional modules worden alleen geleverd als aan de voorwaarden wordt voldaan — bijvoorbeeld een module met materialen voor 4K-schermen. On-demand modules worden op verzoek van de gebruiker in de applicatie geladen.
Voor grote bronnen (tot 2 GB) wordt Play Asset Delivery gebruikt in plaats van OBB-bestanden. PAD ondersteunt dezelfde drie leveringsmodi: install-time, fast-follow (direct na installatie) en on-demand.
// Laden van on-demand module via SplitInstallManager
val manager = SplitInstallManagerFactory
.create(context)
val request = SplitInstallRequest
.newBuilder()
.addModule("level_pack_3")
.build()
manager.startInstall(request)
.addOnSuccessListener {
Log.d("AAB", "Module geïnstalleerd")
}
Elke dynamische module wordt beschreven door een apart build.gradle-bestand met specificatie van het leveringstype. De module kan eigen bronnen, code en manifest bevatten, onafhankelijk van de basisapplicatie.
Het bouwen van AAB gebeurt via Android Gradle Plugin met de taak bundleRelease (of bundleDebug). Het resultaat — een .aab-bestand in de map build/outputs/bundle/.
Voor het bouwen van AAB zijn geen speciale instellingen nodig — Android Gradle Plugin ondersteunt bundles standaard. Het volstaat om de taak bundle te gebruiken in plaats van assemble.
// build.gradle.kts — bouwen van AAB met handtekening
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
// Taak: ./gradlew bundleRelease
Google biedt het hulpmiddel bundletool voor het genereren van APK's uit AAB op de lokale machine. De opdracht `bundletool build-apks --bundle=app.aab --output=app.apks` maakt een set APK's voor testen op verschillende apparaatconfiguraties.
bundletool kan ook AAB uitpakken, de configuratie ervan weergeven en de integriteit van de handtekening controleren vóór upload naar Google Play Console. Voor foutopsporing wordt de opdracht `bundletool dump manifest --bundle=app.aab` gebruikt, die het manifest van de basismodule toont.
Standaard splitst AAB bronnen op drie dimensies: taal (language), schermdichtheid (density) en CPU-architectuur (abi). De ontwikkelaar kan elke splitsing uitschakelen in build.gradle — bijvoorbeeld als de applicatie alleen Engels ondersteunt. Het uitschakelen van een splitsing betekent dat bronnen voor alle varianten in de basis-APK terechtkomen.
Resource optimisation — AAB converteert automatisch PNG naar WebP zonder kwaliteitsverlies, comprimeert ongebruikte bronnen en verwijdert dubbele tekenreeksen. Deze optimalisaties worden aan de kant van Google Play toegepast bij het genereren van de uiteindelijke APK. Als resultaat ontvangt de gebruiker een APK die 15–25% kleiner is dan het volledige archief.
Het proces van het publiceren van AAB in Google Play Console verschilt alleen van APK in het formaat van het geüploade bestand. De console accepteert .aab, controleert de structuur, handtekening en moduleconfiguratie, waarna het APK's voor elk apparaattype genereert.
Bij het uploaden van AAB neemt Google Play het beheer van de handtekeningsleutels over. De ontwikkelaar uploadt het pakket ondertekend met de upload-sleutel, en Google ondertekent de gegenereerde APK's opnieuw met zijn eigen sleutel. Dit vereenvoudigt sleutelrotatie en herstel van toegang bij verlies van de keystore.
Google Play Console biedt een ingebouwde test voor AAB: men kan de gegenereerde APK voor een specifiek apparaat downloaden of intern testen uitvoeren via de tracks Internal Testing, Closed Alpha en Open Beta.
De overstap naar AAB kan problemen veroorzaken, vooral in projecten met veel dynamische modules of complexe bronconfiguratie.
Als een dynamische module verwijst naar bronnen van de basismodule met een verkeerde naam, wijst Google Play de AAB af in de verificatiefase. Oplossing — gebruik lint-controle vóór het bouwen en test alle modules lokaal via bundletool.
Splitsing op taal kan het opstarten van de applicatie vertragen als bronnen voor de huidige lokalisatie dynamisch worden geladen. Aanbeveling van Google — splits talen niet als er minder dan 10 zijn, of gebruik install-time voor de meest populaire.
Sommige SDK's (analyse, advertenties, kaarten) vereisen toegang tot het volledige manifest en bronnen. Compatibiliteitscontrole met AAB is een verplichte stap vóór migratie. De meeste grote SDK's (Firebase, Google Ads, Crashlytics) ondersteunen AAB volledig sinds 2022. Voor compatibiliteitscontrole wordt bundletool gebruikt met de vlag --validate, die server-side APK-generatie emuleert.
AAB gebruikt versionCode uit het manifest van de basismodule. In tegenstelling tot APK ondersteunt AAB ook aparte versionCode voor elke module — dit maakt het mogelijk om afzonderlijke delen van de applicatie bij te werken zonder volledige herinstallatie. Dynamic Delivery houdt geïnstalleerde modules bij en levert alleen gewijzigde componenten bij updates via Google Play.
Google Play Console biedt gedetailleerde analyses voor elke AAB: hoeveel APK's zijn gegenereerd, welke splitsingen werden gebruikt, wat is de gemiddelde downloadgrootte per apparaat. Android Vitals toont prestaties van gegenereerde APK's. Deze gegevens helpen bij het optimaliseren van de splitsingsconfiguratie en het verkleinen van de downloadgrootte voor verschillende apparaatcategorieën.
Veelgestelde vragen
Nee, AAB is niet bedoeld voor directe installatie. Google Play zet het om in APK voor het specifieke apparaat. Voor testen op de telefoon wordt bundletool gebruikt, dat lokaal APK uit AAB genereert.
Google Play genereert APK alleen met bronnen die overeenkomen met het apparaat van de gebruiker: één schermdichtheid, één CPU-architectuur, één taal. Bronnen voor andere configuraties worden niet opgenomen, wat 15–30% verkeer bespaart bij het downloaden.
Nee, bestaande applicaties kunnen APK blijven publiceren. De AAB-vereiste geldt alleen voor nieuwe applicaties. Google raadt aan maar vereist niet dat bestaande projecten naar AAB worden bijgewerkt.
Wijzig de bouwtaak van assembleRelease naar bundleRelease, controleer de compatibiliteit van alle SDK's, configureer App Signing in Google Play Console en upload de eerste AAB via de bestaande track.
Ja, AAB bevat native bibliotheken in modules. Google Play levert alleen .so-bestanden voor de CPU-architectuur van het apparaat. Dit is vooral belangrijk voor games op Unity en Unreal Engine met grote native compilaties.
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