Android не вдалося завантажити пакет JS


201

Я намагаюся запустити 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 для отримання більш детальної інформації.


Stll ще не вирішив проблему. Але тим часом ви можете спробувати це на своєму тренажері. Це прекрасно працює на моїй генімоції.
Брайан

коли я намагаюся ввести дві команди для запуску з локальним сервером, я отримую помилку в shellhell, кажучи: "Символ ampersand (&) заборонено". Я припускаю, що я повинен знаходитись у корені свого додатка-dir під час виконання команди?
користувач2236165

1
Чи означає це, що налагодження через USB на Android 4.1 неможливо, оскільки adb reverseне підтримується?
bonh

Я хотів би зазначити, що щоб мати змогу виконати adb reverse tcp:8081 tcp:8081потрібну версію ADB 1.0.32, reverseопція не в 1.0.31
jvalen

Відповіді:


110

Щоб зв'язати файл 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команду для роботи з андроїдними проектами, як очікувалося.


спасибі! Як я можу reactInstanceManager використовувати пакетний актив? Або магія просто відбувається автоматично?
Матвій

9
Не вдалося створити файл Попередження: android / app / src / main / tools / index.android.bundle: Немає такого файлу або Попередження: каталог
almeynman

2
Попередження: Не вдалося створити файл Попередження: android / app / src / main / properties / index.android.bundle: Немає такого файлу або Попередження: curl: (23) Не вдалося записати тіло (0! = 16167)
Shivang

3
@Shivang: Створіть активи каталогу в android / app / src / main. У мене була ця помилка, оскільки вона ще не існувала.
піскатор

1
Це найкращий і простий спосіб, коли ми розповсюджуємо додаток локально для тестування. (через тканину) дякую
Дінеш Анурудда

90

Наступне змусило мене працювати на 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 з сервера розробників, що працює на наших робочих станціях. Ви можете побачити, чому це відбувається тут:

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). Проблема полягає в тому, що сервер розробників працює на localhost вашої робочої станції, а не на пристрої, тому для того, щоб він працював, вам потрібно:


5
працює adb reverse tcp: 8081 tcp: 8081 працює також на osx
shyamal

Це працює! дуже дякую. Чи знаєте ви, чи є спосіб вказати jscodelocation на apk ресурс, як і main.jsbundle iOS?
Матвій

@dsissitka я можу просто запитати, щоб це записано тут у потоці - що це робить саме?
scgough

@Matthew не боїться. Вибачте!
діссітка

Що робити, якщо ми працюємо на Android 4.2 та отримуємо цю помилку: stackoverflow.com/questions/31525431/…
Augustin Рідінгер

39

Гаразд, я думаю, я зрозумів, у чому тут проблема. Це було пов'язано з версією, яку watchmanя працював.

У новій оболонці запустіть brew update тоді: brew unlink watchman then:brew install watchman

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

Я залишаю цю оболонку відкритою, створюю нове вікно оболонки і запускаю: react-native run-androidзі своєї папки проекту. З світом все гаразд.

пс. Я спочатку був на версії 3.2 сторожа. Це підвищило мене до 3,7.

pps. Я новачок у цьому, щоб, можливо, це не найшвидший шлях до рішення, але він спрацював для мене.

* БІЛЬШЕ ІНФОРМАЦІЇ ДЛЯ РОЗВ'ЯЗАННЯ / ВИМОГИ НА ПРИСТРІЙ

Ви можете виявити, що якщо розгорнути додаток на пристрої Android, а не на емуляторі, ви отримаєте червоний екран смерті із повідомленням про помилку Unable to load JS Bundle. Вам потрібно встановити сервер налагодження для вашого пристрою, щоб ваш комп’ютер працював в реакції ... або його ім'я, або IP-адреса.

  1. Натисніть Menuкнопку пристрою
  2. Виберіть Dev Settings
  3. Виберіть Debug server host for device абоChange Bundle Location
  4. Введіть IP-адресу Вашого пристрою та перезавантажте JS плюс порт реагування, наприклад 192.168.1.10:8081

Більше інформації: http://facebook.github.io/react-native/docs/running-on-device-android.html


@ jacobross85 Рада, що це допомогло! Дайте мені підсумок, якщо вам це подобається ;-)
scgough

1
Довелося запуститись brew uninstall watchmanперед тим, як встановити для мене останню версію.
Amozoss

Я додав трохи більше інформації для цих налагоджень на пристрої Android, а не в емулятор.
scgough

Уже запущена остання версія вартового, але це виправлено для мене. Weeeeird
pfac

1
Дякую за цього брата, це дуже корисно. Тому я дам вам підсумок.
Priyank Jotangiya

17

З каталогу проектів запустіть

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)

1
У мене також виникає проблема, про яку повідомила ОП. Я запускаю проект за допомогою react-native run-androidпапки проекту. Він будує ОК у терміналі, але як тільки програма відкриється на моєму пристрої, я отримую червоний екран, кажучиUnable to download JS bundle
scgough

6
вам потрібно запустити adb reverse tcp: 8081 tcp: 8081
Matthew

1
Я побіг adb reverse tcp: 8081 tcp: 8081 і я отримую помилку: закрита помилка: закрита
JacobRossDev

1
У мене те саме питання, помилка: закрито. Будь-яку допомогу, будь ласка?
Евстафій

Переконайтесь, що ваша ip-адреса є правильною у розділі "Налаштування Dev", якщо ви працюєте на Android. Якщо ви працюєте з динамічним IP-адресою, це може змінитися протягом ночі.
Сем Перселл

13

Просте рішення, яке працює для мене з Ubuntu 14.04.

react-native run-android

Емулятор (вже запущений) повернеться: Неможливо завантажити пакет JS; запустити знову сервер JS:

react-native start

Натисніть Reload JS на емуляторі. Це працювало для мене. Сподіваюся, це допоможе


Насправді працює. З усіх відповідей це найпростіше рішення. Не можу повірити, це не в офіційному документі.
bluecollarcoder

OP - це робота на пристрої, а не на емуляторі. Ці кроки не працюють на пристрої без додаткових налаштувань. Дивіться прийняту відповідь.
davidgoli

8

У додатку на 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 Перезавантажте емулятор.

Це завантажує!

Зараз я можу почати розвиватися.


get

FYI: Я зараз роблю вищезазначене з відповіддю "Даніель Масарін" про встановлення хоста сервера налагодження на мою WiFi адресу з портом 8081, він працює з RN v 0.17.0
ooolala

велике спасибі, це працює для мене :) на вище API 21+ працює лише це
Ашвіні Бхат

4

Видаліть додаток зі свого телефону! Я спробував кілька кроків, але це все вдалося.

  1. Якщо ви раніше намагалися запустити додаток, але не вдалося, видаліть його зі свого пристрою Android.
  2. Біжи $ react-native run-android
  3. Відкрийте меню React Rage Shake у своєму додатку на андроїд-пристрої, перейдіть на, Dev Settingsа потім на Debug server host & port for device. Там введіть IP вашого сервера (IP вашого комп'ютера) та хоста 8081, наприклад 192.168.50.35:8081. На комп'ютері ви можете знайти IP свого комп'ютера за адресою System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address.
  4. Відкрийте меню Rage Shake знову і натисніть Reload JS.


2

У мене недостатньо репутації для коментарів, але це стосується відповіді dsissitka. Він працює і в Windows 10.

Щоб повторити, командами є:

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

2

Ось прості кроки для запуску програми на android (випуск):

1. Перейдіть до кореня програми.

2. Виконайте цю команду.

реактивний пакет - платформа Android / src / main / res

Усі ваші файли скопійовані.

3. Створіть підписаний APK.

Відкрита андроїдна студія.

Створити> Створити підписаний APK> [Заповніть потрібні дані, перед цим кроком потрібно створити натискання клавіш]

АПК має бути створено без помилок. Встановіть на свій пристрій, і це має працювати без проблем.

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


Створення натискання клавіш:

  1. Перейдіть на C: \ Файли програм \ Java \ jdkx.x.x_x \ bin

  2. Біжи

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

Напевно, ви попросите заповнити деякі деталі. Зробіть це, і у вас є ваш файл натискання клавіш ( my_private_key.keystore ), який можна використовувати для підпису вашої apk.


після того, як react-native bundleя отримав помилку: дублювання ресурсів
Амір Шабані

1

Я отримував це в Linux після припинення react-native run-androidпроцесу. Здається, сервер вузлів все ще працює, тому наступного разу, коли ви запустите його, він не запуститься належним чином, і ваша програма не зможе підключитися.

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

Потім react-native run-androidзнову біжи .


1

Перевірте своє підключення до wifi.

Іншою можливістю може бути те, що ви або не підключені до Wi-Fi, підключені до неправильної мережі, або IP-адреса неправильна у ваших налаштуваннях розробника. Чомусь мій андроїд відключився від wifi, і я почав отримувати цю помилку, несвідомо.


Спасибі, це було все. За замовчуванням сервер налагодження досягається в локальній мережі. Тому якщо у вас немає доступу до Wi-Fi, ви не можете його отримати.
Павло

1

Запуск на пристрої

Я знайшов іншу відповідь.

  • adb reverse: працює лише на Android 5.0+ (API 21).
  • Інше: відкрийте меню розробника, струшуючи пристрій, перейдіть у Налаштування Dev , Перейдіть на хост сервера налагодження для пристрою , введіть IP-адресу вашого пристрою та порт локального сервера розробників.

1

Оновлення

Тепер у Windows немає необхідності запускати натиснуті на реаги. Пакувальник запуститься автоматично.



0

Я використовую лише Ubuntu та Android, і мені не вдалося запустити його. Я знайшов дійсно просте рішення - оновити файл package.json, змінивши наступні рядки:

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

до

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

А потім ви запускаєте сервер, набравши

npm run start

Це забезпечує андроїд-пристрій шукати сервер вузлів на вашому комп’ютері, а не локально на телефоні.


0

Початковий питання був про перевантаження додатки в phyisical пристрою.

Коли ви налагоджуєте програму на фізичному пристрої (тобто через adb), ви можете перезавантажити пакет JS, натиснувши ліву верхню кнопку "дії" вашого пристрою. Це відкриє меню опцій (Reload, Debug JS віддалено ...).

Сподіваюсь, це допомагає.


0

Цю помилку можна легко усунути, виконавши наступні кроки:

    //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

1
чи можна запускати adb reverse tcp:8081 tcp:8081в кореневій папці мого додатка?
Марсон Мао

знайти папку adb у вашій ОС. його в Android SDK / інструменти платформи /
Atif Hussain

1
але я бачу багато місць, де йдеться про те, що цю команду можна запустити у кореневій папці програми, також відповідь dsissitka пропонує запустити її в папці root app, тому я дійсно заплутався.
Марсон Мао

може бути, ця команда також керується реагуючим нативником. я не впевнений у цьому. але adb підтримується android sdk інструментами. Ви можете дізнатися більше деталей тут facebook.github.io/react-native/docs/…
Атіф Хуссей

1
@MarsonMao Залежно від налаштувань вашої системи, можливо, ви зможете запускати adb з каталогу своїх додатків. Докладніше читайте про змінну PATH та глобальні та локальні пакети.
mchandleraz

0

Ви можете дотримуватися інструкцій, зазначених на офіційній сторінці, щоб виправити цю проблему. Ця проблема виникає на реальному пристрої, оскільки пакет JS розташований у вашій системі розробки, а додаток всередині вашого реального пристрою не знає про своє місцезнаходження.


0

У новому 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>

0

Запустити два термінали на одному і тому ж першому терміналі запустити реакцію нативного запуску та другий термінал реагувати на нативному запуску андроїда цю проблему вирішують просто. І найкраща удача


0

Гей, я зіткнувся з цією проблемою зі своїм рідним проектом реагування, симулятор IOS працює чудово, але андроїд продовжував давати мені цю помилку. ось можливе рішення, яке працювало на мене.

крок 1, перевірте, чи дозволено adb-пристрій, запустивши у своєму терміналі: adb пристрої

якщо це несанкціоновано, запустіть наступні команди

крок 2, sudo adb kill-сервер крок 3, sudo adb start-сервер

потім перевірте, чи відображається команда adb devices у списку пристроїв, приєднаних до пристрою emulator-5554

замість несанкціонованого, якщо це пристрій замість несанкціонованого

крок 4, запустіть npx реактивний run-android

це працювало в моєму випадку, я сподіваюся, що це вирішить вашу проблему.


0

Я вважав це дивним, але знайшов рішення. Я помітив, що раз у раз моя папка проекту переходила лише для читання, і я не міг її зберегти від VS. Тому я прочитав пропозицію перенести NPM від локального PATH користувача до загальносистемної глобальної змінної PATH, і це спрацювало як шарм.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.