AAB (Android App Bundle) — az Android-alkalmazások közzétételi formátuma, amely 2021-től felváltotta az APK-t a Google Play-ben. Az APK-tól eltérően az AAB nem telepítőfájl — ez egy konténer, amelyből a Google Play dinamikusan optimalizált APK-kat generál minden egyes eszközhöz. A Android Developers, 2026 adatai szerint a formátum átlagosan 15%-kal csökkenti a letöltött alkalmazás méretét a nem használt erőforrások kizárásával.
Főbb pontok
AAB (Android App Bundle) — a Google által kifejlesztett közzétételi formátum az APK helyettesítésére a Google Play-en keresztüli terjesztéshez. Az AAB belsejében egy .aab kiterjesztésű ZIP-archívum található, amely lefordított kódot, erőforrásokat és metaadatokat tartalmaz. A legfontosabb különbség: az AAB nem telepíthető közvetlenül az eszközre.
A fejlesztő feltölti az AAB-t a Google Play Console-ba. Amikor a felhasználó megpróbálja telepíteni az alkalmazást, a Google Play elemzi az eszköz konfigurációját: képernyő sűrűség (DPI), CPU-architektúra, nyelv és Android-verzió. Az elemzés alapján egy minimális APK jön létre, amely csak a szükséges összetevőket tartalmazza.
A Google 2018-ban mutatta be az AAB-t az I/O konferencián. 2021 augusztusától a formátum kötelezővé vált minden új alkalmazás számára a Google Play-ben. A meglévő alkalmazások továbbra is használhatják az APK-t, de az újakat csak AAB formátumban lehet közzétenni.
A különbség az AAB és az APK között alapvető: az APK egy teljes telepítőfájl, készen a telepítésre. Az AAB egy konténer forráskomponensekkel, amely feldolgozást igényel.
| Paraméter | APK | AAB |
|---|---|---|
| Típus | Telepítőfájl | Közzétételi konténer |
| Telepítés | Közvetlenül az eszközre | Google Play-en keresztül |
| Méret | Teljes archívum | Forráskomponensek |
| Modulok | Mind egy fájlban | Külön modulok |
| Aláírás | Fejlesztő | Google Play |
| Terjesztés | Bármely csatorna | Google Play |
APK alkalmas a Google Play-en kívüli terjesztésre — weboldalakon, e-mailben vagy vállalati MDM-rendszereken keresztül. Az AAB a Google Play infrastruktúrájához kötött, és nem telepíthető közvetlenül. Az AAB teszteléséhez a bundletool eszközt használják, amely az APK-generálást emulálja a helyi gépen.
Az AAB belső szerkezete hasonlít az APK-hoz, de további könyvtárakat és fájlokat tartalmaz a modulok és függőségeik leírásához.
| Fájl/könyvtár | Rendeltetés |
|---|---|
| base/ | Alapmodul: kód, erőforrások, manifest |
| BundleConfig.pb | A csomag konfigurációja protobuf formátumban |
| Bundle-metadata/ | Metaadatok a modulverziókról |
| feature/ | Dinamikus modulok (on-demand) |
| assets/ | Alkalmazás eszközei |
| manifest/ | Az egyes modulok manifestjei |
A base modul — az AAB kötelező összetevője. Tartalmazza az alkalmazás fő kódját, erőforrásait és manifestjét. Base modul nélkül az alkalmazás nem építhető fel. Az összes többi modul opcionális, és a Dynamic Delivery-n keresztül csatlakozik.
Az AAB konfigurációja XML helyett Protocol Buffers-t (protobuf) használ. A .pb fájlok kompaktabbak, és a Google szerverinfrastruktúrája gyorsabban elemzi őket. A bundletool eszköz a protobuf-ot olvasható formátumba konvertálja a hibakereséshez.
Dynamic Delivery — a kulcstechnológia, amelyre az AAB épül. Lehetővé teszi, hogy a felhasználó csak azokat az alkalmazásrészeket kapja meg, amelyek megfelelnek az eszközének és nyelvének, valamint további modulok igény szerinti betöltését.
Az Install-time modulok a telepítés során töltődnek be az alap APK-val együtt. A Conditional modulok csak feltételek teljesülése esetén kerülnek kézbesítésre — például egy 4K képernyőkhöz tartozó anyagokat tartalmazó modul. Az On-demand modulok a felhasználó kérésére töltődnek be az alkalmazáson belül.
Nagy erőforrásokhoz (akár 2 GB) a Play Asset Delivery használatos az OBB-fájlok helyett. A PAD ugyanazt a három kézbesítési módot támogatja: install-time, fast-follow (közvetlenül a telepítés után) és on-demand.
// On-demand modul betöltése SplitInstallManager segítségével
val manager = SplitInstallManagerFactory
.create(context)
val request = SplitInstallRequest
.newBuilder()
.addModule("level_pack_3")
.build()
manager.startInstall(request)
.addOnSuccessListener {
Log.d("AAB", "Modul telepítve")
}
Minden dinamikus modult egy külön build.gradle fájl ír le a szállítási típus megadásával. A modul rendelkezhet saját erőforrásokkal, kóddal és manifesttel, függetlenül az alapalkalmazástól.
Az AAB építése az Android Gradle Plugin-en keresztül történik a bundleRelease (vagy bundleDebug) feladattal. Az eredmény — egy .aab fájl a build/outputs/bundle/ könyvtárban.
Az AAB építéséhez nincs szükség speciális beállításokra — az Android Gradle Plugin alapértelmezés szerint támogatja a csomagokat. Elég a bundle feladatot megadni az assemble helyett.
// build.gradle.kts — AAB építése aláírással
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
// Feladat: ./gradlew bundleRelease
A Google biztosítja a bundletool eszközt az APK-k AAB-ból történő előállításához helyi gépen. A `bundletool build-apks --bundle=app.aab --output=app.apks` parancs APK-készletet hoz létre különböző eszközkonfigurációk teszteléséhez.
bundletool képes továbbá kicsomagolni az AAB-t, megjeleníteni a konfigurációját, és ellenőrizni az aláírás integritását a Google Play Console-ba történő feltöltés előtt. Hibakereséshez a `bundletool dump manifest --bundle=app.aab` parancs használatos, amely az alapmodul manifestjét jeleníti meg.
Alapértelmezés szerint az AAB három dimenzió mentén osztja fel az erőforrásokat: nyelv (language), képernyő sűrűség (density) és CPU-architektúra (abi). A fejlesztő bármely felosztást letilthatja a build.gradle-ben — például ha az alkalmazás csak angol nyelvet támogat. A felosztás letiltása azt jelenti, hogy az összes variáns erőforrásai az alap APK-ba kerülnek.
Resource optimisation — az AAB automatikusan konvertálja a PNG-t WebP-vé minőségveszteség nélkül, tömöríti a nem használt erőforrásokat és eltávolítja a duplikált karakterláncokat. Ezeket az optimalizálásokat a Google Play oldalán alkalmazzák a végső APK generálásakor. Ennek eredményeként a felhasználó 15–25%-kal kisebb APK-t kap, mint a teljes archívum.
A közzététel folyamata a Google Play Console-ban csak a feltöltött fájl formátumában különbözik az APK-tól. A konzol elfogadja a .aab fájlt, ellenőrzi annak szerkezetét, aláírását és modulkonfigurációját, majd APK-t generál minden eszköztípushoz.
Az AAB feltöltésekor a Google Play átveszi az aláírási kulcsok kezelését. A fejlesztő feltölti a csomagot az upload kulccsal aláírva, a Google pedig újra aláírja a generált APK-kat a saját kulcsával. Ez leegyszerűsíti a kulcsok rotációját és a hozzáférés helyreállítását a keystore elvesztése esetén.
A Google Play Console beépített tesztet biztosít az AAB-hoz: letölthető a generált APK egy adott eszközhöz, vagy belső tesztelés indítható az Internal Testing, Closed Alpha és Open Beta trackeken keresztül.
Az AAB-ra való áttérés problémákat okozhat, különösen a sok dinamikus modullal vagy összetett erőforrás-konfigurációval rendelkező projektekben.
Ha egy dinamikus modul hibás néven hivatkozik az alapmodul erőforrásaira, a Google Play elutasítja az AAB-t az ellenőrzési szakaszban. Megoldás — lint ellenőrzés használata az építés előtt, és az összes modul helyi tesztelése bundletool segítségével.
A nyelvek szerinti felosztás lelassíthatja az alkalmazás indítását, ha az aktuális lokalizáció erőforrásai dinamikusan töltődnek be. Google ajánlása — ne ossza fel a nyelveket, ha kevesebb mint 10 van, vagy használjon install-time-ot a legnépszerűbbekhez.
Egyes SDK-k (analitika, hirdetések, térképek) hozzáférést igényelnek a teljes manifesthez és erőforrásokhoz. A kompatibilitás ellenőrzése az AAB-val kötelező lépés a migráció előtt. A legtöbb nagy SDK (Firebase, Google Ads, Crashlytics) teljes mértékben támogatja az AAB-t 2022 óta. A kompatibilitás ellenőrzéséhez a bundletool --validate jelzővel használatos, amely a szerveroldali APK-generálást emulálja.
Az AAB az alapmodul manifestjéből származó versionCode-ot használja. Az APK-tól eltérően az AAB külön versionCode-ot is támogat minden modulhoz — ez lehetővé teszi az alkalmazás egyes részeinek frissítését teljes újratelepítés nélkül. A Dynamic Delivery nyomon követi a telepített modulokat, és frissítéskor csak a megváltozott összetevőket szállítja a Google Play-en keresztül.
A Google Play Console részletes analitikát biztosít minden AAB-hoz: hány APK került generálásra, mely felosztások voltak igénybe véve, mekkora az átlagos letöltési méret eszközönként. Android Vitals mutatja a generált APK-k teljesítménymutatóit. Ezek az adatok segítenek optimalizálni a felosztások konfigurációját és csökkenteni a letöltési méretet a különböző eszközkategóriák számára.
Gyakran Ismételt Kérdések
Nem, az AAB nem közvetlen telepítésre szolgál. A Google Play az adott eszközhöz APK-vá alakítja. Telefonos teszteléshez a bundletool használatos, amely helyileg generál APK-t az AAB-ból.
A Google Play csak a felhasználó eszközének megfelelő erőforrásokkal generál APK-t: egy képernyő sűrűség, egy CPU-architektúra, egy nyelv. A más konfigurációkhoz tartozó erőforrások nem kerülnek bele, ami 15–30% forgalommegtakarítást eredményez a letöltéskor.
Nem, a meglévő alkalmazások továbbra is közzétehetnek APK-t. Az AAB követelmény csak az új alkalmazásokra vonatkozik. A Google ajánlja, de nem követeli meg a meglévő projektek AAB-ra frissítését.
Változtassa meg az építési feladatot assembleRelease-ről bundleRelease-re, ellenőrizze az összes SDK kompatibilitását, konfigurálja az App Signing-et a Google Play Console-ban, és töltse fel az első AAB-t a meglévő track-en keresztül.
Igen, az AAB natív könyvtárakat tartalmaz a modulokban. A Google Play csak az eszköz CPU-architektúrájának megfelelő .so fájlokat szállítja. Ez különösen fontos a Unity és Unreal Engine játékoknál, nagy natív fordításokkal.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is