логотип PurpleSchool
логотип PurpleSchool

Сборка APK для Android на React Native

Автор

Олег Марков

Введение

React Native стал популярной платформой для разработки мобильных приложений — вы пишете код на JavaScript, а приложение работает как на Android, так и на iOS. В этой статье вы узнаете, как собрать APK-файл для Android из проекта на React Native. Я объясню, какие шаги нужно пройти, почему они нужны, поделюсь примерами команд, расскажу про типичные ошибки и дам советы по их устранению. Если вы только начинаете собирать APK или хотите понять тонкости процесса — эта статья будет полезна.

Сборка APK для Android на React Native требует правильной настройки Android SDK, Gradle и ключей подписи. Важно уметь конфигурировать build.gradle, генерировать подписанный APK и оптимизировать приложение для разных устройств и версий Android. Также необходимо учитывать безопасность и конфиденциальность данных. Если вы хотите детальнее погрузиться в сборку APK и другие аспекты Android разработки на React Native, — приходите на наш большой курс React Native и Expo Router. На курсе 184 уроков и 11 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Требования и подготовка окружения

Перед тем как перейти к процессу сборки APK, убедитесь, что ваше рабочее окружение готово.

Установка Node.js, npm и React Native CLI

Вам понадобятся Node.js и npm (или Yarn), а также React Native CLI.

# Установите React Native CLI глобально
npm install -g react-native-cli

Убедитесь, что используете Node.js версии, рекомендуемой документацией React Native для вашей версии.

Установка Java Development Kit (JDK)

Для Android необходим JDK 11 или новее.

# Для Ubuntu
sudo apt install openjdk-11-jdk
# Для MacOS чаще рекомендуют Homebrew:
brew install openjdk@11

Проверьте, что установленная версия JDK корректна:

java -version

Установка Android Studio и Android SDK

Скачайте Android Studio с официального сайта, установите ее. При первом запуске убедитесь, что установлен Android SDK и менеджер SDK Tools.

  • Для работы потребуется Android SDK Platform версии, соответствующие целевому API вашего приложения.
  • Установите Android SDK Build-Tools, Platform-Tools и необходимые эмуляторы (если нужно).
  • Проверьте переменные окружения: ANDROID_HOME, а также добавьте в PATH пути к toolchains (platform-tools, tools).

Пример настройки переменных окружения

export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools

Добавьте эти строки в .bashrc, .zshrc или другой профиль вашей оболочки.

Сборка дебаг-версии APK

Когда проект создан и окружение готово, можно сгенерировать debug APK для тестов на устройстве.

Использование Metro Bundler и запуск APK

Откройте терминал в каталоге проекта и выполните:

# Для запуска на эмуляторе Android
npx react-native run-android
  • Эта команда автоматически запустит сборку и установит приложение на подключенное устройство или выбранный в эмуляторе.
  • В каталоге проекта после сборки файл с расширением .apk можно найти по адресу:
android/app/build/outputs/apk/debug/app-debug.apk
  • Такой APK не подписан, но подходит для быстрой локальной проверки и отладки.

Использование Gradle напрямую

Если приложение не запускается через CLI или нужен только сам файл APK для передачи:

cd android
./gradlew assembleDebug

Апк-файл появится по тому же пути.

Сборка релизной (release) версии APK

Для публикации приложения в Google Play требуется собрать релизный APK и корректно его подписать.

Шаг 1. Генерация ключа для подписи (Keystore)

В вашем проекте React Native откройте терминал:

# Сгенерируем приватный ключ
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
  • Обязательно запомните пароль, alias и остальные параметры. Не публикуйте keystore в открытый доступ!
  • Файл keystore поместите в папку android/app.

Шаг 2. Настройка build.gradle

Откройте файл android/app/build.gradle и добавьте параметры подписи:

android {
  ...
  defaultConfig { ... }
  signingConfigs {
    release {
      storeFile file('my-release-key.keystore') // Путь к вашему keystore
      storePassword 'ВАШ_ПАРОЛЬ_К_ХРАНИЛИЩУ'      // Ваш пароль
      keyAlias 'my-key-alias'                     // Имя ключа
      keyPassword 'ВАШ_ПАРОЛЬ_К_КЛЮЧУ'            // Пароль к ключу
    }
  }
  buildTypes {
    release {
      signingConfig signingConfigs.release
      minifyEnabled enableProguardInReleaseBuilds // true если нужна минификация
      proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
  }
}

Чтобы не хранить пароли в коде, используйте файл gradle.properties и переменные.

Пример с gradle.properties

В файл android/gradle.properties добавьте:

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=мой_секретный_пароль
MYAPP_RELEASE_KEY_PASSWORD=мой_секретный_пароль

И в android/app/build.gradle:

signingConfigs {
  release {
    storeFile file(MYAPP_RELEASE_STORE_FILE)
    storePassword MYAPP_RELEASE_STORE_PASSWORD
    keyAlias MYAPP_RELEASE_KEY_ALIAS
    keyPassword MYAPP_RELEASE_KEY_PASSWORD
  }
}

Шаг 3. Сборка релизного APK

Перейдите в директорию android и выполните:

cd android
./gradlew assembleRelease
  • Через несколько минут релизный APK появится в:
android/app/build/outputs/apk/release/app-release.apk

Этот файл уже подписан и готов к загрузке в Google Play.

Инспекция, тестирование и оптимизация APK

Проверка подписи

Перед загрузкой в Google Play обязательно убедитесь, что APK действительно подписан.

jarsigner -verify -verbose -certs app-release.apk
  • В результате увидите информацию о ключе и подписи.
  • Можно также воспользоваться apksigner из Android Build Tools.

Проверка размера и состава APK

Полезно понять, из чего состоит APK и как уменьшить его размер.

# Получить информацию о составе пакета
unzip -l app-release.apk

# Использовать bundletool для анализа
java -jar bundletool-all.jar dump manifest --bundle=app-release.apk --output=manifest.txt

Оптимизация Proguard

Если ваш проект использует Proguard, убедитесь, что правила оптимизации настроены корректно — иногда минификация может сломать работу React Native или сторонних библиотек.

В файле android/app/proguard-rules.pro добавьте максимально щадящие правила для React Native:

# Не оптимизировать классы React Native
-keep class com.facebook.react.** { *; }
-keep class com.facebook.hermes.** { *; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp *; }
-dontwarn com.facebook.react.**

Генерация App Bundle (AAB) вместо APK

Google Play теперь требует загрузки Android App Bundle (AAB). Для этого процесс схож, меняется только команда:

cd android
./gradlew bundleRelease
  • Получившийся файл появится в:
android/app/build/outputs/bundle/release/app-release.aab
  • Этот файл используйте для публикации в Play Market. APK можно сгенерировать из AAB через Google Play или локальные инструменты.

Запуск и установка APK на устройство

Использование adb

Для простого тестирования быстро установите APK на подключенное устройство (USB/эмулятор):

adb install android/app/build/outputs/apk/release/app-release.apk

Если APK уже установлен, используйте с флагом -r для перезаписи:

adb install -r android/app/build/outputs/apk/release/app-release.apk

Особенности поддержки разных архитектур и версий Android

По умолчанию React Native собирает APK для архитектуры вашего хоста. Чтобы получить APK для всех популярных процессоров (armeabi-v7a, arm64-v8a, x86, x86_64), в файле android/app/build.gradle (в блоке defaultConfig) укажите:

defaultConfig {
    ...
    ndk {
        abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" // Сборка под все указанные архитектуры
    }
}
  • Это увеличит размер финального APK, но сделает его универсальным.
  • Можно собирать APK отдельно для каждой архитектуры.

Работа с переменными окружения и .env файлами

Если ваше приложение использует переменные среды (например, различные URL API для продакшн и теста), в React Native часто применяют модуль react-native-config.

Установка

npm install react-native-config

Использование

В корне создайте .env файл:

API_URL=https://api.example.com

Теперь обращайтесь к переменным из кода:

import Config from "react-native-config";
console.log(Config.API_URL); // https://api.example.com
  • Для правильной работы помните: переменные окружения инжектируются во время сборки APK. Если поменяли .env — соберите APK заново.

Решение частых ошибок и советы

1. Ошибка "SDK location not found"

Убедитесь, что переменная ANDROID_HOME верно настроена.

2. Проблемы с разрешениями при сборке

Иногда нужно запускать gradlew с правами администратора или давать права на папки:

chmod +x gradlew

3. "Unable to merge dex" / "Duplicate class"

Конфликт версий библиотек — проверьте зависимости в android/app/build.gradle и android/build.gradle.

4. Проблемы с Proguard

При минификации могут "ломаться" сторонние модули. Отключите Proguard или добавьте исключения (как указано выше).

5. Зависание сборки или ошибки Java Heap Space

Добавьте больше памяти для Gradle:

В android/gradle.properties:

org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8

Заключение

Вы изучили все этапы сборки APK для Android-приложений на React Native: от подготовки окружения до релизной подписки и загрузки на устройство. Я показал вам ключевые аспекты: создание keystore, настройка gradle, генерация release- и debug-версий, оптимизация и проверка файлов, а также типовые способы решения ошибок. Этот путь универсален для большинства React Native проектов и позволяет максимально автоматизировать и обезопасить процесс релизной публикации приложения.

Сборка под конкретную платформу требует отдельного внимания. Для разработки полноценного приложения необходимо также уметь управлять состоянием, обеспечивать навигацию и работать с API. На нашем курсе React Native и Expo Router вы найдете все необходимые знания для создания профессиональных React Native приложений. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир React Native прямо сегодня.

Частозадаваемые технические вопросы по теме статьи и ответы на них

Как собрать APK с нестандартным именем пакета?

Откройте файл android/app/build.gradle и в блоке defaultConfig укажите новое значение поля applicationId. Например: groovy defaultConfig { applicationId "com.example.myapp" ... } После этого выполните полную ресборку:
bash cd android ./gradlew clean ./gradlew assembleRelease

Как подключить Google Services (Firebase) при сборке APK?

В корень проекта android/app/ поместите файл google-services.json, затем подключите Google Services в android/build.gradle и android/app/build.gradle: ```groovy // android/build.gradle classpath 'com.google.gms:google-services:4.3.10'

// android/app/build.gradle apply plugin: 'com.google.gms.google-services' ``` После этих действий проведите сборку APK как обычно.

Как увеличить версию приложения при каждой новой сборке?

Измените значения versionCode и versionName в android/app/build.gradle. Например: groovy defaultConfig { versionCode 2 versionName "1.1" } Изменение versionCode обязательно для загрузки каждой новой версии APK в Play Market.

Как избавиться от ошибки Duplicate Resource при сборке?

Проверьте все зависимости и убедитесь, что нет конфликтующих файлов ресурсов (например, разных версий одной и той же библиотеки). Обычно помогает явное указание версии библиотеки или чистка кеша Gradle: bash cd android ./gradlew clean

Как ускорить время сборки APK?

  • Используйте кэширование сборки (Gradle Daemon уже включён по умолчанию).
  • Установите больше ОЗУ для Gradle через android/gradle.properties: org.gradle.jvmargs=-Xmx4096m
  • Избегайте ненужных зависимостей и крупных изображений в ресурсах.
  • Отключайте ненужные архитектуры через abiFilters в build.gradle.
Стрелочка влевоРеализация аутентификации пользователей в React NativeОбработка keyboard-событий в React NativeСтрелочка вправо

Постройте личный план изучения React-native до уровня Middle — бесплатно!

React-native — часть карты развития Mobile

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по React-native

Работа со ScrollView в React NativeРабота с видео в React NativeКак реализовать аудиоплеер на React NativeНастройка и использование input и textinput в React NativeИнтеграция видео плеера в приложение на React NativeИспользование выпадающих списков в React NativeСоздание и настройка native module на React NativeКак создать модальные окна в React NativeРабота с изображениями в React NativeОтображение списков данных в React NativeГайд по файловой системе в React NativeИнтеграция камеры в приложение на React NativeСоздание интерактивных кнопок в React Native
Как использовать векторные иконки в React Native5 популярных библиотек UI компонентов React NativeСоздание и использование tabs в React NativeРуководство по стилизации компонентов в React NativeОптимизация переходов между экранами в React NativeАдаптация safe area context на React NativeОбзор библиотек для навигации в React NativeСоздание сложных анимаций (reanimated) на React NativeИспользование библиотеки стилей Paper в React NativeРуководство по navigation в React NativeОптимизация отображения списков в React NativeКак реализовать linking на React NativeГайд по UI-китам для React NativeГде искать elements для приложения на React NativeРабота с цветами в React Native
Открыть базу знаний

Лучшие курсы по теме

изображение курса

React Native и Expo Router

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Основы JavaScript

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий