Spec-Zone.ru › React Native

Публикация в Google Play Маркет

Android требует, чтобы все приложения были подписаны цифровым сертификатом перед установкой. Для распространения вашего Android-приложения через Google Play Маркет оно должно быть подписано ключом для выпуска, который затем должен использоваться для всех будущих обновлений. С 2017 года Google Play может автоматически управлять подписанием релизов благодаря функции Подписи приложений Google Play. Однако перед загрузкой двоичного файла приложения в Google Play оно должно быть подписано ключом загрузки. Страница Подписание ваших приложений в документации Android Developers подробно описывает эту тему. Это руководство кратко описывает процесс, а также перечисляет шаги, необходимые для упаковки JavaScript-пакета.

Если вы используете Expo, прочитайте руководство Expo по Развертыванию в магазинах приложений, чтобы создать и отправить ваше приложение в Google Play Маркет. Это руководство работает с любым приложением React Native для автоматизации процесса развертывания.

Генерация ключа загрузки

Вы можете сгенерировать закрытый ключ подписи, используя keytool.

Windows

В Windows keytool необходимо запускать от C:\Program Files\Java\jdkx.x.x_x\bin, как администратор.

keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Эта команда запросит у вас пароли для хранилища ключей и ключа, а также поля имени Distinguished Name для вашего ключа. После этого она сгенерирует хранилище ключей как файл с именем my-upload-key.keystore.

Хранилище ключей содержит один ключ, действительный в течение 10000 дней. Псевдоним — это имя, которое вы будете использовать позже при подписи вашего приложения, поэтому запомните псевдоним.

macOS

В macOS, если вы не уверены, где находится папка JDK bin, выполните следующую команду, чтобы найти её:

/usr/libexec/java_home

Она выведет директорию JDK, которая будет выглядеть примерно так:

/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home

Перейдите в эту директорию с помощью команды cd /your/jdk/path и используйте команду keytool с правами sudo, как показано ниже.

sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Помните, что файл хранилища ключей должен быть защищён. В случае потери ключа загрузки или его компрометации вы должны следовать этим инструкциям.

Настройка переменных Gradle

  1. Поместите файл my-upload-key.keystore в директорию android/app в папке вашего проекта.
  2. Отредактируйте файл ~/.gradle/gradle.properties или android/gradle.properties, и добавьте следующее (замените ***** на правильный пароль хранилища ключей, псевдоним и пароль ключа):
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Это будут глобальные переменные Gradle, которые мы можем позже использовать в нашей конфигурации Gradle для подписи приложения.

Сохранение вышеперечисленных переменных Gradle в ~/.gradle/gradle.properties вместо android/gradle.properties предотвращает их отслеживание в системе контроля версий Git. Вам может потребоваться создать файл ~/.gradle/gradle.properties в домашнем каталоге пользователя, прежде чем вы сможете добавить переменные.

Если вы не хотите хранить свои пароли в открытом виде, и вы работаете в macOS, вы также можете хранить ваши учетные данные в приложении Keychain Access. Тогда вы можете пропустить две последние строки в ~/.gradle/gradle.properties.

Добавление конфигурации подписи в конфигурацию Gradle вашего приложения

Последним шагом конфигурации является настройка выпуска для подписи с использованием ключа загрузки. Откройте файл android/app/build.gradle в папке вашего проекта и добавьте конфигурацию подписи:

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
                storeFile file(MYAPP_UPLOAD_STORE_FILE)
                storePassword MYAPP_UPLOAD_STORE_PASSWORD
                keyAlias MYAPP_UPLOAD_KEY_ALIAS
                keyPassword MYAPP_UPLOAD_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

Генерация выпуска AAB

Выполните следующую команду в терминале:

cd android
./gradlew bundleRelease

Gradle's bundleRelease соберет весь необходимый JavaScript для запуска вашего приложения в AAB (Android App Bundle). Если вам нужно изменить способ объединения JavaScript-пакета и/или ресурсов drawable (например, если вы изменили имена файлов/папок по умолчанию или общую структуру проекта), ознакомьтесь с android/app/build.gradle, чтобы узнать, как обновить его, отражая эти изменения.

Убедитесь, что gradle.properties не включает org.gradle.configureondemand=true, поскольку это заставит сборку выпуска пропустить объединение JS и ресурсов в двоичный файл приложения.

Сгенерированный AAB можно найти в android/app/build/outputs/bundle/release/app-release.aab, и он готов для загрузки в Google Play.

Для того, чтобы Google Play принял формат AAB, для вашего приложения в Google Play Консоли должна быть настроена функция «Подпись приложения Google Play». Если вы обновляете существующее приложение, не использующее функцию «Подпись приложения Google Play», пожалуйста, ознакомьтесь с разделом миграции, чтобы узнать, как выполнить это изменение конфигурации.

Тестирование выпуска вашего приложения

Перед загрузкой выпуска в Play Маркет, убедитесь, что вы его тщательно протестировали. Сначала удалите любую предыдущую версию приложения, которую вы уже установили. Установите его на устройстве, используя следующую команду в корне проекта:

npx react-native run-android --variant=release

Обратите внимание, что --variant release доступна только в случае, если вы настроили подпись, как описано выше.

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

Публикация в других магазинах

По умолчанию сгенерированный APK содержит нативный код для архитектур процессоров x86 и ARMv7a. Это упрощает совместное использование APK, которые работают практически на всех устройствах Android. Однако это имеет недостаток: на любом устройстве будет часть неиспользуемого нативного кода, что приводит к ненужному увеличению размера APK.

Вы можете создать APK для каждого процессора, изменив следующую строку в файле android/app/build.gradle:

- ndk {
-   abiFilters "armeabi-v7a", "x86"
- }
- def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true

Загрузите эти файлы в магазины, которые поддерживают нацеливание на устройства, такие как Google Play и Amazon AppStore, и пользователи автоматически получат соответствующий APK. Если вы хотите загрузить в другие магазины, такие как APKFiles, которые не поддерживают несколько APK для одного приложения, измените также следующую строку, чтобы создать универсальный APK по умолчанию с бинарными файлами для обоих процессоров.

- universalApk false  // If true, also generate a universal APK
+ universalApk true  // If true, also generate a universal APK

Включение Proguard для уменьшения размера APK (необязательно)

Proguard — это инструмент, который может незначительно уменьшить размер APK. Он делает это, удаляя части Java-байткода React Native (и его зависимостей), которые ваше приложение не использует.

Убедитесь, что вы тщательно протестировали приложение, если включили Proguard. Proguard часто требует конфигурации, специфичной для каждой используемой вами нативной библиотеки. См. app/proguard-rules.pro.

Для включения Proguard отредактируйте файл android/app/build.gradle:

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = true

Миграция старых Android React Native приложений на использование подписи приложений Google Play

Если вы мигрируете со старых версий React Native, возможно, ваше приложение не использует функцию подписи приложений Google Play. Мы рекомендуем включить её для того, чтобы воспользоваться преимуществами, такими как автоматическое разделение приложения. Для перехода от старого способа подписи вам нужно начать с генерации нового ключа загрузки, а затем заменить конфигурацию подписи выпуска в android/app/build.gradle на использование ключа загрузки вместо выпуска (см. раздел о добавлении конфигурации подписи в Gradle). После этого вы должны следовать инструкциям с сайта справки Google Play для отправки вашего исходного ключа выпуска в Google Play.

Права по умолчанию

По умолчанию разрешение INTERNET добавляется в ваше Android-приложение, так как его используют практически все приложения. Разрешение SYSTEM_ALERT_WINDOW добавляется в ваш Android APK в отладочном режиме, но оно будет удалено в режиме производства.

© 2022 Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://reactnative.dev/docs/signed-apk-android

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API