Сборка и установка неподписанного APK на устройстве без сервера разработки?


166

Как я новичок в реакции-родной, так что если что-то не так в шагах, дайте мне знать.

Я создал реагировать родное приложение для Android с помощью команды в соответствии с документацией

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

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

реагировать-родной запуск андроид

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

введите описание изображения здесь

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

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

Не могли бы вы, ребята, помочь мне найти способ, которым как построить и неподписанный apk в реагировать родной?


1
Запустите «реактивный запуск», он будет обслуживать ваш пакет js в режиме разработки. Цель состоит в том, чтобы вы могли редактировать файлы JS на лету. Использование режима выпуска не требует какого-либо сервера, поскольку он будет включать в себя необходимый пакет. Смотрите ответ ниже
— Кар

Ответы:


250

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

Bundle debug build:

#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`

PS Другой подход может заключаться в модификации скриптов Gradle.


3
На случай, если кому-то не хватает активов: это сработало для меня--assets-dest ./android/app/src/main/res/
— Хуан Солано

11
И если при этом я получу большой красный экран при запуске приложения? (Примечание: я запускаю это сразу после извлечения)
— Саймон Форсберг

3
Как взять сборку для последней версии, потому что у нас нет index.android.js?
— Вивек

9
Люди с последней версией, пожалуйста, измените точку входа на --entry-file index.js, спасибо.
— Ришабх Бхатия

4
встроенный пакет --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest. / android / app / build / промежуточные / res / merged / debug для новой реактивной версии, где index.js унифицирован для ios и android
— ir2pid

101

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

Поставьте свой JS:

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

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/

11
И если при этом я получу большой красный экран при запуске приложения? (Примечание: я запускаю это сразу после извлечения)
— Саймон Форсберг

2
@SimonForsberg, если вы используете response ^ 0.5, измените точку входа на index.js вместо App.js или index.android.js, 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
— d.bayo

3
Не работает, эта команда создает apk, но этот apk не работает без сервера упаковщика.
— Вишал Чходвани

1
Это не сработает, потому что для этого требуется сервер разработки
— sheriff_paul

1
У меня та же проблема, при создании Debug-APK, я мог установить его, но мне нужен сервер Dev, и когда я использую релиз APK, я не мог установить его на свой телефон, я не знаю, что что-то не так
— имя

62

Последнее обновление

В корневой директории проекта

Убедитесь, что у вас уже есть каталог 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


Этот ответ действительно работает, большое спасибо,
— имя

Этот ответ действительно работает, большое спасибо,
— имя

@jeeva: как подключить приложение обратно к серверу разработки реагировать нативно?
— Майур Балдха

Точка, которую создают index.android.bundle, действительно важна для того, чтобы не использовать сервер разработки в хосте.
— Ли Элтон

@ Mayur Balha: Вы можете подключиться через USB или Wi-Fi (подключен в той же сети). Для подключения WiFi к серверу в вашем приложении реакции встряхните свой мобильный телефон на эмуляторе, нажмите Win + R, затем нажмите dev dev. Прокрутите вниз «Отладочный сервер и хост», введите свой IP-адрес и порт (в окне «Открыть Windows» введите «ipconfig» или откройте Mac терминал введите "ifconfig"), как 192.168.1.1:8080, затем снова нажмите ok, встряхните или нажмите Win + R для перезагрузки эмулятора, теперь вы можете увидеть, как приложение снова подключается к разработке (оно будет работать только для Debug, а не для Release Apk).
— Джива

29

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

Для реагирования родной старой версии (вы увидите 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 / приложение / сборка / выводы / apk /
  • Gradle 3.0+: android / приложение / сборка / выводы / apk / release /

не могли бы вы рассказать подробнее, как это решает проблему?
— Priyal

Я получил сообщение об ошибке в index.android.bundle и решил ее по вашему предложению. Спасибо ... :)
— зефир

6
Для меня это$ 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 assembleDebug
— Arif

Файл не найден: index.android.js ни в одном из корней проекта
— Anuj

1
Обратите внимание, что его --entry-file index.android.jsнеобходимо заменить --entry-file index.jsдля более новых проектов, которые находятся index.jsне index.android.jsв корневом каталоге своих проектов.
— 18:30

8

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

react-native run-android --variant=debug

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


1
самый простой ответ был самым эффективным с самого начала, он работал безупречно, проводил дни, тестируя различные командные строки и тонны конфигураций js, и все было возобновлено в этом
— Николас Сильва

4

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

Простой способ без реактивно-родной связки

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

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

С реактивно-родной связкой

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

Начиная с реактивной android/app/build/generated/assets/react/debug/index.android.jsверсии 0.57, эти пути для связки

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

react-native bundle --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 assembleDebug

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

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


3

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

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

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

  • приложение-release.apk
  • приложение-релиз-unaligned.apk

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


Вы можете установить / поделиться app-release.apk на любое устройство
— Дхарам Мали,

2
Обычно отладочная сборка имеет конфигурацию, отличную от сборки выпуска (например, она использует промежуточный API). Это не поможет, если вам нужен автономный APK, который использует конфигурацию сборки, отличную от выпуска,
— Josh

Этот APK предназначен только для разработки / тестирования.
— Дхарам Мали

3

Я на реагирую родной 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.

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

Примечание:

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

3

Может быть возможно создать неподписанную версию 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


3

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

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

  2. Бегать 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

  3. бегать cd android/ && ./gradlew assembleDebug

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

удачи!


1
Не работает !!!, он генерирует отладочный APK, но приложению по-прежнему нужен сервер разработки
— aName

Это не может работать в реакции-нативной 0,59,8, так как Gradle ожидает, что пакет будет в, android/app/build/generated/assets/react/debug/index.android.jsа активы будут в android/app/build/generated/res/react/debugкачестве реакции-нативной 0,57.
— TheBaj

Прекрасно работает для реакции нативных 0.60>
— Мосо Акиниеми

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.