Android не удалось загрузить пакет JS

Я пытаюсь запустить AwesomeProject на моем Nexus5 (Android 5.1.1).

Я могу собрать проект и установить его на устройстве. Но когда я запускаю его, у меня появляется красный экран с надписью

Невозможно загрузить пакет JS. Вы забыли запустить сервер разработки или подключить свое устройство?

В реакции на родную iOS я могу загрузить jsbundle в автономном режиме. Как я могу сделать то же самое для Android? (Или, по крайней мере, где я могу настроить адрес сервера?)

Обновить

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

  1. react-native start >/dev/null 2>&1 &
  2. adb reverse tcp:8081 tcp:8081

Посмотрите пожалуйста ответ на dsissitka для более подробной информации.

Чтобы запустить без сервера, поместите jsfile в apk, выполнив:

  1. создайте папку ресурсов под android/app/src/main
  2. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

пожалуйста, посмотрите на ответ kzzzf для более подробной информации.

Ответ 1

Чтобы связать JS файл с вашим apk при запуске вашего сервера (react-native start), загрузите пакет в каталог ресурсов вашего приложения:

curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

В следующей версии (0.12) мы исправим команду react-native bundle, чтобы работать с проектами Android как ожидалось.

Ответ 2

Следующее заставило меня работать на Ubuntu 14.04:

cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081

Обновить: см.

Обновление 2: @scgough Мы получили эту ошибку, потому что React Native (RN) не смог получить JavaScript с сервера dev, работающего на наших рабочих станциях. Вы можете понять, почему это происходит здесь:

https://github.com/facebook/react-native/blob/42eb5464fd8a65ed84b799de5d4dc225349449be/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java#L116-L137

Если ваше приложение RN обнаруживает, что вы используете Genymotion или эмулятор, он пытается извлечь JavaScript из GENYMOTION_LOCALHOST (10.0.3.2) или EMULATOR_LOCALHOST (10.0.2.2). В противном случае предполагается, что вы используете устройство и пытается извлечь JavaScript из DEVICE_LOCALHOST (localhost). Проблема заключается в том, что dev-сервер работает на вашем рабочем месте localhost, а не на устройстве, поэтому, чтобы заставить его работать, вам нужно либо:

Ответ 3

Хорошо, я думаю, что я понял, в чем проблема. Это было связано с версией watchman, которую я запускал.

В новой оболочке запустите brew update затем: brew unlink watchman затем: brew install watchman

теперь вы можете запустить react-native start из папки проекта

Я оставляю эту оболочку открытой, создаю новое окно оболочки и запускаю: react-native run-android из моей папки проекта. Все в порядке с миром.

пс. Я изначально был на версии 3.2 сторожа. Это повысило меня до 3,7.

ПФС. Я новичок в этом, так что это может быть не самый быстрый путь к решению, но он сработал у меня.

* ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ДЛЯ РАБОТЫ/ОТКРЫТИЯ НА УСТРОЙСТВО *

Вы можете обнаружить, что если вы развертываете свое приложение на своем устройстве Android, а не в эмуляторе, вы получаете красный экран с ошибкой, говоря Unable to load JS Bundle. Вам нужно установить сервер отладки для вашего устройства, чтобы ваш компьютер работал... как его имя, так и IP-адрес.

  • Нажмите кнопку Menu устройства
  • Выберите Dev Settings
  • Выберите Debug server host for device
  • Введите IP-адрес вашего устройства и перезагрузите JS плюс ответный порт, например. 192.168.1.10:8081

Дополнительная информация: http://facebook.github.io/react-native/docs/running-on-device-android.html

Ответ 4

В каталоге проекта запустите

react-native start

Выводит следующее:

$ react-native start
 ┌────────────────────────────────────────────────────────────────────────────┐ 
 │  Running packager on port 8081.                                            │ 
 │                                                                            │ 
 │  Keep this packager running while developing on any JS projects. Feel      │ 
 │  free to close this tab and run your own packager instance if you          │ 
 │  prefer.                                                                   │ 
 │                                                                            │ 
 │  https://github.com/facebook/react-native                                  │ 
 │                                                                            │ 
 └────────────────────────────────────────────────────────────────────────────┘ 
Looking for JS files in
   /home/user/AwesomeProject 


React packager ready.

[11:30:10 PM] <START> Building Dependency Graph
[11:30:10 PM] <START> Crawling File System
[11:30:16 PM] <END>   Crawling File System (5869ms)
[11:30:16 PM] <START> Building in-memory fs for JavaScript
[11:30:17 PM] <END>   Building in-memory fs for JavaScript (852ms)
[11:30:17 PM] <START> Building in-memory fs for Assets
[11:30:17 PM] <END>   Building in-memory fs for Assets (838ms)
[11:30:17 PM] <START> Building Haste Map
[11:30:18 PM] <START> Building (deprecated) Asset Map
[11:30:18 PM] <END>   Building (deprecated) Asset Map (220ms)
[11:30:18 PM] <END>   Building Haste Map (759ms)
[11:30:18 PM] <END>   Building Dependency Graph (8319ms)

Ответ 5

Простое решение, которое работает для меня с Ubuntu 14.04.

react-native run-android

Эмулятор (уже запущенный) вернется: невозможно загрузить JS Bundle; снова запустите JS-сервер:

react-native start

Нажмите "Перезапустить JS" на эмуляторе. Это сработало для меня. Надеюсь, что это поможет.

Ответ 6

В приложении на Android я открыл Меню (Command + M в Genymotion) → Настройки Dev → Хост и порт сервера отладки для устройства

установите значение: localhost: 8081

Это сработало для меня.

Ответ 7

Попробовав комбинацию ответов здесь, это то, что работает для меня.

Я использую Genymotion как мой эмулятор.

1 Запустите эмулятор Genymotion.

2 От терминала

cd AwesomeProject
react-native run-android # it loads in genymotion and fails with bundle error
react-native start > /dev/null 2>&1 & # from dsissitka
adb reverse tcp:8081 tcp:8081 # from dsissitka

3 Перезагрузите с эмулятора.

Он загружается!

Теперь я могу начать развиваться.

Ответ 8

Удалите приложение со своего телефона! Я пробовал несколько шагов, но в конце концов.

  • Если вы пытались запустить приложение раньше, но не удалось, удалить его с вашего устройства Android.
  • Выполнить $ react-native run-android
  • Откройте приложение React Rage Shake Menu из вашего приложения на устройстве Android, перейдите к Dev Settings и затем Debug server host & port for device. Там введите IP-адрес вашего сервера (IP вашего компьютера) и хост 8081, например. 192.168.50.35:8081. На Mac вы можете найти IP-адрес вашего компьютера в System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address.
  • Снова запустите меню Rage Shake и нажмите Reload JS.

Ответ 10

У меня недостаточно репутации, чтобы комментировать, но это имеет в виду ответ dsissitka. Он также работает на Windows 10.

Чтобы повторить, следующие команды:

cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081

Ответ 11

Вот простые шаги для запуска вашего приложения на Android (выпуск):

1. Перейдите в свой корневой каталог приложения.

2. Выполните эту команду.

response-native bundle --platform android --dev false -entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest Android/приложение/SRC/основные/Рез

Все ваши файлы скопированы.

3. Создайте подписанный APK.

Откройте студию Android.

Сборкa > Сгенерировать подписанный APK > [Заполните необходимые данные, нажатие клавиши должно быть создано до этого шага]

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

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


Генерирование клавиш:

  • Перейти к C:\Program Files\Java\jdkx.x.x_x\bin

  • Run

keytool -genkey -v -keystore d:\my_private_key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Вероятно, он попросит вас заполнить некоторые детали. Сделайте это, и у вас есть файл с нажатой клавишей (my_private_key.keystore), который можно использовать для подписи вашего apk.

Ответ 12

Я получил это на Linux после остановки процесса react-native run-android. Кажется, сервер node все еще работает, поэтому при следующем запуске он не будет работать должным образом, и ваше приложение не сможет подключиться.

Исправление состоит в том, чтобы убить процесс node, который выполняется в Xterm, который вы можете убить ctrl-c в этом окне (проще), или вы можете найти его с помощью lsof -n -i4TCP:8081, затем kill -9 PID.

Затем запустите react-native run-android снова.

Ответ 13

Проверьте подключение Wi-Fi.

Другая возможность может заключаться в том, что вы либо не подключены к Wi-Fi, подключенному к неправильной сети, либо неправильный адрес ip в настройках вашего dev. По какой-то причине мой андроид отключился от Wi-Fi, и я начал получать эту ошибку, неосознанно.

Ответ 14

Работает на устройстве

Я нашел другой ответ.

  • adb reverse: работает только на Android 5.0+ (API 21).
  • Другое: откройте меню "Разработчик", встряхнув устройство, перейдите в "Настройки Dev", перейдите на узел "Отладочный сервер" для устройства, введите IP-адрес вашего компьютера и порт локального сервера

Ответ 15

Обновление

Теперь на окнах нет необходимости запускать инициируемый реакцией запуск. Пакетик будет запускаться автоматически.

Ответ 16

Одна важная вещь, чтобы проверить, что никто не упомянул: Проверьте локальный брандмауэр, убедитесь, что он выключен.

Смотрите мой ответ здесь: fooobar.com/questions/38939/...

Ответ 17

Я использую только Ubuntu и Android, и мне не удалось запустить его. Я нашел очень простое решение, которое должно обновить ваш файл package.json, изменив следующие строки:

"scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },

to

"scripts": {
    "start": "adb reverse tcp:8081 tcp:8081 && node node_modules/react-native/local-cli/cli.js start"
  },

И затем вы запустите сервер, набрав

npm run start

Это гарантирует, что устройство Android будет искать сервер node на вашем компьютере, а не локально на телефоне.

Ответ 19

Первоначальный вопрос был посвящен перезагрузке приложения на физическом устройстве.

Когда вы отлаживаете приложение на физическом устройстве (то есть через adb), вы можете перезагрузить пакет JS, нажав на верхнюю кнопку "действие" вашего устройства. Это откроет меню опций (перезагрузка, отладка JS удаленно...).

Надеюсь, что это поможет.

Ответ 20

Эту ошибку можно легко решить, выполнив следующие шаги:

    //run the command at /android sdk / platforms-tool folder
        adb reverse tcp:8081 tcp:8081

    //now come to root folder of your app
    1. npm start
    2. create 'assets' folder inside rootApp/android/app/src/main/
    3. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"
    4. make sure anyone physical or virtual device attached is running.
    5. react-native run-android

Ответ 21

Вы можете выполнить инструкцию, указанную на официальной странице чтобы устранить эту проблему. Эта проблема возникает на реальном устройстве, потому что пакет JS расположен в вашей системе разработки, и приложение внутри вашего реального устройства не знает об этом местоположении.

Ответ 22

В новой версии React Native (точно 0.59) конфигурация отладки находится внутри android/app/src/debug/res/xml/react_native_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="false">localhost</domain>
    <domain includeSubdomains="false">10.0.2.2</domain>
    <domain includeSubdomains="false">10.0.3.2</domain>
  </domain-config>
</network-security-config>

Ответ 23

Запустите два терминала на одном и том же терминале, и первый терминал запустит реактивный запуск и второй терминал отклик-собственный запустит android. Эта проблема решается просто. И удачи

Ответ 24

Запуск npm start из обработанного для меня справочного каталога.