ошибка «Не удалось получить 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.