AAB (Android App Bundle) — to format publikacji aplikacji na Androida, który zastąpił APK w Google Play od 2021 roku. W przeciwieństwie do APK, AAB nie jest plikiem instalacyjnym — to kontener, z którego Google Play dynamicznie generuje zoptymalizowane APK dla każdego urządzenia. Według danych Android Developers, 2026, format zmniejsza rozmiar pobieranej aplikacji średnio o 15% dzięki wykluczeniu nieużywanych zasobów.
Najważniejsze
AAB (Android App Bundle) — to format publikacji opracowany przez Google jako zamiennik APK do dystrybucji przez Google Play. Wewnątrz AAB — archiwum ZIP z rozszerzeniem .aab, zawierające skompilowany kod, zasoby i metadane. Kluczowa różnica: AAB nie jest instalowany bezpośrednio na urządzeniu.
Deweloper przesyła AAB do Google Play Console. Gdy użytkownik próbuje zainstalować aplikację, Google Play analizuje konfigurację urządzenia: gęstość ekranu (DPI), architekturę CPU, język i wersję Androida. Na podstawie tej analizy generowany jest minimalny APK, zawierający tylko niezbędne komponenty.
Google przedstawiło AAB w 2018 roku na konferencji I/O. Od sierpnia 2021 format stał się obowiązkowy dla wszystkich nowych aplikacji w Google Play. Istniejące aplikacje mogą nadal używać APK, ale nowe muszą być publikowane tylko w formacie AAB.
Różnica między AAB a APK jest fundamentalna: APK — to gotowy plik instalacyjny, gotowy do instalacji. AAB — to kontener z komponentami źródłowymi, wymagający przetworzenia.
| Parametr | APK | AAB |
|---|---|---|
| Typ | Plik instalacyjny | Kontener publikacyjny |
| Instalacja | Bezpośrednio na urządzeniu | Przez Google Play |
| Rozmiar | Pełne archiwum | Komponenty źródłowe |
| Moduły | Wszystko w jednym pliku | Oddzielne moduły |
| Podpis | Deweloper | Google Play |
| Dystrybucja | Dowolny kanał | Google Play |
APK nadaje się do dystrybucji poza Google Play — przez strony internetowe, e-mail lub korporacyjne systemy MDM. AAB jest powiązany z infrastrukturą Google Play i nie jest instalowany bezpośrednio. Do testowania AAB używa się narzędzia bundletool, które emuluje generowanie APK na lokalnej maszynie.
Wewnętrzna budowa AAB przypomina APK, ale zawiera dodatkowe katalogi i pliki do opisywania modułów i ich zależności.
| Plik/katalog | Przeznaczenie |
|---|---|
| base/ | Moduł bazowy: kod, zasoby, manifest |
| BundleConfig.pb | Konfiguracja pakietu w formacie protobuf |
| Bundle-metadata/ | Metadane o wersjach modułów |
| feature/ | Moduły dynamiczne (on-demand) |
| assets/ | Aktywa aplikacji |
| manifest/ | Manifesty każdego modułu |
Moduł base — obowiązkowy komponent AAB. Zawiera główny kod, zasoby i manifest aplikacji. Bez modułu base aplikacja nie może zostać zbudowana. Wszystkie pozostałe moduły są opcjonalne i podłączane przez Dynamic Delivery.
Konfiguracja AAB używa Protocol Buffers (protobuf) zamiast XML. Pliki .pb są bardziej kompaktowe i szybciej parsowane przez infrastrukturę serwerową Google. Narzędzie bundletool przekształca protobuf w czytelny format do debugowania.
Dynamic Delivery — kluczowa technologia, na której zbudowany jest AAB. Pozwala ona dostarczać użytkownikowi tylko te części aplikacji, które odpowiadają jego urządzeniu i językowi, a także ładować dodatkowe moduły na żądanie.
Install-time moduły są ładowane razem z bazowym APK podczas instalacji. Conditional moduły są dostarczane tylko po spełnieniu warunków — na przykład moduł z materiałami dla ekranów 4K. On-demand moduły są ładowane na żądanie użytkownika wewnątrz aplikacji.
Dla dużych zasobów (do 2 GB) używa się Play Asset Delivery zamiast plików OBB. PAD obsługuje te same trzy tryby dostarczania: install-time, fast-follow (zaraz po instalacji) i on-demand.
// Ładowanie modułu on-demand przez SplitInstallManager
val manager = SplitInstallManagerFactory
.create(context)
val request = SplitInstallRequest
.newBuilder()
.addModule("level_pack_3")
.build()
manager.startInstall(request)
.addOnSuccessListener {
Log.d("AAB", "Moduł zainstalowany")
}
Każdy moduł dynamiczny jest opisywany osobnym plikiem build.gradle z określeniem typu dostawy. Moduł może zawierać własne zasoby, kod i manifest, niezależne od bazowej aplikacji.
Budowa AAB jest wykonywana przez Android Gradle Plugin za pomocą zadania bundleRelease (lub bundleDebug). Wynik — plik .aab w katalogu build/outputs/bundle/.
Do budowy AAB nie są wymagane specjalne ustawienia — Android Gradle Plugin obsługuje pakiety domyślnie. Wystarczy wskazać zadanie bundle zamiast assemble.
// build.gradle.kts — budowa AAB z podpisem
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
// Zadanie: ./gradlew bundleRelease
Google udostępnia narzędzie bundletool do generowania APK z AAB na lokalnej maszynie. Polecenie `bundletool build-apks --bundle=app.aab --output=app.apks` tworzy zestaw APK do testowania na różnych konfiguracjach urządzeń.
bundletool umożliwia także rozpakowywanie AAB, wyświetlanie jego konfiguracji i sprawdzanie integralności podpisu przed przesłaniem do Google Play Console. Do debugowania używa się polecenia `bundletool dump manifest --bundle=app.aab`, które pokazuje manifest modułu bazowego.
Domyślnie AAB dzieli zasoby według trzech wymiarów: język (language), gęstość ekranu (density) i architektura CPU (abi). Deweloper może wyłączyć dowolny podział w build.gradle — na przykład jeśli aplikacja obsługuje tylko język angielski. Wyłączenie podziału oznacza, że zasoby dla wszystkich wariantów trafią do bazowego APK.
Resource optimisation — AAB automatycznie konwertuje PNG do WebP bez utraty jakości, kompresuje nieużywane zasoby i usuwa zduplikowane ciągi. Te optymalizacje są stosowane po stronie Google Play podczas generowania końcowego APK. W rezultacie użytkownik otrzymuje APK o 15–25% mniejszy niż pełne archiwum.
Proces publikacji AAB w Google Play Console różni się od APK tylko formatem przesyłanego pliku. Konsola przyjmuje .aab, sprawdza jego strukturę, podpis i konfigurację modułów, po czym generuje APK dla każdego typu urządzeń.
Przy przesyłaniu AAB Google Play przejmuje zarządzanie kluczami podpisu. Deweloper przesyła pakiet podpisany kluczem upload, a Google podpisuje ponownie wygenerowane APK swoim kluczem. Upraszcza to rotację kluczy i przywracanie dostępu w przypadku utraty keystore.
Google Play Console udostępnia wbudowany test AAB: można pobrać wygenerowany APK dla konkretnego urządzenia lub uruchomić testy wewnętrzne poprzez tracki Internal Testing, Closed Alpha i Open Beta.
Przejście na AAB może powodować problemy, szczególnie w projektach z dużą liczbą modułów dynamicznych lub złożoną konfiguracją zasobów.
Jeśli moduł dynamiczny odwołuje się do zasobów modułu bazowego z nieprawidłową nazwą, Google Play odrzuca AAB na etapie weryfikacji. Rozwiązanie — użycie kontroli lint przed budową i testowanie wszystkich modułów przez bundletool lokalnie.
Podział według języków może spowolnić uruchamianie aplikacji, jeśli zasoby dla bieżącej lokalizacji są ładowane dynamicznie. Zalecenie Google — nie dzielić języków, jeśli jest ich mniej niż 10, lub używać install-time dla najpopularniejszych.
Niektóre SDK (analityka, reklamy, mapy) wymagają dostępu do pełnego manifestu i zasobów. Sprawdzenie zgodności z AAB — obowiązkowy krok przed migracją. Większość dużych SDK (Firebase, Google Ads, Crashlytics) w pełni obsługuje AAB od 2022 roku. Do sprawdzenia zgodności używa się bundletool z flagą --validate, która emuluje serwerowe generowanie APK.
AAB używa versionCode z manifestu modułu bazowego. W przeciwieństwie do APK, AAB obsługuje także versionCode dla każdego modułu osobno — pozwala to aktualizować poszczególne części aplikacji bez pełnej reinstalacji. Dynamic Delivery śledzi zainstalowane moduły i dostarcza tylko zmienione komponenty przy aktualizacji przez Google Play.
Google Play Console udostępnia szczegółową analitykę dla każdego AAB: ile APK zostało wygenerowanych, które podziały były wykorzystywane, jaki jest średni rozmiar pobierania według urządzeń. Android Vitals pokazuje metryki wydajności wygenerowanych APK. Te dane pomagają optymalizować konfigurację podziałów i zmniejszać rozmiar pobierania dla różnych kategorii urządzeń.
Często zadawane pytania
Nie, AAB nie jest przeznaczony do bezpośredniej instalacji. Google Play przekształca go w APK dla konkretnego urządzenia. Do testowania na telefonie używa się bundletool, który generuje APK z AAB lokalnie.
Google Play generuje APK tylko z zasobami odpowiadającymi urządzeniu użytkownika: jedna gęstość ekranu, jedna architektura CPU, jeden język. Zasoby dla innych konfiguracji nie są dołączane, co oszczędza 15–30% ruchu przy pobieraniu.
Nie, istniejące aplikacje mogą nadal publikować APK. Wymóg AAB dotyczy tylko nowych aplikacji. Google zaleca, ale nie wymaga aktualizacji istniejących projektów do AAB.
Zmień zadanie budowy z assembleRelease na bundleRelease, sprawdź zgodność wszystkich SDK, skonfiguruj App Signing w Google Play Console i prześlij pierwszy AAB przez istniejący track.
Tak, AAB zawiera biblioteki natywne w modułach. Google Play dostarcza tylko pliki .so dla architektury CPU urządzenia. Jest to szczególnie ważne dla gier na Unity i Unreal Engine z dużymi kompilacjami natywnymi.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również