Настройка Android App Bundle (AAB) для оптимизации размера
С момента введения требований Google Play AAB стал обязательным форматом для новых приложений. Но простая конвертация APK в AAB не гарантирует уменьшения размера — мы видим это на каждом втором проекте. Без правильной конфигурации splits, texture compression и R8 вы получите лишь незначительную экономию. Наша команда с 5+ летним опытом в Android-разработке и 20+ релизными проектами помогает настроить AAB так, чтобы размер скачиваемого APK сократился на 15–35%. Ниже — конкретные шаги, которые дают измеримый результат.
Как Android App Bundle уменьшает размер APK?
APK — монолитный архив для всех устройств. AAB — контейнер с модулями, из которого Google Play генерирует персональный APK под каждое устройство. Например, Samsung Galaxy S23 получит только arm64-v8a библиотеки и xxhdpi ресурсы, без x86, armeabi-v7a и xhdpi/hdpi вариантов. Результат: скачиваемый APK уменьшается в среднем на 15–35% — это официальные данные Google, подтверждённые на реальных приложениях. Android Developers documentation подтверждает: "On average, the size of Android App Bundles is about 15% smaller than APKs." Мы гарантируем такой же эффект на вашем проекте.
Что нужно настроить в build.gradle для оптимального AAB?
Настройка splits — основа AAB. Вот минимальная конфигурация:
android { bundle { language { enableSplit = true } density { enableSplit = true } abi { enableSplit = true } texture { enableSplit = true defaultFormat = "ETC2" } } } texture splits критичны для игр и приложений с 3D. Без них все форматы текстур упакованы вместе, что может давать +50–100 MB. ETC2 — универсальный формат (GLES 3.0+), ASTC — лучшее сжатие на современных устройствах (Adreno 530+, Mali-G51+). Выбор формата зависит от минимального API level.
Дополнительные настройки для texture compression
Если ваше приложение использует ASTC, установите defaultFormat = "ASTC" в блоке texture. Для старых устройств, не поддерживающих ASTC, Google Play автоматически выберет ETC2-вариант, но только если включен enableSplit. Проверьте совместимость с помощью baseConfig.fgl.
Сравнение APK и AAB: что эффективнее?
| Параметр | APK | AAB |
|---|---|---|
| Размер загрузки | Единый для всех устройств | Оптимизированный под каждое устройство |
| Texture splits | Не поддерживаются | Поддерживаются (ETC2, ASTC, DXT) |
| Динамические модули | Требуют отдельной настройки | Встроенная поддержка (Play Feature Delivery) |
| Управление версиями | Простое | Требует bundletool для анализа |
AAB однозначно эффективнее: он сокращает размер на 15–35% — это лучше, чем любой APK-сплиттер.
Таблица: Форматы текстур для AAB
| Формат | Требования | Сжатие |
|---|---|---|
| ETC2 | OpenGL ES 3.0+ | 4:1 |
| ASTC | Adreno 530+, Mali-G51+ | 10:1 |
| DXT | Nvidia Tegra, old GPUs | 6:1 |
Как проверить размер AAB перед загрузкой?
Используйте bundletool. Соберите APK-набор командой:
bundletool build-apks --bundle=app.aab --output=app.apks \ --ks=keystore.jks --ks-pass=pass:password \ --ks-key-alias=key --key-pass=pass:password bundletool get-size total --apks=app.apks --device-spec=pixel7_spec.json device-spec.json получаем через bundletool get-device-spec --adb=<path>. Это даёт точный размер загружаемого APK для целевого устройства до загрузки в Play Store.
Почему R8 и ProGuard обязательны для AAB?
buildTypes { release { minifyEnabled = true shrinkResources = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } shrinkResources = true работает только при minifyEnabled = true. Убирает неиспользуемые ресурсы — строки, изображения, layout — на основе статического анализа кода. В реальных проектах мы получаем 5–20 MB дополнительного уменьшения. R8 в full mode агрессивнее удаляет код и инлайнит методы, уменьшая размер ещё на 5–15% по сравнению со старым ProGuard.
Анализ размера через Android Studio
Build → Analyze APK (работает и с AAB через распаковку). Показывает pie chart: classes.dex, res/, lib/, assets/. Сразу видно, что занимает больше всего. Типичные находки:
-
assets/с несжатыми JSON-файлами данных — сжать или перевести в бинарный формат (Protobuf / FlatBuffers) -
lib/с нативными библиотеками для всех ABI включаяx86иx86_64— оставить толькоarm64-v8aиarmeabi-v7aдля production build -
res/drawable-*с PNG там, где достаточно VectorDrawable
Что входит в работу
Настройка AAB — это не один флаг, а комплекс мероприятий. Вот этапы, которые мы выполняем:
- Аудит текущей конфигурации: проверка splits, texture compression, R8/ProGuard, bundletool.
- Настройка build.gradle: правильные слоты и форматы текстур.
- Оптимизация ресурсов: сжатие assets, удаление неиспользуемых ресурсов, конвертация PNG в VectorDrawable.
- Верификация размера: расчёт через bundletool для 3–5 целевых устройств.
- Документация: отчёт по изменениям и рекомендации на будущее.
- Обучение команды: как поддерживать AAB-оптимизацию в следующих релизах.
Сокращение размера приложения на 15–35% напрямую снижает стоимость трафика для пользователей и увеличивает конверсию установок. Гарантируем снижение размера загружаемого APK на 15–35%. Получите консультацию по настройке AAB для вашего проекта — оценим текущую сборку и точную экономию размера.
Сроки
Настройка AAB с bundletool-верификацией — 1–2 дня. Если нужна полная оптимизация размера, включая R8 tuning и texture splits — 3–5 дней. Свяжитесь, чтобы обсудить ваш конкретный случай.







