bundletool¶
bundletool — это кроссплатформенная утилита командной строки с открытым исходным кодом, предназначенная для работы с Android App Bundle (AAB) — форматом публикации приложений в магазине Google Play. Bundletool позволяет разработчикам собирать, анализировать, подписывать, конвертировать и тестировать AAB-файлы, а также извлекать из них оптимизированные APK-файлы для конкретных конфигураций устройств (версия Android, плотность экрана, архитектура процессора, язык). Инструмент разработан компанией Google и является частью экосистемы Android SDK.
¶История
Формат Android App Bundle был анонсирован Google в мае 2018 года на конференции Google I/O. Его внедрение преследовало цель уменьшить размер устанавливаемых приложений за счёт динамической доставки модулей, адаптированных под конкретное устройство. Для работы с новым форматом потребовался инструмент, способный выполнять обратную задачу — извлекать из AAB отдельные APK-файлы (так называемые «расщеплённые APK», split APKs) для тестирования и отладки. Первая публичная версия bundletool была выпущена в декабре 2018 года.
С 2021 года Google Play обязал разработчиков новых приложений использовать AAB вместо традиционного APK, что сделало bundletool ключевым инструментом для разработчиков Android. Утилита постоянно обновляется, добавляя поддержку новых функций, таких как модули функций (feature modules), модули конфигурации (configuration splits) и динамические возможности.
¶Устройство и принцип работы
Bundletool оперирует двумя основными форматами:
- Android App Bundle (AAB) — архивный файл (формат ZIP), содержащий все ресурсы, код и метаданные приложения, но не скомпилированный в единый APK. Внутри AAB находятся каталоги:
base/(базовый модуль),feature_*/(модули функций),manifest/(манифест),BundleConfig.pb(конфигурация в формате Protocol Buffers) и другие. - APK (Android Package) — исполняемый файл, который может быть установлен на устройство. Bundletool генерирует из AAB набор APK-файлов, оптимизированных под конкретные характеристики устройства.
¶Ключевые возможности
- Сборка AAB из готовых модулей: bundletool может объединять отдельные модули (например,
base.zip,feature1.zip) в единый AAB-файл. - Извлечение APK: по заданным параметрам устройства (версия SDK, плотность экрана, ABI, язык) утилита создаёт набор APK-файлов, которые можно установить на эмулятор или реальное устройство через
adb. - Генерация APK для всех конфигураций: команда
build-apksсоздаёт файл.apks(архив, содержащий все возможные варианты APK), который затем можно установить на любое устройство. - Подпись: bundletool поддерживает подпись APK-файлов с использованием стандартных инструментов Android (apksigner).
- Валидация: проверяет корректность структуры AAB, соответствие манифеста, наличие обязательных файлов и отсутствие конфликтов.
- Конвертация APK в AAB: утилита может преобразовывать существующий APK (в том числе многофайловый) в формат AAB, хотя это не гарантирует полной обратной совместимости.
- Работа с модулями: позволяет добавлять, удалять и заменять модули внутри AAB.
¶Применение
Bundletool используется на всех этапах жизненного цикла Android-приложения:
¶Разработка и тестирование
- Локальное тестирование: разработчики извлекают APK для конкретной конфигурации (например, для устройства с разрешением 1080p и процессором ARM64) и устанавливают его на эмулятор или устройство, чтобы убедиться, что приложение работает корректно.
- Отладка динамических модулей: с помощью bundletool можно тестировать модули функций, которые загружаются по требованию (on-demand), без необходимости публикации в Google Play.
- Проверка размера: утилита позволяет оценить, какой размер будет иметь устанавливаемое приложение на разных устройствах.
¶Сборка и публикация
- Интеграция с CI/CD: bundletool часто используется в системах непрерывной интеграции (Jenkins, GitLab CI, GitHub Actions) для автоматической сборки AAB и генерации тестовых APK.
- Подпись и подготовка к публикации: перед загрузкой в Google Play AAB должен быть подписан. Bundletool может выполнить подпись с использованием ключа разработчика.
- Публикация в сторонних магазинах: хотя Google Play требует AAB, некоторые альтернативные магазины (например, Amazon Appstore, Huawei AppGallery) всё ещё принимают APK. Bundletool позволяет извлечь из AAB универсальный APK (universal APK), который содержит все ресурсы и может быть установлен на любое устройство.
¶Анализ и обратная разработка
- Изучение структуры: bundletool предоставляет команды для просмотра содержимого AAB, списка модулей, конфигураций и метаданных.
- Извлечение ресурсов: можно извлечь ресурсы (изображения, строки, манифест) из AAB для анализа или модификации.
- Конвертация в APK для исследования: специалисты по безопасности и обратной разработке используют bundletool для преобразования AAB в APK, который затем можно декомпилировать стандартными инструментами (например, JADX, APKTool).
¶Примеры использования
¶Установка
Bundletool распространяется как исполняемый JAR-файл (Java Archive). Для его запуска требуется Java Runtime Environment (JRE) версии 8 или выше. Типичная команда запуска: `` java -jar bundletool.jar <команда> [параметры] ``
¶Основные команды
- Извлечение APK для конкретного устройства:
`` java -jar bundletool.jar build-apks --bundle=app.aab --output=app.apks --ks=keystore.jks --ks-pass=pass:password --ks-key-alias=alias --key-pass=pass:password ` После выполнения создаётся файл app.apks`, содержащий все возможные варианты APK.
- Установка на устройство:
`` java -jar bundletool.jar install-apks --apks=app.apks ` Утилита автоматически определяет характеристики подключённого устройства (через adb`) и устанавливает соответствующий набор APK.
- Генерация универсального APK:
`` java -jar bundletool.jar build-apks --bundle=app.aab --output=app.apks --mode=universal `` Создаёт один APK, содержащий все ресурсы (аналог традиционного APK).
- Просмотр информации о AAB:
`` java -jar bundletool.jar dump --bundle=app.aab --values `` Выводит подробную информацию о модулях, конфигурациях, манифесте и ресурсах.
¶Критика и ограничения
- Зависимость от Java: для работы bundletool требуется установленная JRE, что может быть неудобно в некоторых средах (например, на серверах без Java).
- Сложность для новичков: интерфейс командной строки и обилие параметров могут отпугивать начинающих разработчиков, привыкших к графическим инструментам (например, Android Studio).
- Ограниченная поддержка сторонних магазинов: хотя bundletool позволяет извлекать APK, не все магазины приложений поддерживают динамическую доставку модулей, что снижает преимущества AAB.
- Проблемы с обратной совместимостью: некоторые старые инструменты и библиотеки могут некорректно работать с AAB, требуя дополнительных настроек.
- Отсутствие встроенного GUI: в отличие от Android Studio, bundletool не имеет графического интерфейса, что затрудняет визуальный анализ структуры AAB.
¶Интересные факты
- Bundletool является частью Android SDK и официально поддерживается Google, но распространяется как отдельный инструмент, а не встроенный в Android Studio.
- Формат
.apks, создаваемый bundletool, представляет собой обычный ZIP-архив, содержащий подписанные APK-файлы и метаданные. - С помощью bundletool можно тестировать приложения, использующие динамические функции (on-demand features), без необходимости публикации в Google Play.
- Инструмент активно используется в open-source проектах, таких как F-Droid (альтернативный магазин приложений с открытым исходным кодом), для автоматической сборки и публикации APK.
¶Источники
- Официальная документация Google по Android App Bundle и bundletool (developer.android.com)
- Репозиторий исходного кода bundletool на GitHub (github.com/google/bundletool)
- Статья «Android App Bundle: A New Way to Deliver Your App» (Google I/O 2018)
- Руководство по использованию bundletool в Android Studio (Android Developers Blog)
- Обсуждения и примеры использования на Stack Overflow
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

