Вы можете выполнить все задачи сборки, доступные для вашего проекта для Android, с помощью инструмента командной строки Gradle wrapper. Он доступен в виде пакетного файла для Windows (gradlew.bat) и сценария командной строки для Linux и Mac (gradlew.sh). Найти его можно в корневой папке каждого проекта, созданного в Android Studio.
Чтобы запустить задачу с помощью оболочки, введите одну из следующих команд в окне терминала (в Android Studio выберите View (Вид) > Tool Windows (Окна инструментов) > Terminal (Терминал)):
В командной оболочке Windows:
gradlew task-nameНа компьютере Mac, Linux или Windows PowerShell:
./gradlew task-name
Чтобы посмотреть список всех доступных задач сборки для проекта, выполните tasks:
gradlew tasks
В оставшейся части этой страницы описываются основы сборки и запуска приложения с помощью оболочки Gradle. Подробнее о том, как настроить сборку Android…
Если вы предпочитаете использовать инструменты Android Studio вместо инструментов командной строки, ознакомьтесь со статьей Создание и запуск приложения.
О типах сборки
По умолчанию для каждого приложения Android доступно два типа сборки: отладочная (для отладки приложения) и конечная (для выпуска приложения). Прежде чем развертывать приложение на устройстве, необходимо подписать сертификатом выходные данные каждой сборки. Отладочная сборка автоматически подписывается отладочным ключом, который предоставляется SDK Tools (он небезопасен, и с ним нельзя публиковать приложения в Google Play). Конечная сборка должна быть подписана вашим закрытым ключом.
Если вы хотите создать приложение для выпуска, вам также необходимо подписать его с помощью соответствующего ключа подписи. Если вы только начинаете, то можете быстро запустить приложение на эмуляторе или подключенном устройстве, создав отладочный APK-файл.
Вы также можете определить собственный тип сборки в файле build.gradle.kts и настроить его подпись как отладочную сборку, включив debuggable true. Подробнее о том, как настроить варианты сборки…
Как создать и развернуть APK-файл
Хотя создание набора App Bundle – это лучший способ упаковать приложение и загрузить его в Play Console, создание APK-файла лучше подходит, когда вы хотите быстро протестировать отладочную сборку или поделиться своим приложением в виде развертываемого артефакта с другими пользователями.
Создайте отладочный APK-файл
Чтобы сразу протестировать приложение и выполнить отладку, можно создать отладочный APK-файл.
Отладочный APK-файл подписывается отладочным ключом, который предоставляется SDK Tools, и позволяет выполнять отладку с помощью adb.
Чтобы создать отладочный APK-файл, откройте командную строку и перейдите в корневой каталог проекта. Чтобы запустить отладочную сборку, вызовите задачу assembleDebug:
gradlew assembleDebug
Будет создан APK-файл с названием module_name-debug.apk в каталоге project_name/module_name/build/outputs/apk/.
Файл уже подписан отладочным ключом и выровнен с помощью zipalign, поэтому его можно сразу установить на устройство.
Чтобы создать APK-файл и сразу установить его на работающий эмулятор или подключенное устройство, вызовите installDebug:
gradlew installDebug
Слово Debug в названиях задач – это просто написанное в верблюжьем регистре название варианта сборки. Его можно заменить на название любого типа или варианта сборки, который вы хотите собрать или установить. Например, если у вас есть версия продукта demo, вы можете создать отладочную версию с помощью задачи assembleDemoDebug.
Чтобы посмотреть все доступные задачи сборки и установки для каждого варианта (включая задачи удаления), запустите задачу tasks.
Также ознакомьтесь с разделами о том, как запустить приложение в эмуляторе и на устройстве.
Как создать набор App Bundle или APK-файл
Когда вы будете готовы выпустить и распространить приложение, вам нужно будет создать набор App Bundle или APK-файл, подписанный закрытым ключом. Подробную информацию вы найдете в разделе о том, как подписать приложение из командной строки.
Развертывание приложения в эмуляторе
Чтобы использовать эмулятор Android, необходимо создать виртуальное устройство Android (AVD) с помощью Android Studio.
После создания AVD запустите эмулятор Android и установите приложение, выполнив следующие действия:
В командной строке перейдите в каталог
android_sdk/tools/и запустите эмулятор, указав свое виртуальное устройство Android:emulator -avd <var>avd_name</var>Если вы не знаете название виртуального устройства, выполните команду
emulator -list-avds.Теперь вы можете установить приложение, используя одну из задач установки Gradle, упомянутых в разделе о том, как создать отладочный APK-файл, или инструмент
adb.Если APK создан с помощью предварительной версии SDK для разработчиков (если
targetSdkVersion– это буква, а не цифра), то для установки тестового APK необходимо включить параметр-tв командуinstall.adb install <var>path/to/your_app</var>.apkВсе созданные APK-файлы сохраняются в каталоге
project_name/module_name/build/outputs/apk/.
Подробнее о том, как запускать приложения в эмуляторе Android…
Развертывание приложения на физическом устройстве
Прежде чем запускать приложение на устройстве, необходимо включить на нем отладку по USB. Для этого выберите Настройки > Для разработчиков.
После того как вы настроите устройство и подключите его через USB, вы сможете установить приложение с помощью задач Gradle, упомянутых в разделе Как создать отладочный APK-файл, или инструмента adb.
adb -d install path/to/your_app.apk
Все созданные APK-файлы сохраняются в каталоге project_name/module_name/build/outputs/apk/.
Подробнее о том, как запускать приложения на физических устройствах…
Как создать набор App Bundle
Наборы Android App Bundle содержат весь скомпилированный код и ресурсы приложения, но создание и подписание APK-файлов выполняется в Google Play. В отличие от файла APK, набор App Bundle не предназначен для запуска на устройстве. Поэтому, если вы хотите быстро протестировать APK-файл или поделиться им с кем-то, вам следует создать APK-файл.
Проще всего создать набор App Bundle с помощью Android Studio. Если вам нужно создать набор App Bundle из командной строки, вы можете сделать это с помощью Gradle или bundletool, как описано в разделах ниже.
Как создать набор App Bundle с помощью Gradle
Если вы хотите создать набор App Bundle из командной строки, запустите задачу Gradle bundleVariant в базовом модуле приложения.
Например, следующая команда создает набор App Bundle для отладочной версии основного модуля:
./gradlew :base:bundleDebug
Чтобы создать подписанный набор App Bundle для загрузки в Play Console, сначала настройте файл build.gradle.kts основного модуля, указав в нем информацию о подписи приложения. Подробнее о том, как настроить Gradle для подписания приложения…
Затем вы можете, например, создать конечную версию приложения, и Gradle автоматически сгенерирует набор App Bundle и подпишет его, используя информацию, указанную в файле build.gradle.kts.
Если вы хотите подписать набор App Bundle отдельно, используйте инструмент jarsigner в командной строке. Для этого используйте следующую команду:
jarsigner -keystore pathToKeystore app-release.aab keyAliasКак создать набор App Bundle с помощью bundletool
bundletool – это инструмент командной строки, который используется в Android Studio, плагине Android Gradle и Google Play, чтобы преобразовывать скомпилированный код и ресурсы приложения в наборы App Bundle и генерировать из них APK-файлы, готовые к развертыванию.
Таким образом, хотя тестировать наборы App Bundle с помощью bundletool и локально воссоздавать процесс генерации APK-файлов в Google Play полезно, обычно вам не нужно вызывать bundletool для создания самого набора App Bundle. Вместо этого следует использовать задачи Android Studio или Gradle, как описано в предыдущих разделах.
Если вы не хотите использовать Android Studio или задачи Gradle для создания наборов (например, если вы используете собственный набор инструментов сборки), то можете создать набор App Bundle из предварительно скомпилированного кода и ресурсов с помощью bundletool в командной строке. Если вы ещё этого не сделали, скачайте bundletool из хранилища GitHub.
В этом разделе описывается, как упаковать скомпилированный код и ресурсы приложения и как использовать bundletool из командной строки, чтобы преобразовать их в набор Android App Bundle.
Создайте манифест и ресурсы в формате proto.
Для работы bundletool требуется, чтобы определенная информация о проекте приложения, например файл манифеста и ресурсы, была представлена в формате буфера протокола Google (также известном как protobuf) с расширением имени файла *.pb. Protobufs – это платформенно-независимый механизм сериализации структурированных данных, совместимый с языками программирования. Формат Protobufs аналогичен XML, однако он проще, компактнее и быстрее.
Скачать AAPT2
Вы можете создать файл манифеста и таблицу ресурсов приложения в формате protobuf, используя последнюю версию AAPT2 из репозитория Maven Google.
Чтобы скачать AAPT2 из репозитория Google Maven, выполните следующие действия:
- В индексе репозитория перейдите в раздел com.android.tools.build > aapt2.
- Скопируйте название последней версии AAPT2.
Вставьте скопированное название версии в следующий URL и укажите целевую операционную систему: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ aapt2-version/aapt2-aapt2-version- [windows | linux | osx].jar
Например, чтобы скачать версию 3.2.0-alpha18-4804415 для Windows, используйте следующий URL: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-4804415-windows.jar
Перейдите по URL в браузере. Скачивание AAPT2 начнется автоматически.
Распакуйте скачанный JAR-файл.
Компиляция и связывание ресурсов приложения
Чтобы скомпилировать ресурсы приложения с помощью AAPT2, используйте следующую команду:
aapt2 compile \ project_root/module_root/src/main/res/drawable/Image1.png \ project_root/module_root/src/main/res/drawable/Image2.png \ -o compiled_resources/
На этапе компоновки, когда AAPT2 объединяет различные скомпилированные ресурсы в один APK-файл, укажите AAPT2 преобразовать манифест приложения и скомпилированные ресурсы в формат protobuf, добавив флаг --proto-format, как показано в примере ниже.
aapt2 link --proto-format -o output.apk \ -I android_sdk/platforms/android_version/android.jar \ --manifest project_root/module_root/src/main/AndroidManifest.xml \ -R compiled_resources/*.flat \ --auto-add-overlay
Затем вы можете извлечь контент из выходного APK-файла, например AndroidManifest.xml, resources.pb и другие файлы ресурсов приложения, которые теперь будут в формате protobuf. Эти файлы понадобятся вам при подготовке входных данных, необходимых bundletool для создания набора App Bundle, как описано в следующем разделе.
Упаковка предварительно скомпилированного кода и ресурсов
Прежде чем использовать bundletool для создания набора App Bundle, необходимо предоставить ZIP-файлы, каждый из которых содержит скомпилированный код и ресурсы для определенного модуля приложения. Содержимое и структура ZIP-файла каждого модуля очень похожи на формат набора Android App Bundle.
Например, вы можете создать файл base.zip для базового модуля приложения и организовать его содержимое следующим образом:
| Файл или каталог | Описание |
|---|---|
manifest/AndroidManifest.xml
|
Манифест модуля в формате protobuf. |
dex/...
|
Каталог с одним или несколькими скомпилированными DEX-файлами приложения. Имена файлов должны быть следующими: classes.dex, classes2.dex, classes3.dex и т. д.
|
res/...
|
Содержит ресурсы модуля в формате protobuf для всех конфигураций устройств. Подкаталоги и файлы должны быть организованы так же, как в обычном APK-файле. |
root/..., assets/... и lib/...
|
Эти каталоги идентичны описанным в разделе Формат набора Android App Bundle. |
resources.pb
|
Таблица ресурсов приложения в формате protobuf. |
Подготовив ZIP-файлы для каждого модуля приложения, вы можете передать их в bundletool, чтобы создать набор App Bundle, как описано в следующем разделе.
Как создать набор App Bundle с помощью bundletool
Чтобы создать набор App Bundle, используйте команду bundletool build-bundle, как показано в примере ниже.
bundletool build-bundle --modules=base.zip --output=mybundle.aab
В таблице ниже приведены подробные описания флагов для команды build-bundle.
| Флаг | Описание |
|---|---|
--modules=path-to-base.zip, path-to-module2.zip,path-to-module3.zip
|
Указывает список ZIP-файлов модулей, которые bundletool должен использовать для создания набора App Bundle.
|
--output=path-to-output.aab
|
Указывает путь и название выходного файла *.aab.
|
--config=path-to-BundleConfig.json
|
Указывает путь к необязательному файлу конфигурации, который можно использовать для настройки процесса сборки. Подробнее о том, как настроить создание APK-файлов… |
--metadata-file=target-bundle-path:local-file-path
|
Указывает bundletool на необходимость упаковать необязательный файл метаданных в набор App Bundle. В этот файл можно включить данные, которые могут быть полезны для других этапов в вашей цепочке инструментов или для магазина приложений, например сопоставления ProGuard или полный список DEX-файлов вашего приложения.
target-bundle-path указывает путь относительно корневой папки пакета приложения, в которую вы хотите упаковать файл метаданных, а local-file-path – путь к самому локальному файлу метаданных. |
Настройка создания APK-файлов
Наборы App Bundle содержат файл BundleConfig.pb с метаданными, которые необходимы магазинам приложений, например Google Play, для создания APK-файлов.
Хотя bundletool создает этот файл автоматически, вы можете настроить некоторые аспекты метаданных в файле BundleConfig.json и передать его команде bundletool build-bundle. Позже bundletool преобразует этот файл и объединит его с версией protobuf, включенной в каждый набор App Bundle.
Например, вы можете включить или отключить определенные категории конфигурационных APK. В примере файла BundleConfig.json ниже отключены APK конфигурации, каждый из которых предназначен для определенного языка. Это значит, что ресурсы для всех языков включены в соответствующие основные или функциональные APK.
{
"optimizations": {
"splitsConfig": {
"splitDimension": [{
"value": "LANGUAGE",
"negate": true
}]
}
}
}
В файле BundleConfig.json также можно указать, какие типы файлов не нужно сжимать при упаковке APK. Для этого используются глобальные шаблоны, как показано ниже.
{
"compression": {
"uncompressedGlob": ["res/raw/**", "assets/**.uncompressed"]
}
}
Помните, что по умолчанию bundletool не сжимает нативные библиотеки приложения (в Android 6.0 и более поздних версиях) и таблицу ресурсов (resources.arsc). Чтобы узнать, что можно настроить в BundleConfig.json, изучите файл bundletool config.proto, написанный с использованием синтаксиса Proto3.
Как развернуть приложение из набора App Bundle
Если вы создали и подписали набор App Bundle, используйте bundletool, чтобы сгенерировать APK-файлы и развернуть их на устройстве.
Как подписать приложение с помощью командной строки
Для подписания приложения не требуется Android Studio. Вы можете подписать приложение из командной строки, используя apksigner для APK-файлов или jarsigner для наборов App Bundle, или настроить Gradle для подписания во время сборки. В любом случае сначала нужно создать закрытый ключ с помощью keytool, как показано в примере ниже.
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
В этом примере вам будет предложено ввести пароли для хранилища ключей и ключа, а также заполнить поля Distinguished Name (Уникальное имя) для ключа. Затем будет создано хранилище ключей в виде файла с названием my-release-key.jks, который будет сохранен в текущем каталоге (вы можете переместить его в любое место). Хранилище ключей содержит один ключ,действительный в течение 10 000 дней.
Теперь вы можете подписать APK-файл или набор App Bundle вручную или настроить Gradle так, чтобы приложение подписывалось во время сборки, как описано в следующих разделах.
Как подписать приложение вручную из командной строки
Если вы хотите подписать набор App Bundle из командной строки, используйте jarsigner.
Если вы хотите подписать APK-файл, используйте zipalign и apksigner:
Откройте командную строку. Для этого в Android Studio выберите View (Вид) > Tool Windows (Окна инструментов) > Terminal (Терминал) и перейдите в каталог, где находится неподписанный APK-файл.
Выровняйте неподписанный APK-файл с помощью
zipalign:zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
zipalignгарантирует, что все несжатые данные начинаются с определенного выравнивания байтов относительно начала файла, что может уменьшить объем ОЗУ, потребляемый приложением.Подпишите APK-файл закрытым ключом с помощью
apksigner:apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
В этом примере подписанный APK-файл выводится в
my-app-release.apkпосле подписания закрытым ключом и сертификатом, которые хранятся в одном файле хранилища ключей:my-release-key.jks.Инструмент
apksignerподдерживает и другие варианты подписания, в том числе подписание APK-файла с помощью отдельных файлов закрытого ключа и сертификата, а также подписание APK-файла несколькими подписавшими сторонами. Подробную информацию вы найдете в справочной статьеapksigner.Убедитесь, что APK-файл подписан.
apksigner verify my-app-release.apk
Как настроить Gradle для подписания приложения
Откройте файл build.gradle.kts уровня модуля и добавьте блок signingConfigs {} с записями для storeFile, storePassword, keyAlias и keyPassword, а затем передайте этот объект свойству signingConfig в типе сборки. Например:
Kotlin
android { ... defaultConfig { ... } signingConfigs { create("release") { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile = file("my-release-key.jks") storePassword = "password" keyAlias = "my-alias" keyPassword = "password" } } buildTypes { getByName("release") { signingConfig = signingConfigs.getByName("release") ... } } }
Яркий
android { ... defaultConfig { ... } signingConfigs { release { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile file("my-release-key.jks") storePassword "password" keyAlias "my-alias" keyPassword "password" } } buildTypes { release { signingConfig signingConfigs.release ... } } }
Теперь при сборке приложения с помощью задачи Gradle оно будет автоматически подписываться и оптимизироваться с помощью инструмента zipalign.
Кроме того, поскольку вы настроили конечную сборку с помощью ключа подписи, для этого типа сборки доступна задача install. Таким образом, вы можете создать, выровнять, подписать и установить APK-файл релиза на эмуляторе или устройстве с помощью задачи installRelease.
Приложение, подписанное закрытым ключом, готово к распространению. Однако сначала рекомендуем узнать, как опубликовать приложение, и ознакомиться с контрольным списком для запуска приложения в Google Play.