Android App Bundles
Android App Bundle (AAB) — это формат публикации приложений в магазине Google Play, разработанный компанией Google. Он представляет собой архив, содержащий все скомпилированные ресурсы и код приложения, но не предназначенный для непосредственной установки на устройство. Вместо этого Google Play использует AAB для генерации и доставки пользователю только тех файлов (так называемого APK-файла), которые соответствуют конфигурации его конкретного устройства (разрешение экрана, язык, архитектура процессора, версия Android и т. д.). Формат был представлен в 2018 году, а с августа 2021 года стал обязательным для новых приложений, публикуемых в Google Play.
История
До появления AAB разработчики публиковали приложения в виде универсальных APK-файлов, которые содержали все возможные ресурсы для всех типов устройств. Это приводило к избыточному размеру устанавливаемого приложения: на устройство загружались и занимали место, например, изображения для экранов с высокой плотностью пикселей, даже если у пользователя был экран с низкой плотностью, или библиотеки для всех архитектур процессоров, хотя устройство использовало только одну.
Проблема усугублялась с ростом числа языков, разрешений экранов и архитектур. Google начала искать решение, которое позволило бы уменьшить размер устанавливаемого приложения без усложнения процесса разработки. В 2018 году на конференции Google I/O был представлен Android App Bundle как альтернатива традиционному APK. В мае 2021 года Google объявила, что с августа 2021 года все новые приложения должны публиковаться в формате AAB, а существующие приложения должны перейти на этот формат до ноября 2021 года (позже срок был продлён до августа 2023 года для некоторых категорий). Это решение вызвало критику со стороны разработчиков, особенно тех, кто распространял приложения вне Google Play, так как AAB привязан к инфраструктуре Google.
Принцип работы
Android App Bundle не является устанавливаемым файлом. Это контейнер, который содержит:
- Модули — логические части приложения (базовый модуль, модули функций, модули конфигурации).
- Ресурсы — все файлы (изображения, строки, макеты), разделённые по конфигурациям (язык, плотность экрана, версия Android).
- Код — скомпилированный байт-код (DEX-файлы), разделённый по архитектурам процессора (ARM, x86, x86_64).
Когда пользователь нажимает «Установить» в Google Play, сервер Google Play анализирует AAB и на основе информации об устройстве (полученной от Google Play Services) генерирует оптимизированный APK-файл, который содержит только необходимые ресурсы и код. Этот процесс называется динамической доставкой (Dynamic Delivery).
Виды APK, генерируемых из AAB
Google Play может создавать несколько типов APK:
- Базовый APK — содержит код и ресурсы, необходимые для запуска приложения (всегда включается).
- APK для конкретной конфигурации — ресурсы для определённого языка, плотности экрана, архитектуры процессора.
- Модульный APK — для дополнительных функций, которые загружаются по требованию (например, платный контент, уровни игры).
Структура AAB
Файл AAB имеет расширение .aab и представляет собой ZIP-архив с определённой структурой папок:
base/— основной модуль приложения (обязателен).feature_*— дополнительные модули (опционально).BundleConfig.pb— файл конфигурации в формате Protocol Buffers.resources.pb— файл с ресурсами (аналогresources.arscв APK).manifest/— манифест приложения в формате XML.
Каждый модуль содержит поддиректории:
dex/— DEX-файлы (скомпилированный код).lib/— нативные библиотеки (разделённые по архитектурам).res/— ресурсы (изображения, строки, макеты).assets/— произвольные файлы (например, базы данных, шрифты).
Преимущества
- Уменьшение размера устанавливаемого приложения — загрузка только необходимых ресурсов. По данным Google, среднее приложение в формате AAB занимает на 15–20% меньше места, чем универсальный APK.
- Упрощение публикации — разработчику не нужно создавать отдельные APK для разных устройств; достаточно одного AAB.
- Динамические функции — возможность загружать части приложения по требованию (on-demand) с помощью Play Feature Delivery, что позволяет уменьшить первоначальный размер установки.
- Автоматическая оптимизация — Google Play автоматически применяет сжатие ресурсов (например, преобразование PNG в WebP) и удаление неиспользуемого кода (с помощью R8/ProGuard).
Недостатки и критика
- Зависимость от Google Play — AAB нельзя установить напрямую на устройство; для установки требуется сервер Google Play. Это делает формат непригодным для распространения через сторонние магазины приложений или в виде файлов для загрузки вручную (side-loading).
- Сложность тестирования — для проверки AAB требуется либо загрузка в Google Play Console (с последующей генерацией APK), либо использование инструментов командной строки (bundletool), что менее удобно, чем тестирование APK.
- Ограниченная поддержка старых версий Android — формат требует Android 5.0 (Lollipop) и выше, хотя Google Play Services на старых версиях также может обрабатывать AAB.
- Проблемы с конфиденциальностью — при использовании AAB Google Play получает более детальную информацию об устройстве пользователя для генерации APK, что вызывает опасения у некоторых разработчиков и пользователей.
Инструменты для работы с AAB
- Android Studio — основная среда разработки, которая автоматически создаёт AAB при сборке приложения (через меню Build → Build Bundle(s) / APK(s) → Build Bundle(s)).
- bundletool — инструмент командной строки от Google, позволяющий генерировать APK из AAB, тестировать динамические функции, проверять структуру AAB. Доступен для Windows, macOS и Linux.
- Google Play Console — веб-интерфейс для загрузки AAB, управления версиями, тестирования и публикации приложений.
- apksigner — утилита для подписи AAB (так как AAB подписывается как ZIP-архив, а не как APK).
Применение
Формат AAB используется исключительно для публикации приложений в Google Play. Он не применяется для распространения приложений через другие каналы (например, Amazon Appstore, F-Droid, прямые загрузки с сайтов). Для side-loading или установки на эмуляторы разработчики могут генерировать универсальный APK из AAB с помощью bundletool.
Интересные факты
- Формат AAB основан на открытом стандарте ZIP, но с жёстко заданной структурой папок.
- Google утверждает, что AAB позволяет сократить размер устанавливаемого приложения в среднем на 15–20%, а в некоторых случаях (например, при большом количестве языков и архитектур) — до 50%.
- В 2020 году Google добавила поддержку Play Asset Delivery, которая позволяет загружать большие ресурсы (например, игровые ассеты) через AAB, не увеличивая размер APK.
- Формат AAB не поддерживает установку на устройства с Android 4.4 (KitKat) и ниже, так как требует API для динамической доставки.
Источники
- Официальная документация Android Developers: «Android App Bundle»
- Google I/O 2018: «What’s new in Android development tools»
- Блог Android Developers: «Android App Bundle: The future of app publishing» (2021)
- Статья на Wikipedia: «Android App Bundle» (английская версия)
- Документация bundletool на GitHub
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →