ошибка «Не удалось получить BatchedBridge, убедитесь, что ваш пакет правильно упакован» при запуске приложения


167

Пытаясь создать реактивный проект на Android 4.4.2, я получаю этот экран ошибок

указанная ошибка

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


1
Вы получили эту ошибку после выполнения react-native run-android? Я получаю ошибку в этом случае, что странно, потому что в режиме отладки не должно быть необходимости в комплекте JS afaik, поскольку он должен подключаться к серверу пакетов.
Райан Х.

Я отправил ответ на ту же проблему здесь: stackoverflow.com/a/45110063/706798
Антон

Я получаю это сообщение об ошибке, но для iOS. У кого-нибудь есть совет? Я попытался запустить 'response-native run-ios', но он не работает, потому что XCode находится на внешнем диске для меня.
ryanwebjackson

Ответы:


145

Возможное решение для этого состоит в том, что вы, скорее всего, не будете сначала связывать свое приложение, выполните следующие шаги, а затем развернете свой app-debug.apk на своем устройстве.

$ cd myproject  
$ react-native start > /dev/null 2>&1 &  
$ curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

(если папка assetsне существует, создайте ее)

Затем запустите из корня проекта

$> (cd android/ && ./gradlew assembleDebug)

установить созданный APK на ваше устройство, из местоположения: android/app/build/outputs/apk/app-debug.apk

дайте мне знать, если это решит вашу проблему

РЕДАКТИРОВАТЬ :

Вы можете просто поместить его в свой package.json как скрипт для его автоматизации, я думаю, что это будет исправлено в следующих выпусках Reaction-native и будет выполнено до сборки окончательного APK, поэтому это не понадобится (надеюсь также)

ставить :

"scripts": {
    "build": "(cd android/ && ./gradlew assembleDebug)",
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "bundle-android": "react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --sourcemap-output android/app/src/main/assets/index.android.map --assets-dest android/app/src/main/res/"
  },

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


4
Да, это работает!!! Что я только что сделал? почему скручиваемость? Кроме того, это может быть автоматизировано?
Зигро

Большое спасибо, потому что Мое приложение не связывает нативный комплект React.
GeekHades

3
Это похоже на взлом. Если вы упаковываете JavaScript в один файл, разве вы не получите возможность оперативной перезагрузки при запуске приложения во время разработки?
Лирон Яхдав

2
это не для разработки, но для фактической упаковки APK
tbo

со мной ничего не происходит, все еще получая ошибку: - com.facebook.react.devsupport.JSException: Не удалось получить BatchedBridge, убедитесь, что ваш пакет правильно упакован
Dinesh R Rajput

110

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

react-native start

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

РЕДАКТИРОВАТЬ: Если вы используете устройство Android через USB и отключили его или ваш компьютер перешел в спящий режим, возможно, вам придется сначала запустить

adb reverse tcp:8081 tcp:8081

5
Это решило мою проблему при использовании react-native run-android. Использование react-native startникогда не требовалось для меня, когда я делалreact-native run-ios
Дилан Пирс

2
Это сработало, но почему это происходит? Это будет исправлено? Нужно ли мне всегда открывать 2 терминала и сначала выполнить «пуск», прежде чем я смогу запустить его на устройстве?
Марко

у меня тоже работает! потратил часы, чтобы найти решение
dtjmsy

adb reverse tcp:8081 tcp:8081было достаточно само по себе для меня. Большое спасибо!
Дарий

Это здорово, после этого вы можете сделать ./adb install
Фарис Райхан

27

Просто получил эту ошибку. Вот что я сделал, чтобы исправить: я выбрал Dismiss, зашел в меню «Разработчик», затем Dev Settings, «Выбрать» Debug server host & port for device, я добавил IP-адрес компьютера и порт: 192.168.0.xx:8xxxиспользуйте любой IP-адрес, который назначен вашим компьютерам-разработчикам, в вашей сети Wi-Fi. Порт обычно:8081

Как только я это сделал, все прошло хорошо. Кроме того, когда вы находитесь в меню разработчика, не забудьте выбрать Enable Live Reloadи Debug JS Remotely, это значительно облегчает вашу жизнь при отладке.


Работает! Для пользователя ubuntu: запустите ifconfig, затем найдите inet addr: xxx.xxx.xxx.xxx, где xxx * - ваш ip
henggana, на

Это сработало для меня на уровне API 19 / Kitkat 4.4, см. Stackoverflow.com/questions/31525431/… , facebook.github.io/react-native/docs/…
Майкл Риббонс

Спасибо! Я должен сделать эту конфигурацию только при отладке без USB-кабеля (с такими инструментами, как WiFi ADB).
Фидан Хакай,

4
Важно отметить, что вы можете создать меню «Разработчик», на которое ссылается @cube, физически встряхивая ваше устройство Android. Это может показаться странным, но это то, что поднимет это. Затем следуйте остальным инструкциям. Это исправило это для меня.
flyace

22

Вот что сработало для меня (попробовав любое другое решение, которое я нашел ...):

Беги adb reverse tcp:8081 tcp:8081внутрь\Android\sdk\platform-tools


1
может запустить эту команду где угодно, не нужно b в platform-tools
goldylucks

1
Я обнаружил, что react-native run-androidпытается выполнить эту команду и зависит от переменной среды Windows, pathчтобы содержать platform-toolsпуть.
страя

1
Спасибо, это сработало. PATH - это C: \ Users \
ИМЯ

Нет, не работает на эмуляторе Windows 10 и Android
пиксель,

16

Я получил это также, когда впервые начал работать с React Native, используя физическое устройство. Если это так, вам нужно сделать некоторые дополнительные вещи, прежде чем вы сможете начать. Вы должны ввести некоторую информацию о своей машине для разработки в «Настройках разработчика» React Native.

Когда вы видите ошибку, встряхните ваше устройство . Появится диалоговое окно, последним вариантом будет «Dev Settings». Выберите «Отладка сервера и порт для устройства» и введите свой локальный IP-адрес и используемый порт (обычно 8081).

См. Последний абзац https://facebook.github.io/react-native/docs/running-on-device-android.html.


Это буквально повторение, дословное из того, что я сказал выше (в августе)
куб

3
Я не знал, что мне нужно встряхнуть устройство. Во-первых, я бы опубликовал это как комментарий, но у меня недостаточно очков, чтобы сделать это. Я сделал upvote ваш пост.
Richh94

Самое простое и чистое решение. Спасибо!
callOfCode

7

Если ни одно из решений не работает для вас, попробуйте это:

Я обнаружил, что моя <root>/android/app/build/intermediates/assets/debugпапка была пуста и при запуске cd android && ./gradlew assembleDebugне создавал необходимые файлы, которые позже используются потоком javascript в наших собственных нативных приложениях.

Я запустил вручную следующую команду, которую команда отладки сборки должна была создать в идеале.

node node_modules/react-native/local-cli/cli.js bundle --platform android --dev true --reset-cache --entry-file index.android.js --bundle-output /<path to dir>/android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest /<path to dir>/android/app/build/intermediates/res/merged/debug

После выполнения этих команд я нашел два файла пакета в этом каталоге <root>/android/app/build/intermediates/assets/debug

А потом я снова запустил cd android && ./gradlew installDebugмое приложение снова заработало.

Будет больше отлаживать и обновлять то, что на самом деле не работает.


Просто чтобы прояснить, что происходит, кажется, что при интеграции native-реакции в существующий проект путь вывода пакета НЕ устанавливается автоматически, поэтому вы должны установить его самостоятельно. Следовательно, выходной путь пакета = / путь / к / активам?
robsstackoverflow

Вы лучший кстати.
robsstackoverflow

7

В отдельном терминале подключите ваше устройство к компьютеру и выполните следующие команды:

react-native start 
cd user/Library/Android/sdk/platform-tools/
./adb reverse tcp:8081 tcp:8081

Терминал приложения :

react-native run-android 
install apk on your device from this location android/app/build/outputs/apk/app-debug.apk

1
Возможно, вы могли бы расширить свой ответ, включив в него немного больше информации о том, что означают отдельные шаги в вашем ответе, из каких каталогов должны выполняться команды и т. Д.? Я думаю, что это сделает ваш ответ гораздо более полезным.
Нильс

Это правильный ответ. Это позволяет быстро выполнять итерации, подключаясь к исходному серверу реагирования, вместо того, чтобы перепаковывать пакет с каждым изменением.
Джошуа Пинтер

6

Уже немного поздно, но это действительно работает для меня.

  1. react-native run-android,
  2. react-native start,

Первая команда создаст apkдля Android и развернет его на вашем устройстве, если он подключен. Когда вы откроете приложение, оно покажет красный экран с ошибкой. Затем запустите вторую команду, которая запустит упаковщик и соберет комплект приложений для вас.


5

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

ADB обратный протокол: 8081 протокол: 8081



5
  1. перезапустить genymotion
  2. бегать react-native run-android
  3. проблема была решена

Серьезно? restart the genymotion? Ты полевка.
Михал

Это все равно что сказать «о, ваш сайт не работает? Попробуйте перезапустить ваш сервер».
Михал

4

У меня было такое же исключение на устройстве Z3 Compact D5803 - 6.0.1

Я открыл файл .buckconfig и изменил строку:

target = Google Inc.:Google APIs:23

в

target = Google Inc.:Google APIs:24

Потому что я видел в SDK Manager, что Android 6.X имеет уровень API 24.


3

Для меня это потому что adbне было в PATH. Он находится /Users/man/Library/Android/sdk/platform-toolsдля меня, он может быть где-то еще для вас, но в любом случае, найдите его и добавьте к своему пути, чтобы посмотреть, поможет ли это.


3

Поскольку вы используете Android <5.0, вы не можете использовать adb reverseметод по умолчанию , но Facebook добавил официальную документацию для подключения к серверу разработки через Wi-Fi , которая будет поддерживать вашу версию. Цитирую инструкции для MacOS, но они также есть для Linux и Windows:

Способ 2: подключиться через Wi-Fi

Вы также можете подключиться к серверу разработки через Wi-Fi. Сначала вам необходимо установить приложение на ваше устройство с помощью USB-кабеля, но как только это будет сделано, вы можете выполнить беспроводную отладку, следуя этим инструкциям. Для продолжения вам понадобится текущий IP-адрес вашего компьютера.

Вы можете найти IP-адрес в Системных настройках → Сеть.

Убедитесь, что ваш ноутбук и ваш телефон находятся в одной сети Wi-Fi. Откройте приложение React Native на своем устройстве. Вы увидите красный экран с ошибкой. Хорошо. Следующие шаги это исправят. Откройте меню разработчика в приложении. Перейдите в Настройки Dev → Отладка хоста сервера для устройства. Введите IP-адрес вашей машины и порт локального сервера разработчика (например, 10.0.1.1:8081). Вернитесь в меню разработчика и выберите «Обновить JS».


3

Эта проблема возникла «случайно», и мне потребовалось некоторое время, чтобы понять, что не так в моем сценарии.

После того, как я обновил React-native-cli 2.0.1, в журнал было выведено сообщение, которое помогло мне откопать и найти основную причину:

Сервер JS не распознан, продолжается сборка ...

После изучения некоторых ссылок я нашел это:

Невозможно распознать сервер JS

Поскольку я нахожусь на окнах, я запустил netstat и обнаружил, что мой проигрыватель VLC также работал на порте 8081, вызывая проблему. Таким образом, в моем случае, если я запустил vlc-сервер до реактивного сервера, он не будет работать.

Это же сообщение журнала не было выведено на предыдущих версиях реагировать-родной-Cli, что делает его молчаливым сбой.

TL, DR: проверьте, работает ли что-либо на том же порту, что и менеджер пакетов (по умолчанию 8081)


2

Моя проблема была в том, что я просмотрел свой AndroidManifest.xmlфайл и удалил строку

<uses-permission android:name="android.permission.INTERNET" />

потому что моему приложению не понадобится интернет. Тем не менее, собственное приложение для отладки реакции требует доступа к Интернету (для доступа к упаковщику). :)


1
Человек ты спас мой день. Срывал с меня волосы :)
Кристоф Кадилхак,


2

Пожалуйста, проверьте, если у вас есть следующая ошибка при запуске react-native run-android: adb server version (XX) doesn't match this client (XX); killing...

В этом случае удостоверьтесь /usr/local/opt/android-sdk/platform-tools/adbи /usr/local/bin/adbуказывайте на то жеadb

В моем случае одно было указано /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK), а другое было указано на/usr/local/Caskroom/android-platform-tools/26.0.2/platform-tools/adb (Homebrew)

И проблема была исправлена ​​после того, как они оба указали /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK)


1

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


1

Для меня была включена боковая синхронизация и активен. Закрытие сразу же заставило проблему исчезнуть. Возможно, стоит закрыть эту или любую другую связь между ПК и устройством


1

В итоге мне пришлось открыть порт, который я использовал (по умолчанию 8081). В Linux вы можете сделать следующее

sudo iptables -A INPUT -p tcp --dport 8081 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 8081 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вы можете проверить, нужно ли вам это делать. Просто перейдите к вашему dev-серверу в Chrome на вашем Android-устройстве. Если он не отвечает, то это может быть то, что вам нужно. Если он ответит, то это вам не поможет.


1

Мой путь:

react-native start

После этого в вашем устройстве с помощью:

click to Reload.

Посмотрите в консоли response-native, это будет выборка данных js bundle.


Это была моя проблема, потому что терминал не запускался. Спасибо !
Николас Луччи

1

У меня такая же проблема. Когда я создавал собственный проект реагирования через приложение AwesomeProject create-Reaction-native-app, он хорошо работал в приложении Expo на телефоне. После этого я хотел использовать этот быстрый стартовый проект для разработки своего проекта и получил ту же ошибку, что и вы.

После некоторых исследований я обнаружил, что лучше начать новый проект с реактивной нативной инициализацией AwesomeProject (со всеми настройками в реактивной нативной документации), затем запустите эту команду:

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/

Это следует исправить с помощью bundle (--dev false не показывает предупреждения)

Все, что вам нужно сделать для запуска приложения на вашем виртуальном / реальном устройстве, это:

react-native run-android

И это должно работать просто отлично. По крайней мере, у меня это сработало.


1

Для меня проблема была в том, что «adb» не был распознан - проверьте это ответ.

Чтобы исправить это, добавьте C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools в переменные среды


Это не более чем комментарий. Но если вы вставите сюда последнюю строку вашего связанного ответа, это станет действительным ответом. В противном случае есть вероятность, что этот ответ будет удален.
Амит Джоши

1

Большинство из нас сталкиваются с этой проблемой впервые, когда мы начинаем реагировать на нативный проект # 1.

Несколько простых шагов решили мою проблему:

Я создал пример проекта с помощью команды:

react-native init ReactProject1

Решение

Исправление должно помочь local-cli\runAndroid\adb.jsнайти adb.exe, так же, какlocal-cli\runAndroid\runAndroid.js :

найти замену оператора под именем проекта (все, что вы дали)\node_modules\react-native\local-cli\runAndroid

Заменить:

const devicesResult = child_process.execSync('adb devices');

По:

const devicesResult = child_process.execSync( (process.env.ANDROID_HOME ? process.env.ANDROID_HOME + '/platform-tools/' : '') + 'adb devices');

выполнив вышеуказанную замену, просто запустите response-native run-android в своем cmd, он запустит apk и сначала попытается установить js bundle локально на вашем устройстве. (Получил успех)


0

Я попробовал многие из предложенных выше / ниже предложений, но в конечном итоге проблема, с которой я столкнулся, была проблема с разрешениями с помощью watchman, который был установлен с помощью homebrew ранее. Если вы просматриваете сообщения своего терминала при попытке использовать эмулятор и сталкиваетесь с ошибками «Permission denied» в отношении наблюдателя, а также с сообщением «Could not get BatchedBridge» на вашем эмуляторе, сделайте следующее:

Перейдите в свой /Users/<username>/Library/LaunchAgentsкаталог и измените настройки разрешений, чтобы ваш пользователь мог читать и писать. Это независимо от того, есть ли у вас com.github.facebook.watchman.plistфайл там.


0

Я обнаружил, что мне нужно также добавить в

реактивное обновление

чтобы приложение работало правильно.


0

Я получил ту же проблему, но это была глупая ошибка от меня ...

Из студии Android я installDebug/installReleaseзапускал скрипт gradle из appprojet вместо rootprojet.


0

Самый простой способ!

  • Остановите сервер и завершите сборку проекта.
  • Откройте терминал «Node.js».
    • Перейдите в папку с проектом «act-native ».
    • Введите «response-native start» - запуск собственного реагирующего сервера вручную.
  • Перейдите к терминалу редактора кода и введите «act-native run-android ».

Тебе хорошо идти!


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