Вы можете выполнить все задачи сборки, доступные для вашего проекта для Android, с помощью инструмента командной строки Gradle Wrapper. Он доступен в виде пакетного файла для Windows (gradlew.bat) и скрипта оболочки для Linux и Mac (gradlew.sh) и находится в корневом каталоге каждого проекта, созданного в Android Studio.
Чтобы запустить задачу с помощью оболочки, используйте одну из следующих команд в окне терминала (в Android Studio выберите View > Tool Windows > Terminal):
- В командной оболочке Windows:
gradlew task-name
- На устройстве с macOS, Linux или Windows PowerShell:
./gradlew task-name
Чтобы посмотреть список всех доступных задач сборки для вашего проекта, выполните команду tasks:
gradlew tasks
Ниже описаны основные принципы создания и запуска приложений с помощью оболочки Gradle. Подробнее о том, как настроить сборку Android…
Если вы предпочитаете использовать инструменты Android Studio, а не командной строки, ознакомьтесь со статьей Как создать и запустить приложение.
Типы сборок
По умолчанию для каждого приложения Android доступны два типа сборки: отладочная (для отладки приложения) и релизная (для выпуска приложения). Каждый созданный файл должен быть подписан сертификатом, прежде чем вы сможете развернуть приложение на устройстве. Отладочная сборка автоматически подписывается отладочным ключом, предоставленным инструментами SDK (он небезопасен, и вы не можете опубликовать с ним приложение в Google Play), а выпускаемая сборка должна быть подписана вашим закрытым ключом.
Если вы хотите создать выпуск приложения, важно также подписать его с помощью подходящего ключа подписи. Если вы только начинаете работать с Android, то можете быстро запустить приложение на эмуляторе или подключенном устройстве, создав APK-файл для отладки.
Вы также можете определить специальный тип сборки в файле build.gradle.kts и настроить его так, чтобы он подписывался как отладочная сборка, добавив debuggable true. Подробнее о настройке вариантов сборки…
Как создать и развернуть APK-файл
Создание набора App Bundle – лучший способ упаковать приложение и загрузить его в Play Console. Однако если вам нужно быстро протестировать отладочную сборку или поделиться приложением с другими пользователями в виде готового к установке артефакта, лучше создать APK-файл.
Как создать APK-файл для отладки
Чтобы быстро протестировать приложение и отладить его, можно создать APK-файл для отладки.
Отладочный APK-файл подписан отладочным ключом, предоставленным инструментами SDK, и позволяет выполнять отладку с помощью adb.
Чтобы создать APK-файл для отладки, откройте командную строку и перейдите в корневой каталог проекта. Чтобы создать отладочную сборку, вызовите задачу assembleDebug:
gradlew assembleDebug
Будет создан APK-файл module_name-debug.apk в папке project_name/module_name/build/outputs/apk/.
Файл уже подписан ключом отладки и выровнен по zipalign, поэтому его можно сразу установить на устройство.
Чтобы создать APK и сразу же установить его на запущенный эмулятор или подключенное устройство, вызовите installDebug:
gradlew installDebug
Часть "Debug" в названиях задач выше – это просто версия названия варианта сборки, написанная в стиле CamelCase, поэтому ее можно заменить на любой тип сборки или вариант, который вы хотите собрать или установить. Например, если у вас есть вариант продукта "demo", вы можете создать отладочную версию с помощью задачи assembleDemoDebug.
Чтобы посмотреть все задачи сборки и установки, доступные для каждого варианта (включая задачи удаления), запустите задачу tasks.
Также ознакомьтесь с разделами о том, как запустить приложение на эмуляторе и как запустить приложение на устройстве.
Создайте набор App Bundle или APK-файл для выпуска.
Когда вы будете готовы выпустить и распространять приложение, вам нужно будет создать набор или APK-файл, подписанный закрытым ключом. Подробнее о том, как подписать приложение из командной строки…
Как развернуть приложение в эмуляторе
Чтобы использовать эмулятор Android, необходимо создать виртуальное устройство Android (AVD) с помощью Android Studio.
После того как вы создадите AVD, запустите эмулятор Android и установите приложение, выполнив следующие действия:
В командной строке перейдите в каталог
android_sdk/tools/и запустите эмулятор, указав свой AVD:emulator -avd avd_name
Если вы не знаете название AVD, выполните команду
emulator -list-avds.- Теперь вы можете установить приложение, используя одну из задач Gradle, упомянутых в разделе о том, как создать отладочный APK-файл, или инструмент
adb.Если APK-файл создан с помощью предварительной версии SDK (если
targetSdkVersion– это буква, а не число), вам нужно добавить параметр-tк командеinstall, чтобы установить тестовый APK-файл.adb install path/to/your_app.apk
Все созданные вами APK-файлы сохраняются в папке
project_name/module_name/build/outputs/apk/.
Подробнее о том, как запускать приложения в эмуляторе Android…
Как развернуть приложение на физическом устройстве
Чтобы запустить приложение на устройстве, необходимо включить на нем отладку по USB. Чтобы найти этот параметр, выберите Настройки > Для разработчиков.
Примечание. В Android 4.2 и более поздних версий режим разработчика по умолчанию скрыт. Чтобы включить его, выберите Настройки > О телефоне и семь раз нажмите на Номер сборки. Вернитесь на предыдущий экран и найдите раздел Для разработчиков.
После того как вы настроите устройство и подключите его через 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 содержат весь скомпилированный код и ресурсы приложения, но Google Play автоматически создает и подписывает APK-файлы на основе такого набора. В отличие от 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
Чтобы создать подписанный набор для загрузки в 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-файлов, готовых к развертыванию.
Таким образом, хотя тестировать наборы приложений с помощью bundletool и локально воссоздавать процесс создания APK-файлов в Google Play полезно, обычно нет необходимости вызывать bundletool для создания самого набора приложений. Вместо этого следует использовать Android Studio или задачи Gradle, как описано в предыдущих разделах.
Однако, если вы не хотите использовать Android Studio или задачи Gradle для сборки наборов App Bundle, например если вы используете собственную цепочку инструментов сборки, вы можете использовать bundletool из командной строки, чтобы создать набор App Bundle из предварительно скомпилированного кода и ресурсов. Если у вас нет этого инструмента,
скачайте bundletool из репозитория GitHub.
В этом разделе рассказывается, как упаковать скомпилированный код и ресурсы приложения, а также как с помощью bundletool из командной строки преобразовать их в набор Android App Bundle.
Создание манифеста и ресурсов в формате proto
Для работы bundletool требуется определенная информация о проекте приложения, например манифест и ресурсы приложения, в формате Protocol Buffer от Google, который также называется protobuf и использует расширение файла *.pb. Protobufs – это платформенно-независимый механизм сериализации структурированных данных, совместимый с языками программирования. Формат Protobufs аналогичен XML, однако он проще, компактнее и быстрее.
Как скачать AAPT2
Сгенерировать файл манифеста и таблицу ресурсов приложения в формате protobuf можно с помощью последней версии AAPT2 из репозитория Google Maven.
Чтобы скачать 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, чтобы создать пакет приложения, как описано в следующем разделе.
Как упаковать предварительно скомпилированный код и ресурсы
Прежде чем использовать bundletool для создания набора приложений, необходимо предоставить 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
Чтобы создать пакет приложения, используйте команду 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 должен использовать для создания пакета приложений.
|
--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 – путь относительно корневого уровня набора App Bundle, куда нужно поместить файл метаданных, а 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 с помощью
шаблонов glob. Для этого выполните следующие действия:
{
"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 для наборов приложений, или настроить Gradle так, чтобы он подписывал приложение во время сборки. В любом случае сначала нужно создать закрытый ключ с помощью keytool, как показано ниже:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
В примере выше вам будет предложено ввести пароли для хранилища ключей и ключа, а также значения полей "Отличительное имя" для ключа. Затем он создает хранилище ключей в виде файла 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.Примечание. Чтобы использовать инструмент
apksigner, необходимо установить Android SDK Build Tools версии 24.0.3 или более поздней. Вы можете обновить этот пакет с помощью SDK Manager. -
Убедитесь, что 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, Gradle подписывает приложение (и запускает zipalign) за вас.
Кроме того, поскольку вы настроили сборку для выпуска с помощью ключа подписи, для этого типа сборки доступна задача "install". Таким образом, вы можете создать, выровнять, подписать и установить APK-файл на эмулятор или устройство с помощью задачи installRelease.
Приложение, подписанное вашим закрытым ключом, готово к распространению, но сначала вам следует узнать больше о том, как опубликовать приложение, и ознакомиться с контрольным списком для запуска приложения в Google Play.