lỗi không thể nhận BatchedBridge, hãy đảm bảo gói của bạn được đóng gói đúng cách khi bắt đầu ứng dụng


167

Cố gắng tạo dự án gốc phản ứng trên Android 4.4.2 Tôi gặp lỗi màn hình này

nói lỗi

và không thể tìm ra cách nào để giải quyết nó. Tôi đã thử khởi động lại packager, kết nối lại thiết bị, thậm chí cài đặt lại phản ứng tự nhiên và bắt đầu dự án mới. Trên 6.0.0 và các phiên bản mới hơn, nó hoạt động tốt.


1
Bạn đã nhận được lỗi này sau khi thực hiện react-native run-android? Tôi gặp lỗi trong trường hợp này, điều này thật kỳ lạ bởi vì trong chế độ gỡ lỗi, không cần phải có gói JS afaik vì nó được cho là đang kết nối với máy chủ gói.
Ryan H.

Tôi đã đăng một câu trả lời cho cùng một vấn đề ở đây: stackoverflow.com/a/45110063/706798
Anton

Tôi nhận được thông báo lỗi tương tự, nhưng đối với iOS. Bất cứ ai có lời khuyên? Tôi đã thử chạy 'Reac -igen run-ios', nhưng nó không hoạt động, vì XCode nằm trên ổ đĩa ngoài đối với tôi.
ryanwebjackson

Câu trả lời:


145

Một giải pháp khả thi cho vấn đề này là bạn có thể không gói ứng dụng của mình trước, thực hiện các bước sau và sau đó triển khai ứng dụng-debug.apk cho thiết bị của bạn

$ 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"

(nếu thư mục assetskhông tồn tại, hãy tạo nó)

Sau đó chạy từ gốc dự án

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

cài đặt apk đã tạo cho thiết bị của bạn, từ vị trí: android/app/build/outputs/apk/app-debug.apk

cho tôi biết nếu điều đó khắc phục vấn đề của bạn

CHỈNH SỬA :

Bạn có thể chỉ cần đặt nó vào gói.json của mình dưới dạng tập lệnh để tự động hóa nó, tôi tin rằng nó sẽ được sửa trong các phiên bản sắp tới của Reac -igen và sẽ được thực thi trước khi lắp ráp APK cuối cùng, do đó điều này sẽ không cần thiết (tôi hy vọng cũng)

đặt :

"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/"
  },

hoặc như đã đề cập tương đương curl, nhưng đối với hầu hết các trường hợp, ở trên là mạnh mẽ hơn


4
Có nó hoạt động!!! Tôi vừa mới làm gì? Tại sao cuộn tròn? Ngoài ra, điều này có thể được tự động?
Zygro

Cảm ơn bạn rất nhiều, vì ứng dụng của tôi không liên kết gói gốc React.
GeekHades

3
Điều này có vẻ như một hack. Nếu bạn đóng gói JavaScript vào một tệp duy nhất, bạn sẽ không có khả năng tải lại trực tiếp trong khi chạy ứng dụng trong quá trình phát triển?
Liron Yahdav

2
đây không phải để phát triển mà là để đóng gói APK thực tế
tbo

Không có gì xảy ra với tôi vẫn gặp lỗi: - com.facebook.react.devsupport.JSException: Không thể nhận BatchedBridge, hãy đảm bảo gói của bạn được đóng gói chính xác
Dinesh R Rajput

110

Tôi đã gặp vấn đề này là tốt. Những gì tôi đã làm là buộc giết ứng dụng trên thiết bị của mình, sau đó tôi mở một giao diện điều khiển khác và chạy

react-native start

và sau đó tôi mở lại ứng dụng từ thiết bị của mình và nó bắt đầu hoạt động trở lại.

EDIT: Nếu bạn đang sử dụng thiết bị Android qua USB và đã rút phích cắm hoặc máy tính của bạn chuyển sang chế độ ngủ, trước tiên bạn có thể phải chạy

adb reverse tcp:8081 tcp:8081

5
Điều này giải quyết vấn đề của tôi khi sử dụng react-native run-android. Sử dụng react-native startkhông bao giờ là bắt buộc đối với tôi khi tôi đang làmreact-native run-ios
Dylan Pierce

2
Điều này đã làm việc, nhưng tại sao điều này xảy ra? Điều này sẽ được sửa chữa? Tôi có phải luôn mở 2 thiết bị đầu cuối không và thực hiện 'bắt đầu' trước khi tôi có thể chạy trên thiết bị?
Marko

Nó cũng có tác dụng với tôi ! đã dành hàng giờ để tìm giải pháp
dtjmsy

adb reverse tcp:8081 tcp:8081là đủ cho bản thân tôi Cảm ơn nhiều!
Darius

Điều này thật tuyệt vời sau khi bạn có thể làm ./adb cài đặt
Faris Rayhan

27

Chỉ cần có lỗi này. Đây là những gì tôi đã làm để khắc phục: Tôi đã chọn Dismiss, Đi vào menu Nhà phát triển, sau đó Dev Settings, Chọn Debug server host & port for device, Tôi đã thêm địa chỉ IP của máy tính và cổng : 192.168.0.xx:8xxx, sử dụng bất cứ máy nào nhà phát triển được gán địa chỉ IP của bạn trên mạng wifi. Cổng thường là:8081

Một khi tôi đã làm điều này, tất cả đã diễn ra tốt đẹp. Ngoài ra, trong khi bạn đang ở trong menu dev hãy nhớ chọn Enable Live ReloadDebug JS Remotelynó sẽ giúp cuộc sống của bạn dễ dàng hơn nhiều trong khi gỡ lỗi.


Làm! Đối với người dùng Ubuntu: chạy ifconfig, sau đó tìm inet addr: xxx.xxx.xxx.xxx trong đó xxx * là ip máy phát triển của bạn
henggana

Điều này làm việc cho tôi trên cấp độ API 19 / Kitkat 4.4, thấy stackoverflow.com/questions/31525431/... , facebook.github.io/react-native/docs/...
Michael Ribbons

Cảm ơn bạn! Tôi chỉ phải thực hiện cấu hình này khi gỡ lỗi mà không cần cáp USB (với các công cụ như WiFi ADB).
Fidan Hakaj

4
Điều quan trọng cần lưu ý là bạn có thể tạo menu Nhà phát triển mà @cube tham chiếu ở trên bằng cách lắc vật lý thiết bị Android của bạn. Điều đó có vẻ kỳ lạ, nhưng đó là những gì sẽ đưa nó lên. Sau đó làm theo các hướng dẫn còn lại. CÁi này đã sửa nó giúp tôi.
flyace

22

Đây là những gì làm việc cho tôi (Sau khi thử mọi giải pháp khác tôi đã tìm thấy ...):

Chạy adb reverse tcp:8081 tcp:8081vào trong\Android\sdk\platform-tools


1
có thể chạy lệnh này ở bất cứ đâu, không phải b trong các công cụ nền tảng
goldylucks

1
Tôi thấy rằng các react-native run-androidnỗ lực để chạy lệnh đó và phụ thuộc vào biến môi trường Windows pathđể chứa platform-toolsđường dẫn.
straya

1
Cảm ơn bạn, điều này đã làm việc. PATH là C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools
chazefate

Không, không hoạt động trên trình giả lập Windows 10 và Android
pixel

16

Tôi cũng nhận được điều này khi tôi bắt đầu lần đầu tiên với React Native, sử dụng một thiết bị vật lý. Nếu đó là trường hợp, bạn cần phải làm thêm một số điều trước khi bạn có thể bắt đầu. Bạn phải nhập một số thông tin về máy phát triển của mình trong 'Cài đặt phát triển' của React Native.

Khi bạn thấy lỗi, lắc thiết bị của bạn . Một hộp thoại sẽ bật lên, tùy chọn cuối cùng sẽ là 'Cài đặt Dev'. Chọn 'Gỡ lỗi máy chủ nóng & cổng cho thiết bị' và nhập IP cục bộ của bạn và cổng được sử dụng (thường là 8081).

Xem đoạn cuối của https://facebook.github.io/react-native/docs/rasty-on-device-android.html


Đây thực sự là một sự lặp lại, nguyên văn của những gì tôi đã nói ở trên (vào tháng 8)
khối lập phương

3
Tôi không biết rằng tôi cần lắc thiết bị. Đầu tiên, tôi sẽ đăng nó như một bình luận, nhưng tôi không có đủ điểm để làm điều đó. Tôi đã upvote bài viết của bạn.
Richh94

Giải pháp đơn giản và sạch sẽ nhất. Cảm ơn!
gọiOfCode

7

Nếu không có giải pháp nào phù hợp với bạn, hãy thử điều này:

Tôi thấy rằng <root>/android/app/build/intermediates/assets/debugthư mục của tôi trống và do chạy cd android && ./gradlew assembleDebugkhông tạo ra các tệp cần thiết, mà sau này được sử dụng bởi luồng javascript trong các ứng dụng gốc phản ứng của chúng tôi.

Tôi đã chạy thủ công lệnh sau mà lệnh xây dựng gỡ lỗi nên tạo lý tưởng.

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

Sau khi chạy các lệnh này, tôi tìm thấy hai tệp bó trong thư mục này <root>/android/app/build/intermediates/assets/debug

Và sau đó tôi chạy lại cd android && ./gradlew installDebugứng dụng của tôi bắt đầu hoạt động trở lại.

Sẽ gỡ lỗi nhiều hơn và sẽ cập nhật những gì đang thất bại thực sự.


Chỉ cần làm rõ những gì đang diễn ra dường như khi tích hợp một phản ứng gốc vào một dự án hiện có, đường dẫn đầu ra của gói KHÔNG được đặt tự động, vì vậy bạn phải tự đặt nó. Do đó đường dẫn đầu ra bó = / path / to / nội dung?
robsstackoverflow

Bạn là btw tốt nhất.
robsstackoverflow

7

Trong một thiết bị đầu cuối riêng biệt , kết nối thiết bị của bạn với máy tính và chạy các lệnh sau:

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

Thiết bị đầu cuối ứng dụng :

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

1
Có lẽ bạn có thể mở rộng câu trả lời của mình để bao gồm chi tiết hơn một chút về ý nghĩa của các bước riêng lẻ trong câu trả lời của bạn, từ thư mục nào các lệnh sẽ được chạy, v.v.? Tôi nghĩ rằng điều đó sẽ làm cho câu trả lời của bạn hữu ích hơn nhiều.
cháu gái

Đây là câu trả lời thích hợp. Điều này cho phép bạn lặp lại nhanh chóng bằng cách kết nối với máy chủ gốc phản ứng thay vì phải đóng gói lại gói với mỗi thay đổi.
Joshua Pinter

6

Đã quá muộn nhưng điều này thực sự hiệu quả với tôi.

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

Lệnh đầu tiên sẽ xây dựng apkcho Android và triển khai nó trên thiết bị của bạn nếu được kết nối. Khi bạn mở Ứng dụng, nó sẽ hiển thị màn hình màu đỏ có lỗi. Sau đó chạy lệnh thứ hai sẽ chạy packager và xây dựng gói ứng dụng cho bạn.


5

Hãy thử lệnh này trong terminal và sau đó tải lại. Nó làm việc cho tôi

adb đảo ngược tcp: 8081 tcp: 8081



5
  1. khởi động lại genymotion
  2. chạy react-native run-android
  3. các vấn đề đã được giải quyết

Cho thật? restart the genymotion? Ty vole.
Michal

Điều đó giống như nói "oh trang web của bạn không hoạt động? Hãy thử khởi động lại máy chủ của bạn."
Michal

4

Tôi đã có ngoại lệ tương tự trên thiết bị Z3 Compact D5804 - 6.0.1

Tôi đã mở tệp .buckconfig và thay đổi dòng:

target = Google Inc.:Google APIs:23

đến

target = Google Inc.:Google APIs:24

Bởi vì tôi đã thấy trong Trình quản lý SDK rằng Android 6.X có cấp độ api 24.


3

Đối với tôi, đó là vì adbkhông có trong PATH. Nó nằm ở /Users/man/Library/Android/sdk/platform-toolschỗ tôi, nó có thể là một nơi khác dành cho bạn, nhưng dù sao, hãy tìm nó và thêm nó vào đường dẫn của bạn để xem có giúp được gì không.


3

Vì bạn đang sử dụng Android <5.0, bạn không thể sử dụng adb reversephương thức mặc định , nhưng Facebook đã thêm tài liệu chính thức để kết nối với máy chủ phát triển qua Wi-Fi , hỗ trợ phiên bản của bạn. Trích dẫn các hướng dẫn cho MacOS, nhưng họ cũng có chúng cho Linux và Windows:

Phương pháp 2: Kết nối qua Wi-Fi

Bạn cũng có thể kết nối với máy chủ phát triển qua Wi-Fi. Trước tiên, bạn cần cài đặt ứng dụng trên thiết bị của mình bằng cáp USB, nhưng sau khi hoàn thành, bạn có thể gỡ lỗi không dây bằng cách làm theo các hướng dẫn sau. Bạn sẽ cần địa chỉ IP hiện tại của máy phát triển trước khi tiếp tục.

Bạn có thể tìm thấy địa chỉ IP trong Tùy chọn hệ thống → Mạng.

Đảm bảo máy tính xách tay và điện thoại của bạn nằm trên cùng một mạng Wi-Fi. Mở ứng dụng React Native trên thiết bị của bạn. Bạn sẽ thấy một màn hình màu đỏ có lỗi. Không sao đâu Các bước sau đây sẽ khắc phục điều đó. Mở menu Nhà phát triển trong ứng dụng. Chuyển đến Cài đặt Dev → Máy chủ gỡ lỗi cho thiết bị. Nhập địa chỉ IP của máy của bạn và cổng của máy chủ dev cục bộ (ví dụ: 10.0.1.1:8081). Quay trở lại menu Nhà phát triển và chọn Tải lại JS.


3

Nó có vấn đề "ngẫu nhiên" và đôi khi tôi nhận ra điều gì sai trong kịch bản của mình.

Sau khi tôi đã cập nhật lên React -igen-cli 2.0.1, có một thông báo xuất ra nhật ký giúp tôi đào và tìm ra nguyên nhân gốc:

Máy chủ JS không được nhận dạng, tiếp tục xây dựng ...

Sau khi nghiên cứu một số liên kết, tôi tìm thấy liên kết này:

Không thể nhận ra máy chủ JS

Vì tôi dữ liệu trên windows, tôi đã chạy netstat và phát hiện ra rằng trình phát VLC của tôi cũng đang chạy trên cổng 8081 gây ra sự cố. Vì vậy, trong trường hợp của tôi, nếu tôi khởi động máy chủ vlc trước máy chủ gốc phản ứng thì nó sẽ không hoạt động.

Thông điệp tường trình tương tự này đã được xuất ra trên các phiên bản trước của cli-Reac -igen, khiến nó thất bại trong âm thầm.

TL, DR: kiểm tra xem có bất cứ thứ gì chạy trên cùng một cổng với trình quản lý gói không (8081 theo mặc định)


2

Vấn đề của tôi là tôi đã xem qua AndroidManifest.xmltập tin của mình và đã xóa dòng

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

bởi vì ứng dụng của tôi sẽ không cần internet Tuy nhiên, ứng dụng gỡ lỗi gốc phản ứng không cần truy cập internet (để truy cập trình đóng gói) Rất tiếc. :)


1
Người đàn ông bạn đã cứu ngày của tôi. Đã xé toạc mái tóc của tôi :)
Barshe Cadilhac


2

Vui lòng kiểm tra nếu bạn có lỗi sau khi chạy react-native run-android: adb server version (XX) doesn't match this client (XX); killing...

Trong trường hợp đó, hãy chắc chắn /usr/local/opt/android-sdk/platform-tools/adb/usr/local/bin/adbđược chỉ vào cùngadb

Trong trường hợp của tôi, một cái được trỏ đến /Users/sd/Library/Android/sdk/platform-tools/adb(SDK Android), nhưng cái khác được trỏ đến /usr/local/Caskroom/android-platform-tools/26.0.2/platform-tools/adb(Homebrew)

Và sự cố đã được khắc phục sau khi cả hai chỉ vào /Users/sd/Library/Android/sdk/platform-tools/adb(SDK Android)


1

Tôi đã nhận được lỗi này quá, thực sự bối rối. Vì tất cả các câu trả lời không hoạt động. Chỉ sau khi thêm adb vào đường dẫn.


1

Đối với tôi, tôi đã kích hoạt đồng bộ hóa bên và kích hoạt. Đóng nó ngay lập tức làm cho vấn đề biến mất. Có thể đáng để đóng cái này hoặc bất kỳ giao tiếp nào khác giữa PC và thiết bị


1

Cuối cùng tôi đã phải mở cổng mà tôi đang sử dụng (8081 theo mặc định). Trên Linux, bạn có thể làm như sau

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

Bạn có thể kiểm tra để xem liệu bạn thực sự cần phải làm điều này. Chỉ cần điều hướng đến máy chủ dev của bạn trong Chrome trên thiết bị Android của bạn. Nếu nó không đáp ứng, thì đây có thể là những gì bạn cần. Nếu nó phản hồi, thì điều này sẽ không giúp bạn.


1

Cách của tôi là:

react-native start

Sau đó trong thiết bị của bạn bằng cách sử dụng:

click to Reload.

Xem trong giao diện điều khiển phản ứng tự nhiên, nó sẽ lấy dữ liệu gói js.


Đây là vấn đề của tôi, vì thiết bị đầu cuối không bắt đầu. Cảm ơn !
Nicolas Leucci

1

Tôi đã từng gặp vấn đề tương tự. Khi tôi đã tạo một dự án gốc phản ứng thông qua ứng dụng Awesome-Reac -igen-ứng dụng AwesomeProject, nó hoạt động tốt trong ứng dụng Expo trên điện thoại. Sau đó tôi muốn sử dụng dự án khởi động nhanh đó để phát triển dự án của mình và gặp lỗi tương tự như bạn.

Sau một số nghiên cứu, tôi thấy rằng tốt hơn là bắt đầu dự án mới với initProPro gốc tự nhiên (với tất cả các thiết lập trong tài liệu gốc phản ứng) Sau đó chạy lệnh này:

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/

Điều đó sẽ khắc phục sự cố với gói (--dev false không hiển thị cảnh báo)

Tất cả những gì bạn cần làm để ứng dụng chạy trên thiết bị ảo / thực của bạn là:

react-native run-android

Và nó sẽ hoạt động tốt. Ít nhất nó đã làm việc cho tôi.


1

Đối với tôi, vấn đề là 'adb' không được công nhận - hãy kiểm tra câu trả lời này .

Để khắc phục điều này, hãy thêm C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools vào biến môi trường


Điều này không có gì hơn bình luận. Nhưng nếu bạn dán dòng cuối cùng của câu trả lời được liên kết của bạn ở đây, thì đây sẽ là câu trả lời hợp lệ. Nếu không, có khả năng câu trả lời này sẽ bị xóa.
Amit Joshi

1

Hầu hết chúng ta lần đầu tiên đối mặt với vấn đề này, khi chúng ta bắt đầu phản ứng với dự án gốc # 1.

Vài bước đơn giản đã giải quyết vấn đề của tôi:

Tôi đã tạo một dự án mẫu bằng cách sử dụng lệnh:

react-native init ReactProject1

Giải pháp

Cách khắc phục là giúp local-cli\runAndroid\adb.jstìm adb.exe, giống như local-cli\runAndroid\runAndroid.js:

tìm câu lệnh thay thế dưới tên dự án (bất cứ điều gì bạn đã đưa ra)\node_modules\react-native\local-cli\runAndroid

Thay thế:

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

Bởi:

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

Sau khi thực hiện thay thế ở trên, chỉ cần chạy Reac-android run-android trong cmd của bạn, nó sẽ đóng gói apk và lúc đầu hãy thử cài đặt gói js cục bộ trong thiết bị của bạn. (Đã thành công)


0

Tôi đã thử nhiều đề xuất ở trên / bên dưới, nhưng cuối cùng, vấn đề tôi gặp phải là một quyền với người canh gác, được cài đặt bằng homebrew trước đó. Nếu bạn xem các tin nhắn đầu cuối của mình trong khi cố gắng sử dụng trình giả lập và gặp phải lỗi 'Quyền bị từ chối' liên quan đến người theo dõi cùng với thông báo 'Không thể nhận BatchedBridge "này trên trình giả lập của bạn, hãy làm như sau:

Chuyển đến /Users/<username>/Library/LaunchAgentsthư mục của bạn và thay đổi cài đặt quyền để người dùng của bạn có thể Đọc và Viết. Điều này là bất kể bạn có thực sự có một com.github.facebook.watchman.plisttập tin trong đó hay không.


0

Tôi thấy rằng tôi cũng cần phải thêm vào một

nâng cấp phản ứng

để có được ứng dụng chạy chính xác.


0

Tôi đã có cùng một vấn đề nhưng đó là một sai lầm ngu ngốc từ chính tôi ...

Từ studio Android , tôi đã tung ra installDebug/installReleasekịch bản gradle từ appprojet thay vì rootprojet.


0

Cách dễ nhất!

  • Dừng máy chủ và kết thúc xây dựng dự án.
  • Mở thiết bị đầu cuối 'Node.js'.
    • Điều hướng đến thư mục với dự án 'Reac -igen'.
    • Nhập 'Reac -igen start' - Khởi động máy chủ gốc phản ứng theo cách thủ công.
  • Chuyển đến Terminal Editor Terminal của bạn và nhập 'Reac -igen run-android.

Bạn tốt để đi!


0

Chỉ cần khởi động lại hệ thống của bạn hoặc gói hoàn chỉnh của bạn và vấn đề có thể được khắc phục.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.