Сборка и установка неподписанного 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.