пакетный инструмент

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 для локального тестирования пакета вашего приложения.

Когда 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-файл был совместим со всеми конфигурациями устройств, поддерживаемыми вашим приложением.

Примечание: bundletool включает только модули функций, в манифесте которых в универсальном APK-файле указано <dist:fusing dist:include="true"/> Для получения дополнительной информации ознакомьтесь с манифестом модуля функции .

Имейте в виду, что эти APK-файлы больше по размеру, чем те, которые оптимизированы для конкретной конфигурации устройства. Однако их проще передавать внутренним тестировщикам, которые, например, хотят протестировать ваше приложение на различных конфигурациях устройств.

--local-testing Включает локальное тестирование вашего пакета приложения. Локальное тестирование позволяет проводить быстрые итеративные циклы тестирования без необходимости загрузки на серверы Google Play.

Пример проверки установки модуля с помощью флага --local-testing см. в разделе «Локальная проверка установки модулей» .

Развертывайте 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» .