bundletool — это базовый инструмент, который Android Studio, плагин Android Gradle и Google Play используют для создания пакета приложений Android. bundletool может преобразовывать пакет приложения в различные APK-файлы, развертываемые на устройствах.
Сборка Android SDK-пакетов (ASB) и их APK-файлов осуществляется с помощью bundletool . Он также доступен в качестве инструмента командной строки, поэтому вы можете самостоятельно собирать пакеты приложений и SDK-пакеты, а также воссоздавать серверную сборку Google Play для APK-файлов вашего приложения или APK-файлов вашего SDK с поддержкой среды выполнения .
Скачать bundletool
Если вы еще этого не сделали, скачайте bundletool из репозитория GitHub .
Создайте и протестируйте пакет приложения.
Для сборки пакета Android-приложения и последующего тестирования генерации APK-файлов из этого пакета можно использовать Android Studio или инструмент командной строки bundletool .
Создайте пакет приложения
Используйте Android Studio и плагин Android Gradle для сборки и подписи пакета Android-приложения . Однако, если использование IDE невозможно — например, из-за использования сервера непрерывной сборки — вы также можете собрать пакет приложения из командной строки и подписать его с помощью jarsigner .
Для получения дополнительной информации о создании пакетов приложений с помощью bundletool см. раздел «Создание пакета приложения с помощью bundletool» .
Сгенерируйте набор APK-файлов из пакета вашего приложения.
После сборки пакета Android App Bundle протестируйте, как Google Play использует его для генерации APK-файлов и как эти APK-файлы ведут себя при развертывании на устройстве.
Существует два способа протестировать ваш пакет приложения:
- Используйте локальную утилиту командной строки
bundletool. - Загрузите свой набор в Play Console через Google Play, используя тестовый трек.
В этом разделе объясняется, как использовать bundletool для локального тестирования пакета вашего приложения.
Когда bundletool генерирует APK-файлы из пакета вашего приложения, он включает сгенерированные APK-файлы в контейнер, называемый архивом набора APK-файлов , который использует расширение файла .apks . Чтобы сгенерировать набор APK-файлов для всех конфигураций устройств, поддерживаемых вашим приложением, из пакета приложения, используйте команду bundletool build-apks , как показано ниже:
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
Если вы хотите развернуть APK-файлы на устройстве, вам также необходимо указать информацию для подписи вашего приложения, как показано в следующей команде. Если вы не укажете информацию для подписи, bundletool попытается подписать ваши APK-файлы с помощью отладочного ключа.
bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks --ks=/MyApp/keystore.jks --ks-pass=file:/MyApp/keystore.pwd --ks-key-alias=MyKeyAlias --key-pass=file:/MyApp/key.pwd
В таблице ниже более подробно описаны различные флаги и параметры, которые можно установить при использовании команды bundletool build-apks :
Таблица 1. Параметры команды bundletool build-apks
| Флаг | Описание |
|---|---|
--bundle= path | (Обязательно) Указывает путь к пакету приложения, созданному с помощью Android Studio. Для получения дополнительной информации см. раздел «Создание проекта» . |
--output= path | (Обязательно) Указывает имя выходного файла .apks , который содержит все APK-файлы вашего приложения. Чтобы протестировать файлы из этого файла на устройстве, выполните действия, описанные в разделе о развертывании APK-файлов на подключенном устройстве . |
--overwrite | Заменяет существующий выходной файл путем, указанным с помощью параметра --output . Если этот флаг не указан и выходной файл уже существует, возникнет ошибка сборки. |
--aapt2= path | Указывает пользовательский путь к AAPT2. По умолчанию bundletool включает собственную версию AAPT2. |
--ks= path | (Необязательно) Указывает путь к хранилищу ключей развертывания, используемому для подписи APK-файлов. Если этот флаг не указан, bundletool попытается подписать ваши APK-файлы с помощью отладочного ключа подписи. |
--ks-pass=pass: passwordили --ks-pass=file: /path/to/file | Указывает пароль хранилища ключей. Если вы указываете пароль в открытом виде, добавьте к нему уточнение pass: `. Если вы указываете путь к файлу, содержащему пароль, добавьте уточнение file: `. Если вы указываете хранилище ключей с помощью флага --ks без указания --ks-pass , bundletool запросит у вас пароль из командной строки. |
--ks-key-alias= alias | Указывает псевдоним ключа подписи, который вы хотите использовать. |
--key-pass=pass: passwordили --key-pass=file: /path/to/file | Указывает пароль для ключа подписи. Если пароль указан в открытом виде, добавьте к нему pass: `. Если указан путь к файлу, содержащему пароль, добавьте к нему префикс file: `.Если этот пароль совпадает с паролем самого хранилища ключей, вы можете опустить этот флаг. |
--connected-device | Этот флаг указывает bundletool создавать APK-файлы, предназначенные для конфигурации подключенного устройства. Если этот флаг не указан, bundletool генерирует APK-файлы для всех конфигураций устройств, поддерживаемых вашим приложением. |
--device-id= serial-number | Если у вас подключено несколько устройств, используйте этот флаг, чтобы указать серийный идентификатор устройства, на которое вы хотите развернуть свое приложение. |
--device-spec= spec_json | Указывает путь к файлу .json , в котором задается конфигурация устройства, которое вы хотите использовать. Для получения дополнительной информации перейдите к разделу о создании и использовании JSON-файлов с описанием характеристик устройства . |
--mode=universal | Устанавливает режим на universal . Используйте этот параметр, если хотите, чтобы bundletool создавал единый APK-файл, включающий весь код и ресурсы вашего приложения, чтобы APK-файл был совместим со всеми конфигурациями устройств, поддерживаемыми вашим приложением. Примечание: Имейте в виду, что эти APK-файлы больше по размеру, чем те, которые оптимизированы для конкретной конфигурации устройства. Однако их проще передавать внутренним тестировщикам, которые, например, хотят протестировать ваше приложение на различных конфигурациях устройств. |
--local-testing | Включает локальное тестирование вашего пакета приложения. Локальное тестирование позволяет проводить быстрые итеративные циклы тестирования без необходимости загрузки на серверы Google Play. Пример проверки установки модуля с помощью флага |
Развертывайте APK-файлы на подключенном устройстве.
После генерации набора APK-файлов bundletool сможет развернуть на подключенном устройстве подходящую комбинацию APK-файлов из этого набора.
Например, если у вас подключено устройство под управлением Android 5.0 (уровень API 21) или выше, bundletool загружает базовый APK, APK-файлы модулей функций и APK-файлы конфигурации, необходимые для запуска вашего приложения на этом устройстве. В качестве альтернативы, если ваше подключенное устройство работает под управлением Android 4.4 (уровень API 20) или ниже, bundletool ищет совместимый многопакетный APK-файл для развертывания на вашем устройстве.
Для развертывания приложения из набора APK-файлов используйте команду install-apks и укажите путь к набору APK-файлов с помощью флага --apks= /path/to/apks , как показано в следующей команде. Если у вас подключено несколько устройств, укажите целевое устройство, добавив флаг --device-id= serial-id .
bundletool install-apks --apks=/MyApp/my_app.apks
Сгенерируйте набор APK-файлов, специфичный для вашего устройства.
Если вы не хотите создавать набор APK-файлов для всех конфигураций устройств, поддерживаемых вашим приложением, вы можете создать APK-файлы, ориентированные только на конфигурацию подключенного устройства, используя параметр --connected-device , как показано в следующей команде. Если у вас подключено несколько устройств, укажите целевое устройство, добавив флаг --device-id= serial-id .
bundletool build-apks --connected-device --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
Генерируйте и используйте JSON-файлы с техническими характеристиками устройств.
bundletool может генерировать набор APK-файлов, предназначенных для конфигурации устройства, указанной в JSON-файле. Чтобы сначала сгенерировать JSON-файл для подключенного устройства, выполните следующую команду:
bundletool get-device-spec --output=/tmp/device-spec.json
bundletool создает JSON-файл для вашего устройства в каталоге инструмента. Затем вы можете передать этот файл в bundletool для генерации набора APK-файлов, которые будут ориентированы только на конфигурацию, описанную в этом JSON-файле, следующим образом:
bundletool build-apks --device-spec=/MyApp/pixel2.json --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
Создать спецификацию устройства в формате JSON вручную
Если у вас нет доступа к устройству, для которого вы хотите создать целевой набор APK-файлов — например, если вы хотите протестировать свое приложение на устройстве, которого у вас нет под рукой, — вы можете вручную создать JSON-файл, используя следующий формат:
{
"supportedAbis": ["arm64-v8a", "armeabi-v7a"],
"supportedLocales": ["en", "fr"],
"screenDensity": 640,
"sdkVersion": 27
}
Затем вы можете передать этот JSON команде ` bundle extract-apks , как описано в предыдущем разделе.
Извлечение APK-файлов, специфичных для конкретного устройства, из существующего набора APK-файлов.
Если у вас уже есть набор APK-файлов, и вы хотите извлечь из него подмножество APK-файлов, предназначенных для определенной конфигурации устройства, вы можете использовать команду extract-apks и указать JSON-спецификацию устройства следующим образом:
bundletool extract-apks --apks=/MyApp/my_existing_APK_set.apks --output-dir=/MyApp/my_pixel2_APK_set.apks --device-spec=/MyApp/bundletool/pixel2.json
Измерьте предполагаемый размер загружаемых APK-файлов в наборе APK-файлов.
Для измерения предполагаемого размера загружаемых APK-файлов в наборе APK-файлов, которые будут передаваться в сжатом виде по сети, используйте команду get-size total :
bundletool get-size total --apks=/MyApp/my_app.apks
Вы можете изменить поведение команды get-size total используя следующие флаги:
Таблица 2. Параметры команды get-size total
| Флаг | Описание |
|---|---|
--apks= path | (Обязательно) Указывает путь к существующему файлу набора APK, размер загружаемого файла которого измеряется. |
--device-spec= path | Указывает путь к файлу спецификации устройства (полученному из get-device-spec или созданному вручную), который будет использоваться для сопоставления. Вы можете указать частичный путь для оценки набора конфигураций. |
--dimensions= dimensions Указывает параметры, используемые при вычислении оценок размера. Принимает список параметров, разделенных запятыми: SDK , ABI , SCREEN_DENSITY и LANGUAGE . Для измерения по всем параметрам укажите ALL . | |
--instant | Измеряет размер загружаемых APK-файлов с мгновенным доступом, а не устанавливаемых APK-файлов. По умолчанию bundletool измеряет размер загружаемых устанавливаемых APK-файлов. |
--modules= modules | Указывает список модулей из набора APK-файлов, разделенных запятыми, которые следует учитывать при измерении. Команда bundletool автоматически включает все зависимые модули из указанного набора. По умолчанию команда измеряет размер загрузки всех модулей, установленных во время первой загрузки. |
Дополнительные ресурсы
Чтобы узнать больше об использовании bundletool , посмотрите видео «App Bundles: Testing bundles with bundletool and the Play Console» .