помилка "Не вдалось отримати 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.