Поскольку я новичок в системе react-native, дайте мне знать, если что-то не так.

Я создал собственное приложение для Android, используя команду в соответствии с документацией

реагировать на родной android

при работе на устройстве использовалась следующая команда

react-native run-android

, что дает мне вывод 2 файлов apk в моей папке проекта / android / app / build / output / apk

enter image description here

теперь, когда я использую для установки этого apk после установки, он запрашивает подключение сервера разработки для связывания JS. Но мое требование состоит в том, чтобы пользователю не приходилось бороться с сервером разработки, просто ему нужно установить apk, и все готово.

Пройдены некоторые вопросы о переполнении стека, но бесполезно для создания неподписанного apk, который не требует сервера разработки.

Можете ли вы помочь мне найти способ сборки и неподписанного apk в react native?

kAy_4337270

Ответов: 16

Ответы (16)

Создать отладочный APK без dev-сервера

Если вы действительно хотите сгенерировать отладочный APK (для целей тестирования), который может работать без сервера разработки, Поздравляем! вот я, чтобы помочь вам. :)
Все говорят, что нам нужно запустить две команды: response-native bundle ..., а затем gradlew AssemblyDebug, но сгенерированный APK по-прежнему не работает без сервера разработки. После многих исследований и попыток я понял, что нам нужно изменить файл gradle (как на шаге 2). Просто выполните следующие действия:

  1. В вашем собственном проекте реакции перейдите в / android / app / src / main создайте папку assets
  2. редактировать android> app> build.gradle
project.ext.react = [
    ...
    bundleInDebug: true, // добавляем эту строку
]
  1. запустите эту команду в корневом каталоге вашего собственного проекта реакции
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
  1. Теперь заходим в папку android: cd android
  2. И запустите эту команду: gradlew AssemblyDebug
    (если сборка не удалась, попробуйте собрать buildDebug из студии android)

Это создаст файл app-debug.apk в каталоге android / app / build / output / apk / debug, который вы можете установить и запустить без dev-server.

После того, как вы выполните первый ответ, вы можете запустить приложение, используя

react-native run-android --variant=debug

И ваше приложение будет работать без упаковщика

Пожалуйста, следуйте этим шагам.

Объедините свои js-файлы:

if you have index.android.js in project root then run

react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

если у вас есть index.js в корне проекта, запустите

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

Создать отладочный apk:

cd android/
./gradlew assembleDebug

Тогда вы можете найти свой apk здесь:

cd app/build/outputs/apk/

Можно сгенерировать неподписанную версию apk для тестирования, чтобы ее можно было запускать на своем мобильном телефоне.

Изначально у меня появлялись ошибки красного экрана, о которых здесь упоминалось больше всего. но я последовал тому же, что упоминалось здесь, и это сработало для меня.

На консоли из рабочего каталога выполните эти четыре команды

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

cd android

gradlew assembleDebug

gradlew assembleRelease

И тогда APK файл будет производиться на: android \ app \ build \ output \ apk \ debug \ app-debug.apk

React версии 0.62.1

В корневом каталоге проекта

Убедитесь, что у вас уже есть каталог android / app / src / main / assets /, если не создать каталог, после этого создайте новый файл и сохраните его как index.android.bundleи поместите свой файл вот так android / app / src / main / assets / index.android.bundle

После этого запустите это

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

cd android && ./gradlew assembleDebug

Тогда вы можете получить apk в app / build / output / apk / debug / app-debug.apk

Начиная с response-native 0.57, ни один из ранее предоставленных ответов больше не будет работать, поскольку каталоги, в которых gradle ожидает найти пакет и активы, изменились.

Простой способ без пакета react-native

Самый простой способ создать отладочную сборку - вообще не использовать команду response-native bundle, а просто изменить файл app / build.gradle.

Внутри карты project.ext.react в файле app / build.gradle добавьте запись bundleInDebug: true. Если вы хотите, чтобы это не была сборка - dev (без предупреждений и минифицированного пакета), вам также следует добавить запись devDisabledInDebug: true на ту же карту.

With react-native bundle

Если по какой-то причине вам нужно или вы хотите использовать команду react-native bundle для создания пакета, а затем . / Gradlew assemblyDebug для создания APK с пакетом и активы, которые вы должны поместить в пакет и активы в правильные пути, где gradle может их найти.

Начиная с версии 0.57 для react-native, эти пути android / app / build / created / assets / response / debug / index.android.js для пакета

и android / app / build / generated / res / response / debug для ресурсов. Итак, полные команды для ручного объединения и сборки APK с пакетом и активами:

пакет response-native --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/generated/assets/react/debug/ index.android.bundle --assets-dest ./android/app/build/res/react/debug

, а затем

. / Gradlew buildDebug

Путь к пакету и активам

Обратите внимание, что пути, по которым gradle ищет пакет и ресурсы, могут быть изменены. Чтобы узнать, где находятся эти пути, посмотрите файл response.gradle в вашем каталоге node_modules / response-native. Строки, начинающиеся с def jsBundleDir = и def resourcesDir =, указывают каталоги, в которых gradle ищет пакет и ресурсы соответственно.

Добавить devDisabledInDebug: true в project.ext.react в файле build.gradle.

довольно поздно для партии но ни одно из решений хотя бы на 1 странице у меня не работает. Таким образом, я немного подробнее рассмотрел задачи оценки, зарегистрированные с помощью response;

просто добавьте bundleInDebug: true, как показано в ответе @Er Suman G

запустите . / Gradlew buildDebug или gradle.bat AssemblyDebug в зависимости от вашей среды в папке Android.

Это сгенерирует отлаживаемое приложение, не необходимое для сервера, в android / app / build / output / apk / debug

Following Aditya Singh's answer, the generated (unsigned) apk would not install on my phone. I had to generate a signed apk using the instructions here.

У меня сработало:

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Поместите файл my-release-key.keystore в каталог android / app в папке проекта. Затем отредактируйте файл ~ / .gradle / 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=****

Затем отредактируйте app / build.gradle и убедитесь, что там есть следующее (возможно, потребуется добавить разделы с signedConfigs signatureConfig):

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

Затем выполните команду cd android && ./gradlew buildRelease,

Для Windows cd android, а затем запустите gradlew buildRelease команда и найдите свой подписанный apk под android / app / build / output / apk / app-release.apk, или ** android / app / сборка / выходы / apk / release / app-release.apk **

Я нашел решение, изменяющее buildTypes следующим образом:

buildTypes {
  release {
    signingConfig signingConfigs.release
  }
}

На тот случай, если кто-то еще недавно столкнулся с этой же проблемой, я использую React Native 0.59.8 (также протестирован с RN 0.60), и я могу подтвердить некоторые другие ответы, вот шаги:

  1. Удалите последнюю скомпилированную версию вашего приложения, установленную на вашем устройстве

  2. Выполнить пакет response-native --platform android --dev false --entry-file index.js --bundle-output android / app / src / main / assets / index.android.bundle --assets-dest android / app / src / main / res

  3. запустить cd android / && ./gradlew buildDebug

  4. Загрузите свой app-debug.apk в папку android / app / build / output / apk / debug

удачи!

Вам необходимо вручную создать пакет для отладочной сборки.

Сборка отладки пакета:

#React-Native 0.59
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/src/main/assets/index.android.bundle --assets-dest ./android/app/src/main/res

#React-Native 0.49.0+
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

#React-Native 0-0.49.0
react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

Затем для сборки APK после сборки:

$ cd android
#Create debug build:
$ ./gradlew assembleDebug
#Create release build:
$ ./gradlew assembleRelease #Generated `apk` will be located at `android/app/build/outputs/apk`

П.С. Другой подход может заключаться в изменении скриптов gradle.

Для этого вы можете использовать два расширения. Это добавлено в react-native для установки следующих значений:

  1. disableDevInDebug: true: Отключает сервер разработки в отладке buildType
  2. bundleInDebug: true: добавляет jsbundle к отладке buildType.

Итак, ваш последний project.ext.react в android / app / build.gradle должен выглядеть, как показано ниже

project.ext.react = [
    enableHermes: false,  // clean and rebuild if changing
    devDisabledInDev: true, // Disable dev server in dev release
    bundleInDebug: true, // add bundle to dev apk
]

Я реагирую на родную версию 0.55.4, в основном мне приходилось связывать вручную:

react-native bundle --dev false --platform android --entry-file index.js --bundle- 
output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets- 
dest ./android/app/build/intermediates/res/merged/debug

Затем подключите устройство по usb, включите отладку по usb. Проверьте подключенное устройство с помощью adb devices.

Наконец, запустите response-native run-android, который установит отладочный apk на ваш телефон, и вы можете нормально запустить его с помощью сервера разработки

Примечание:

  • Начиная с версии 0.49.0, точка входа - одна index.js
  • gradlew AssemblyRelease генерирует только незаписанные версии apks, которые не могут быть установлены

Для пользователя Windows, если все шаги выполнены правильно из этого: https://facebook.github.io/react-native/docs/signed-apk-android.html

Вам нужно только запустить: gradlew assemblyRelease

И ваш файл будет:

  • app-release.apk
  • app-release-unaligned.apk

Расположение: E: \ YourProjectName \ android \ app \ build \ output \ apk

У меня в каталоге проекта выполните следующие команды.

Для реакции на родную старую версию (вы увидите index.android.js в корне):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew clean assembleRelease && cd ../

Для реакции на родную новую версию (вы просто видите index.js в корне):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew clean assembleRelease && cd ../

Файл apk будет сгенерирован по адресу:

  • Gradle <3.0: android / app / build / output / apk /
  • Gradle 3.0+: android / app / build / output / apk / release /

2022 WebDevInsider