AAB (Android App Bundle) — е формат за публикуване на Android приложения, който замени APK в Google Play от 2021 г. За разлика от APK, AAB не е инсталационен файл — това е контейнер, от който Google Play динамично генерира оптимизирани APK за всяко устройство. Според данни на Android Developers, 2026, форматът намалява размера на изтегленото приложение средно с 15% чрез изключване на неизползвани ресурси.
Основни точки
AAB (Android App Bundle) — е формат за публикуване, разработен от Google като заместител на APK за разпространение чрез Google Play. Вътре в AAB се намира ZIP архив с разширение .aab, съдържащ компилиран код, ресурси и метаданни. Ключова разлика: AAB не се инсталира директно на устройството.
Разработчикът качва AAB в Google Play Console. Когато потребител се опита да инсталира приложението, Google Play анализира конфигурацията на устройството: плътност на екрана (DPI), архитектура на CPU, език и версия на Android. Въз основа на този анализ се генерира минимален APK, съдържащ само необходимите компоненти.
Google представи AAB през 2018 г. на конференцията I/O. От август 2021 г. форматът стана задължителен за всички нови приложения в Google Play. Съществуващите приложения могат да продължат да използват APK, но новите трябва да се публикуват само във формат AAB.
Разликата между AAB и APK е фундаментална: APK е готов инсталационен файл, готов за инсталиране. AAB е контейнер с изходни компоненти, който изисква обработка.
| Параметър | APK | AAB |
|---|---|---|
| Тип | Инсталационен файл | Публикационен контейнер |
| Инсталиране | Директно на устройството | Чрез Google Play |
| Размер | Пълен архив | Изходни компоненти |
| Модули | Всичко в един файл | Отделни модули |
| Подпис | Разработчик | Google Play |
| Разпространение | Всеки канал | Google Play |
APK е подходящ за разпространение извън Google Play — чрез уебсайтове, имейл или корпоративни MDM системи. AAB е обвързан с инфраструктурата на Google Play и не се инсталира директно. За тестване на AAB се използва инструментът bundletool, който емулира генериране на APK на локалната машина.
Вътрешната структура на AAB е подобна на APK, но съдържа допълнителни директории и файлове за описание на модулите и техните зависимости.
| Файл/директория | Предназначение |
|---|---|
| base/ | Базов модул: код, ресурси, манифест |
| BundleConfig.pb | Конфигурация на пакета във формат protobuf |
| Bundle-metadata/ | Метаданни за версиите на модулите |
| feature/ | Динамични модули (on-demand) |
| assets/ | Активи на приложението |
| manifest/ | Манифести на всеки модул |
Модулът base — е задължителен компонент на AAB. Той съдържа основния код, ресурси и манифест на приложението. Без base модул приложението не може да бъде изградено. Всички останали модули са опционални и се свързват чрез Dynamic Delivery.
Конфигурацията на AAB използва Protocol Buffers (protobuf) вместо XML. .pb файловете са по-компактни и се парсват по-бързо от сървърната инфраструктура на Google. Инструментът bundletool преобразува protobuf в четим формат за отстраняване на грешки.
Dynamic Delivery — ключовата технология, на която е изграден AAB. Тя позволява доставяне на потребителя само на онези части от приложението, които съответстват на неговото устройство и език, както и зареждане на допълнителни модули при поискване.
Install-time модулите се зареждат заедно с базовия APK при инсталиране. Conditional модулите се доставят само при изпълнение на условията — например модул с материали за 4K екрани. On-demand модулите се зареждат при поискване от потребителя вътре в приложението.
За големи ресурси (до 2 GB) се използва Play Asset Delivery вместо OBB файлове. PAD поддържа същите три режима на доставка: install-time, fast-follow (веднага след инсталиране) и on-demand.
// Зареждане на on-demand модул чрез SplitInstallManager
val manager = SplitInstallManagerFactory
.create(context)
val request = SplitInstallRequest
.newBuilder()
.addModule("level_pack_3")
.build()
manager.startInstall(request)
.addOnSuccessListener {
Log.d("AAB", "Модулът е инсталиран")
}
Всеки динамичен модул се описва с отделен build.gradle файл с посочване на типа доставка. Модулът може да има собствени ресурси, код и манифест, независими от базовото приложение.
Изграждането на AAB се извършва чрез Android Gradle Plugin със задачата bundleRelease (или bundleDebug). Резултатът — .aab файл в директорията build/outputs/bundle/.
За изграждане на AAB не са необходими специални настройки — Android Gradle Plugin поддържа пакети по подразбиране. Достатъчно е да посочите задачата bundle вместо assemble.
// build.gradle.kts — изграждане на AAB с подпис
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
// Задача: ./gradlew bundleRelease
Google предоставя инструмента bundletool за генериране на APK от AAB на локалната машина. Командата `bundletool build-apks --bundle=app.aab --output=app.apks` създава набор от APK за тестване на различни конфигурации на устройства.
bundletool също така може да разопакова AAB, да покаже неговата конфигурация и да провери целостта на подписа преди качване в Google Play Console. За отстраняване на грешки се използва командата `bundletool dump manifest --bundle=app.aab`, която показва манифеста на базовия модул.
По подразбиране AAB разделя ресурсите според три измерения: език (language), плътност на екрана (density) и архитектура на CPU (abi). Разработчикът може да деактивира всяко разделяне в build.gradle — например ако приложението поддържа само английски език. Деактивирането на разделяне означава, че ресурсите за всички варианти ще попаднат в базовия APK.
Resource optimisation — AAB автоматично конвертира PNG в WebP без загуба на качество, компресира неизползвани ресурси и премахва дублиращи се низове. Тези оптимизации се прилагат от страна на Google Play при генериране на крайния APK. В резултат потребителят получава APK с 15–25% по-малък от пълния архив.
Процесът на публикуване на AAB в Google Play Console се различава от APK само по формата на качения файл. Конзолата приема .aab, проверява неговата структура, подпис и конфигурация на модулите, след което генерира APK за всеки тип устройство.
При качване на AAB, Google Play поема управлението на ключовете за подпис. Разработчикът качва пакета, подписан с ключа upload, а Google подписва отново генерираните APK със своя ключ. Това опростява ротацията на ключове и възстановяването на достъп при загуба на keystore.
Google Play Console предоставя вграден тест на AAB: можете да изтеглите генерирания APK за конкретно устройство или да стартирате вътрешно тестване чрез траковете Internal Testing, Closed Alpha и Open Beta.
Преминаването към AAB може да причини проблеми, особено в проекти с голям брой динамични модули или сложна конфигурация на ресурси.
Ако динамичен модул реферира ресурси на базовия модул с грешно име, Google Play отхвърля AAB на етапа на проверка. Решение — използване на lint проверка преди изграждане и тестване на всички модули чрез bundletool локално.
Разделянето по езици може да забави стартирането на приложението, ако ресурсите за текущата локализация се зареждат динамично. Препоръка на Google — да не разделяте езиците, ако са по-малко от 10, или да използвате install-time за най-популярните.
Някои SDK (аналитика, реклами, карти) изискват достъп до пълния манифест и ресурси. Проверката на съвместимост с AAB е задължителна стъпка преди миграция. Повечето големи SDK (Firebase, Google Ads, Crashlytics) напълно поддържат AAB от 2022 г. За проверка на съвместимост се използва bundletool с флага --validate, който емулира сървърно генериране на APK.
AAB използва versionCode от манифеста на базовия модул. За разлика от APK, AAB също поддържа отделен versionCode за всеки модул — това позволява актуализиране на отделни части от приложението без пълно преинсталиране. Dynamic Delivery проследява инсталираните модули и доставя само променените компоненти при актуализация чрез Google Play.
Google Play Console предоставя подробна аналитика за всеки AAB: колко APK са генерирани, какви разделяния са били поискани, какъв е средният размер на изтегляне по устройства. Android Vitals показва показатели за производителност на генерираните APK. Тези данни помагат за оптимизиране на конфигурацията на разделяния и намаляване на размера на изтегляне за различни категории устройства.
Често задавани въпроси
Не, AAB не е предназначен за директно инсталиране. Google Play го преобразува в APK за конкретното устройство. За тестване на телефона се използва bundletool, който генерира APK от AAB локално.
Google Play генерира APK само с ресурси, съответстващи на устройството на потребителя: една плътност на екрана, една архитектура на CPU, един език. Ресурсите за други конфигурации не се включват, което спестява 15–30% трафик при изтегляне.
Не, съществуващите приложения могат да продължат да публикуват APK. Изискването за AAB важи само за нови приложения. Google препоръчва, но не изисква актуализиране на съществуващи проекти до AAB.
Сменете задачата за изграждане от assembleRelease на bundleRelease, проверете съвместимостта на всички SDK, конфигурирайте App Signing в Google Play Console и качете първия AAB чрез съществуващия track.
Да, AAB включва родни библиотеки в модулите. Google Play доставя само .so файлове за архитектурата CPU на устройството. Това е особено важно за игри на Unity и Unreal Engine с големи родни компилации.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също