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/ | Динамічні модулі (на вимогу) |
| 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 ГБ) використовується 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", "Module installed")
}
Кожен динамічний модуль описується окремим 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 розділяє ресурси за трьома вимірами: мова, щільність екрана (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 через існуючий трек.
Так, AAB включає нативні бібліотеки в модулях. Google Play доставляє лише .so файли під архітектуру CPU пристрою. Це особливо важливо для ігор на Unity та Unreal Engine з великими нативними збірками.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також