Создайте свое приложение из командной строки

Вы можете выполнить все задачи сборки, доступные для вашего проекта Android, с помощью инструмента командной строки оболочки Gradle . Он доступен в виде пакетного файла для Windows ( gradlew.bat ) и сценария оболочки для Linux и Mac ( gradlew.sh ), и он доступен из корня каждого проекта, который вы создаете с помощью Android Studio.

Чтобы запустить задачу с помощью оболочки, используйте одну из следующих команд из окна терминала (в Android Studio выберите «Просмотр» > «Инструменты Windows» > «Терминал »):

  • В командной строке Windows:
    gradlew task-name
  • На Mac, Linux или Windows PowerShell:
    ./gradlew task-name

Чтобы просмотреть список всех доступных задач сборки для вашего проекта, выполните tasks :

gradlew tasks

Оставшаяся часть этой страницы описывает основы создания и запуска вашего приложения с помощью оболочки Gradle. Дополнительные сведения о настройке сборки Android см. в разделе Настройка сборки .

Если вы предпочитаете использовать инструменты Android Studio вместо инструментов командной строки, см. раздел Сборка и запуск приложения .

О типах сборки

По умолчанию для каждого приложения Android доступны два типа сборки: один для отладки вашего приложения ( отладочная сборка) и один для выпуска вашего приложения для пользователей ( релизная сборка). Полученные выходные данные каждой сборки должны быть подписаны сертификатом, прежде чем вы сможете развернуть свое приложение на устройстве. Отладочная сборка автоматически подписывается ключом отладки, предоставленным инструментами SDK (это небезопасно, и вы не можете публиковать ее в Google Play Store), а выпускную сборку необходимо подписывать вашим собственным закрытым ключом.

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

Вы также можете определить собственный тип сборки в файле build.gradle.kts и настроить его для подписи как отладочной сборки, включив debuggable true . Дополнительные сведения см. в разделе Настройка вариантов сборки .

Сборка и развертывание APK

Хотя создание пакета приложения — лучший способ упаковать приложение и загрузить его в 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

Часть «Отладка» в приведенных выше именах задач — это просто версия имени варианта сборки в верблюжьем регистре, поэтому ее можно заменить любым типом или вариантом сборки, который вы хотите собрать или установить. Например, если у вас есть «демо» версия продукта, вы можете собрать отладочную версию с помощью задачи assembleDemoDebug .

Чтобы просмотреть все задачи сборки и установки, доступные для каждого варианта (включая задачи удаления), запустите задачу tasks .

Также см. раздел о том, как запустить приложение на эмуляторе и запустить приложение на устройстве .

Создайте пакет выпуска или APK

Когда вы будете готовы выпустить и распространить свое приложение, вам необходимо создать пакет выпуска или APK, подписанный вашим закрытым ключом. Для получения дополнительной информации перейдите в раздел о том, как подписать приложение из командной строки .

Разверните свое приложение в эмуляторе

Чтобы использовать эмулятор Android, необходимо создать виртуальное устройство Android (AVD) с помощью Android Studio.

Если у вас есть AVD, запустите эмулятор Android и установите приложение следующим образом:

  1. В командной строке перейдите к android_sdk /tools/ и запустите эмулятор, указав свой AVD:

    emulator -avd avd_name

    Если вы не уверены в имени AVD, выполните emulator -list-avds .

  2. Теперь вы можете установить свое приложение, используя одну из задач установки 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/ .

Дополнительную информацию см. в разделе «Запуск приложений на аппаратном устройстве» .

Создайте пакет приложений

Наборы Android App Bundle включают в себя весь скомпилированный код и ресурсы вашего приложения, но откладывают создание APK и подпись в Google Play. В отличие от APK, вы не можете развернуть пакет приложений непосредственно на устройстве. Итак, если вы хотите быстро протестировать APK или поделиться им с кем-то еще, вам следует вместо этого создать APK .

Самый простой способ создать пакет приложений — использовать Android Studio . Однако если вам нужно создать пакет приложения из командной строки, вы можете сделать это с помощью Gradle или bundletool , как описано в разделах ниже.

Создайте пакет приложений с помощью Gradle

Если вы предпочитаете создавать пакет приложения из командной строки, запустите задачу Gradle bundle Variant в базовом модуле вашего приложения. Например, следующая команда создает пакет приложения для отладочной версии базового модуля:

./gradlew :base:bundleDebug

Если вы хотите создать подписанный пакет для загрузки в Play Console, вам необходимо сначала настроить файл build.gradle.kts базового модуля с информацией о подписи вашего приложения. Чтобы узнать больше, перейдите в раздел о том, как настроить Gradle для подписи вашего приложения . Затем вы можете, например, создать релизную версию своего приложения, и Gradle автоматически создаст пакет приложения и подпишет его с помощью информации о подписи, которую вы предоставляете в файле build.gradle.kts .

Если вместо этого вы хотите подписать пакет приложений в качестве отдельного шага, вы можете использовать jarsigner для подписания пакета приложений из командной строки. Команда для создания пакета приложений:

jarsigner -keystore pathToKeystore app-release.aab keyAlias

Создайте пакет приложений с помощью Bundletool.

bundletool — это инструмент командной строки, который Android Studio, плагин Android Gradle и Google Play используют для преобразования скомпилированного кода и ресурсов вашего приложения в пакеты приложений и создания APK-файлов, пригодных для развертывания, из этих пакетов.

Таким образом, хотя тестировать пакеты приложений с помощью bundletool и локально воссоздавать процесс создания APK-файлов в Google Play полезно, обычно вам не нужно вызывать bundletool для создания самого пакета приложений — вместо этого вам следует использовать задачи Android Studio или Gradle, как описано в предыдущем разделе. разделы.

Однако если вы не хотите использовать задачи Android Studio или Gradle для сборки пакетов (например, если вы используете собственную цепочку инструментов сборки), вы можете использовать bundletool из командной строки для создания пакета приложения из предварительно скомпилированного кода и ресурсов. . Если вы еще этого не сделали, загрузите bundletool из репозитория GitHub.

В этом разделе описывается, как упаковать скомпилированный код и ресурсы вашего приложения, а также как использовать bundletool из командной строки для преобразования их в пакет Android App Bundle.

Создайте манифест и ресурсы в формате прототипа.

bundletool требует, чтобы определенная информация о вашем проекте приложения, такая как манифест и ресурсы приложения, была в формате буфера протокола Google , который также известен как «protobuf» и использует расширение файла *.pb . Protobufs предоставляет независимый от языка, платформы и расширяемый механизм сериализации структурированных данных — он похож на XML, но меньше, быстрее и проще.

Скачать ААПТ2

Вы можете сгенерировать файл манифеста и таблицу ресурсов вашего приложения в формате protobuf, используя последнюю версию AAPT2 из репозитория Google Maven .

Чтобы загрузить AAPT2 из репозитория Google Maven, выполните следующие действия:

  1. Перейдите к com.android.tools.build > aapt2 в индексе репозитория .
  2. Скопируйте имя последней версии AAPT2.
  3. Вставьте имя версии, которое вы скопировали, в следующий URL-адрес и укажите целевую операционную систему: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/aapt2-version / aapt2-version aapt2-version . aapt2-version - [windows | linux | osx] .jar

    Например, чтобы загрузить версию 3.2.0-alpha18-4804415 для Windows, вы должны использовать: 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

  4. Перейдите по URL-адресу в браузере — загрузка AAPT2 должна начаться в ближайшее время.

  5. Распакуйте только что скачанный 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 .
resources.pb Таблица ресурсов вашего приложения в формате protobuf.

Подготовив ZIP-файл для каждого модуля вашего приложения, вы можете передать его в bundletool для создания пакета приложения, как описано в следующем разделе.

Создайте пакет приложений с помощью 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 упаковать необязательный файл метаданных в пакет приложения. Вы можете использовать этот файл для включения данных, таких как сопоставления ProGuard или полный список файлов DEX вашего приложения, которые могут быть полезны для других шагов в вашей цепочке инструментов или магазине приложений.

target-bundle-path указывает путь относительно корня пакета приложения, в который вы хотите упаковать файл метаданных, а local-file-path указывает путь к самому локальному файлу метаданных.

Настройте последующую генерацию APK

Пакеты приложений включают файл BundleConfig.pb , содержащий метаданные, необходимые магазинам приложений, например Google Play, при создании APK из пакета. Хотя bundletool создает этот файл за вас, вы можете настроить некоторые аспекты метаданных в файле BundleConfig.json и передать его команде bundletool build-bundle позже bundletool преобразует и объединяет этот файл с версией protobuf, включенной в каждый пакет приложения.

Например, вы можете контролировать, какие категории 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 .

Разверните свое приложение из пакета приложений

Если вы создали и подписали пакет приложений, используйте 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 или пакет приложения вручную или настроить Gradle для подписи вашего приложения в процессе сборки, как описано в разделах ниже.

Подпишите свое приложение вручную из командной строки.

Если вы хотите подписать пакет приложений из командной строки, вы можете использовать jarsigner . Если вместо этого вы хотите подписать APK, вам нужно использовать zipalign и apksigner , как описано ниже.

  1. Откройте командную строку — в Android Studio выберите «Просмотр» > «Инструменты Windows» > «Терминал» — и перейдите в каталог, где находится неподписанный APK.
  2. Выровняйте неподписанный APK с помощью zipalign :

    zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
    

    zipalign гарантирует, что все несжатые данные начинаются с определенного выравнивания байтов относительно начала файла, что может уменьшить объем оперативной памяти, потребляемой приложением.

  3. Подпишите APK своим закрытым ключом с помощью apksigner :

    apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
    

    В этом примере выводится подписанный APK в my-app-release.apk после его подписания закрытым ключом и сертификатом, которые хранятся в одном файле KeyStore: my-release-key.jks .

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

    Примечание. Чтобы использовать инструмент apksigner , у вас должна быть установлена ​​версия Android SDK Build Tools версии 24.0.3 или выше. Вы можете обновить этот пакет с помощью SDK Manager .

  4. Убедитесь, что ваш APK подписан:

    apksigner verify my-app-release.apk
    

Настройте Gradle для подписи вашего приложения

Откройте файл build.gradle.kts уровня модуля и добавьте блок signingConfigs {} с записями для storeFile , storePassword , keyAlias ​​и keyPassword , а затем передайте этот объект свойству signingConfig вашего типа сборки. Например:

Котлин


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) за вас.

Кроме того, поскольку вы настроили сборку выпуска с помощью ключа подписи, задача «установка» доступна для этого типа сборки. Таким образом, вы можете собрать, согласовать, подписать и установить APK-файл выпуска на эмуляторе или устройстве с помощью задачи installRelease .

Приложение, подписанное вашим закрытым ключом, готово к распространению, но сначала вам следует узнать больше о том, как опубликовать свое приложение , и просмотреть контрольный список запуска Google Play .