помилка "Не вдалось отримати BatchedBridge, переконайтеся, що ваш пакет правильно упакований" на початку програми


167

Намагаючись створити власний проект для реагування на Android 4.4.2, я отримую цей екран помилок

вказана помилка

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


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

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

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

Відповіді:


145

Можливе рішення для цього полягає в тому, що ви, ймовірно, спочатку не зв’язуєте свою програму, виконайте наступні дії та потім розгорніть додаток-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

дайте мені знати, якщо це вирішує вашу проблему

Редагувати :

Ви можете просто помістити його до пакета.json як сценарій для автоматизації, я вважаю, що він буде зафіксований у майбутніх випусках реакцій-нативної мови та буде виконано до монтажу остаточного 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
Так, це працює !!! Що я щойно робив? чому завивати? також, чи можна це автоматизувати?
— Zygro

Дякую вам дуже багато, тому що мій додаток не пов'язує рідний пакет React.
— GeekHades

3
Це здається злом. Якщо ви упаковуєте JavaScript в один файл, чи не отримаєте ви функцію перезавантаження в реальному часі під час роботи програми під час розробки?
— Лірон Ягдав

2
це не для розробки, а для фактичної упаковки APK
— tbo

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

110

Я також натрапив на це питання. Що я зробив - це примусити вбити додаток на своєму пристрої, потім я відкрив ще одну консоль і побіг

react-native start

а потім я знову відкрив додаток зі свого пристрою, і він знову почав працювати.

EDIT: Якщо ви користуєтесь пристроєм 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 встановити
— Фаріс Райхан

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/…
— Michael Ribbons

Дякую! Цю конфігурацію мені потрібно робити лише тоді, коли я налагоджую без USB-кабелю (з такими інструментами, як WiFi ADB).
— Фідан Хакай

4
Важливо зауважити, що ви можете скласти меню Developer, яке посилається на @cube вище, фізично похитуючи пристрій Android. Це може здатися дивним, але саме це підніме це. Потім дотримуйтесь решти інструкцій. Це зафіксувало це для мене.
— літаючийце

22

Це те, що працювало для мене (Після спроби кожного іншого рішення я знайшов ...):

Бігайте adb reverse tcp:8081 tcp:8081всередину\Android\sdk\platform-tools


1
Ви можете запустити цю команду де завгодно, не потрібно b в платформних інструментах
— goldylucks

1
Я виявив, що react-native run-androidспроби запустити цю команду залежать від змінної середовища Windows, pathщоб містити platform-toolsшлях.
— страя

1
Дякую, це спрацювало. PATH - це C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools
— chazefate

nope, не працює на Windows 10 та емуляторі Android
— піксель

16

Це я отримав і тоді, коли вперше почав працювати з React Native, використовуючи фізичний пристрій. Якщо це так, вам потрібно зробити кілька додаткових речей, перш ніж розпочати роботу. Потрібно ввести деяку інформацію про вашу розроблювальну машину в "Налаштування Dev" React Native.

Коли ви побачите помилку, струсіть свій пристрій . З'явиться діалогове вікно, останній варіант буде "Налаштування Dev". Виберіть "Сервер налагодження гарячого та порту для пристрою" та введіть локальний IP-адресу та використовуваний порт (як правило, 8081).

Дивіться останній абзац https://facebook.github.io/react-native/docs/running-on-device-android.html


Це буквально повторення, дослівно сказане вище (у серпні)
— куб

3
Я не знав, що мені потрібно струснути пристрій. Спочатку я б опублікував це як коментар, але мені не вистачає балів, щоб це зробити. Я підтримав вашу посаду.
— Richh94

Найпростіше і найчистіше рішення. Дякую!
— callOfCode

7

Якщо жодне з рішень не працює для вас, спробуйте це:

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

Я запустив вручну наступну команду, яку в ідеалі мала створити команда build debug.

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моя програма знову почала працювати.

Буде налагоджувати більше та оновить те, що фактично не працює.


Для роз'яснення того, що відбувається, здається, що при інтеграції нативного реагування в існуючий проект шлях виводу пакету НЕ встановлюється автоматично, тому його потрібно встановити самостійно. Звідси шлях виходу пакета = / шлях / до / активів?
— robsstackoverflow

Ти найкращий btw.
— 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
Можливо, ви могли б розширити свою відповідь, щоб включити трохи детальніше про те, що означають окремі кроки у вашій відповіді, з яких каталогів слід запускати команди тощо? Я думаю, що це зробить вашу відповідь набагато кориснішою.
— niels

Це правильна відповідь. Це дозволяє швидко повторити ітерацію, підключившись до природного сервера, що реагує, замість того, щоб перепакувати пакет із кожною зміною.
— Джошуа Пінтер

6

Трохи пізно, але це справді працює для мене.

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

Перша команда створить apkдля android і розгорне його на вашому пристрої, якщо його підключено. Коли ви відкриєте додаток, він з’явиться червоний екран з помилкою. Потім запустіть другу команду, яка запустить пакувач та створить пакет додатків для вас.


5

Спробуйте цю команду в терміналі, а потім перезавантажте. Це працювало для мене

adb зворотний tcp: 8081 tcp: 8081



5
  1. перезапустити генімоцію
  2. бігати react-native run-android
  3. проблема була вирішена

Насправді? restart the genymotion? Ty vole.
— Міхал

Це як сказати "о, ваш веб-сайт не працює? Спробуйте перезапустити сервер".
— Міхал

4

У мене був такий самий виняток на пристрої Z3 Compact D5803 - 6.0.1

Я пішов відкрити файл .buckconfig і змінив рядок:

target = Google Inc.:Google APIs:23

до

target = Google Inc.:Google APIs:24

Тому що я побачив у менеджері SDK, що 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). Поверніться до меню розробника та виберіть Reload JS.


3

Це питання було "випадковим чином", і мені довелося колись зрозуміти, що трапилося в моєму сценарії.

Після того як я оновився до React-native-cli 2.0.1, з'явилося повідомлення в журнал, яке допомогло мені викопати та знайти першопричину:

Сервер JS не розпізнається, продовжуючи збирати ...

Вивчивши деякі посилання, я знайшов це:

Неможливо розпізнати сервер JS

Оскільки я на Windows, я запустив netstat і виявив, що мій VLC-плеєр також працює на порту 8081, що спричинило проблему. Отже, у моєму випадку, якби я запустив сервер vlc перед початковим сервером реакції, він би не працював.

Це ж повідомлення журналу не було виведено на попередніх версіях react-native-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

Ви можете перевірити, чи справді вам потрібно це зробити. Просто перейдіть до свого сервера розробників у Chrome на пристрої Android. Якщо вона не відповідає, то це може бути те, що вам потрібно. Якщо вона реагує, то це вам не допоможе.


1

Мій шлях:

react-native start

Після цього на своєму пристрої використовуйте:

click to Reload.

Побачте в нативної реакції консолі, вона буде отримувати дані пакету js.


Це було моєю проблемою, оскільки термінал не запускався. Дякую !
— Nicolas Leucci

1

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

Після деяких досліджень я з'ясував , що краще почати новий проект з init AwesomeProject ( натиснувшись на реакцію) (з усіма параметрами в рідних документах react ). Потім запустіть цю команду:

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/

Це має виправити річ за допомогою пакета (--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');

зробивши вищезаміну, просто запустіть натиснутий на react-натиснення android у вашому cmd, він з’єднає apk і спочатку спробує встановити js-пакет локально у свій пристрій. (Отримав успіх)


0

Я спробував багато пропозицій вище / нижче, але в кінцевому підсумку проблема, з якою я зіткнулася, - це дозвіл на сторожа, який було встановлено за допомогою домашнього перекладу раніше. Якщо ви дивитесь на свої термінальні повідомлення під час спроби використовувати емулятор і зустрічаєте помилки "Дозвіл відмовлено" стосовно сторожа разом із цим повідомленням "Не вдалося отримати BatchedBridge" на емуляторі, зробіть наступне:

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


0

Я виявив, що мені потрібно також додати в

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

щоб коректно запустити програму.


0

У мене те саме питання, але це була дурна помилка від мене самого ...

У студії Android я installDebug/installReleaseзапускав сценарій gradle з projet appзамість rootprojet.


0

Найпростіший спосіб!

  • Зупиніть сервер і закінчіть збірку проекту.
  • Відкрийте термінал 'Node.js'.
    • Перейдіть до папки з проектом "реагувати на рідну".
    • Введіть 'реагувати нативний початок' - запускайте нативний сервер реакції вручну.
  • Перейдіть до свого терміналу редактора коду та введіть 'reakct-native run-android.

Вам добре піти!


0

Просто перезавантажте систему або повний пакет, і проблема може бути вирішена.

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