kesalahan "Tidak bisa mendapatkan BatchedBridge, pastikan bundel Anda sudah dikemas dengan benar" pada awal aplikasi


167

Mencoba membuat proyek reaksi asli di Android 4.4.2 Saya mendapatkan layar kesalahan ini

kata kesalahan

dan tidak dapat menemukan cara untuk menyelesaikannya. Saya mencoba me-restart packager, menghubungkan kembali perangkat, bahkan menginstal ulang reaksi asli dan memulai proyek baru. Pada 6.0.0 dan versi yang lebih baru berfungsi dengan baik.


1
Apakah Anda mendapatkan kesalahan ini setelah menjalankan react-native run-android? Saya mendapatkan kesalahan dalam hal ini yang aneh karena dalam mode debug seharusnya tidak perlu untuk bundel JS afaik karena seharusnya terhubung ke server paket.
Ryan H.

Saya memposting jawaban untuk masalah yang sama di sini: stackoverflow.com/a/45110063/706798
Anton

Saya menerima pesan kesalahan yang sama, tetapi untuk iOS. Adakah yang punya saran? Saya mencoba menjalankan 'react-native run-ios', tetapi tidak berhasil, karena XCode ada pada drive eksternal untuk saya.
ryanwebjackson

Jawaban:


145

Solusi yang mungkin untuk hal ini adalah Anda kemungkinan besar tidak mem-bundling aplikasi Anda terlebih dahulu, melakukan langkah-langkah berikut dan kemudian menggunakan app-debug.apk ke perangkat

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

(jika folder assetstidak ada, buat itu)

Kemudian jalankan dari root proyek

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

instal apk yang dibuat untuk perangkat Anda, dari lokasi: android/app/build/outputs/apk/app-debug.apk

beri tahu saya jika itu memperbaiki masalah Anda

EDIT :

Anda cukup memasukkannya ke package.json sebagai skrip untuk mengotomatiskannya, saya percaya ini akan diperbaiki dalam rilis asli-asli yang akan datang dan akan dieksekusi sebelum merakit APK final, maka ini tidak akan diperlukan (saya harap demikian juga)

taruh :

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

atau seperti yang disebutkan pada ikal ekuivalen, tetapi untuk sebagian besar kasus di atas lebih kuat


4
Ya itu berhasil !!! Apa yang baru saja saya lakukan? mengapa ikal? juga, dapatkah ini otomatis?
Zygro

Terima kasih banyak, Karena aplikasi saya tidak menautkan bundel asli Bereaksi.
GeekHades

3
Ini seperti retasan. Jika Anda mengemas JavaScript ke dalam satu file, tidakkah Anda tidak akan mendapatkan kemampuan memuat langsung saat menjalankan aplikasi selama pengembangan?
Liron Yahdav

2
ini bukan untuk pengembangan tetapi untuk kemasan APK aktual
tbo

tidak ada yang terjadi dengan saya masih mendapatkan kesalahan: - com.facebook.react.devsupport.JSException: Tidak bisa mendapatkan BatchedBridge, pastikan bundel Anda dikemas dengan benar
Dinesh R Rajput

110

Saya menemukan masalah ini juga. Apa yang saya lakukan adalah mematikan paksa aplikasi pada perangkat saya, lalu saya membuka konsol lain dan berlari

react-native start

dan kemudian saya membuka aplikasi lagi dari perangkat saya dan mulai bekerja lagi.

EDIT: Jika Anda menggunakan perangkat Android melalui USB dan mencabutnya atau komputer Anda mati, Anda mungkin harus menjalankan terlebih dahulu

adb reverse tcp:8081 tcp:8081

5
Ini memecahkan masalah saya saat menggunakan react-native run-android. Menggunakan react-native starttidak pernah diperlukan untuk saya ketika saya melakukannyareact-native run-ios
Dylan Pierce

2
Ini berhasil, tetapi mengapa ini terjadi? Apakah ini akan diperbaiki? Apakah saya harus selalu membuka 2 terminal, dan melakukan 'start' terlebih dahulu sebelum saya dapat menjalankannya di perangkat?
Marko

itu bekerja untuk saya juga! menghabiskan berjam-jam untuk menemukan solusi
dtjmsy

adb reverse tcp:8081 tcp:8081itu sendiri sudah cukup bagi saya. Terimakasih banyak!
Darius

Ini luar biasa setelah itu bisa Anda lakukan ./adb install
Faris Rayhan

27

Baru saja mendapat kesalahan ini. Inilah yang saya lakukan untuk memperbaikinya: Saya memilih Dismiss, Masuk ke menu Pengembang, lalu Dev Settings, Pilih Debug server host & port for device, saya menambahkan alamat IP komputer saya dan port:, 192.168.0.xx:8xxxgunakan apa pun yang diberikan mesin alamat IP pengembang Anda pada jaringan wifi Anda. Port biasanya:8081

Setelah saya melakukan ini, semua berjalan dengan baik. Juga, saat Anda berada di menu dev ingat untuk memilih Enable Live Reloaddan Debug JS Remotely, itu membuat hidup Anda jauh lebih mudah saat debugging.


Bekerja! Untuk pengguna ubuntu: jalankan ifconfig, kemudian temukan inet addr: xxx.xxx.xxx.xxx di mana xxx * adalah mesin pengembang Anda ip
henggana

Ini bekerja untuk saya di API level 19 / Kitkat 4.4, lihat stackoverflow.com/questions/31525431/… , facebook.github.io/react-native/docs/…
Michael Pita

Terima kasih! Saya hanya perlu melakukan konfigurasi ini ketika saya debug tanpa kabel USB (dengan alat seperti WiFi ADB).
Fidan Hakaj

4
Penting untuk dicatat bahwa Anda dapat membuat menu Pengembang yang menjadi referensi @cube di atas dengan mengocok perangkat Android Anda secara fisik. Itu mungkin tampak aneh, tetapi itulah yang akan membawanya. Kemudian ikuti petunjuk selanjutnya. Ini memperbaikinya untuk saya.
flyingace

22

Inilah yang bekerja untuk saya (Setelah mencoba setiap solusi lain yang saya temukan ...):

Jalankan adb reverse tcp:8081 tcp:8081di dalam\Android\sdk\platform-tools


1
dapat menjalankan perintah ini di mana saja, tidak harus b di platform-tools
goldylucks

1
Saya menemukan bahwa react-native run-androidupaya untuk menjalankan perintah itu dan tergantung pada variabel lingkungan Windows pathuntuk memuat platform-toolspath.
straya

1
Terima kasih, ini berhasil. PATH adalah C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools
chazefate

tidak, tidak bekerja pada emulator Windows 10 dan Android
pixel

16

Saya mendapatkan ini juga ketika saya mulai untuk pertama kalinya dengan React Native, menggunakan perangkat fisik. Jika itu masalahnya, Anda perlu melakukan beberapa hal tambahan sebelum dapat memulai. Anda harus memasukkan beberapa informasi tentang mesin pengembangan Anda di 'Pengaturan Dev' dari React Native.

Saat Anda melihat kesalahan, guncang perangkat Anda . Dialog akan muncul, opsi terakhir adalah 'Pengaturan Dev'. Pilih 'Debug server hot & port for device' dan masukkan IP lokal Anda dan port yang digunakan (biasanya 8081).

Lihat paragraf terakhir https://facebook.github.io/react-native/docs/running-on-device-android.html


Ini secara harfiah merupakan pengulangan, kata demi kata dari apa yang saya katakan di atas (pada bulan Agustus)
kubus

3
Saya tidak tahu bahwa saya perlu mengguncang perangkat. Pertama, saya akan mempostingnya sebagai komentar, tetapi saya tidak punya cukup poin untuk melakukan itu. Saya melakukan upvote posting Anda.
Richh94

Solusi paling sederhana dan terbersih. Terima kasih!
callOfCode

7

Jika tidak ada solusi yang berfungsi untuk Anda coba ini:

Saya menemukan bahwa <root>/android/app/build/intermediates/assets/debugfolder saya kosong dan dengan menjalankannya cd android && ./gradlew assembleDebugtidak membuat file-file yang diperlukan, yang kemudian digunakan oleh thread javascript di aplikasi asli reaksi kami.

Saya menjalankan secara manual perintah berikut yang seharusnya dibuat oleh perintah 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

Setelah menjalankan perintah ini, saya menemukan dua file bundel di direktori ini <root>/android/app/build/intermediates/assets/debug

Dan kemudian saya berlari lagi cd android && ./gradlew installDebugaplikasi saya mulai bekerja lagi.

Akan men-debug lebih banyak dan akan memperbarui apa yang sebenarnya gagal.


Hanya untuk mengklarifikasi apa yang terjadi tampaknya ketika mengintegrasikan reaksi asli ke proyek yang ada, jalur keluaran bundel TIDAK diatur secara otomatis, jadi Anda harus mengaturnya sendiri. Oleh karena itu jalur output bundel = / path / ke / aset?
robsstackoverflow

Anda btw terbaik.
robsstackoverflow

7

Di terminal terpisah , sambungkan perangkat Anda ke komputer dan jalankan perintah berikut:

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

Terminal aplikasi :

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

1
Mungkin Anda dapat memperluas jawaban Anda untuk memasukkan sedikit lebih detail tentang apa langkah masing-masing dalam jawaban Anda, dari direktori apa perintah harus dijalankan dll? Saya pikir itu akan membuat jawaban Anda jauh lebih bermanfaat.
niels

Ini jawaban yang tepat. Ini memungkinkan Anda untuk beralih dengan cepat dengan menghubungkan ke server asli yang bereaksi alih-alih harus mengemas kembali bundel dengan setiap perubahan.
Joshua Pinter

6

Ini sedikit terlambat tetapi ini benar-benar bekerja untuk saya.

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

Perintah pertama akan dibuat apkuntuk android dan gunakan di perangkat Anda jika terhubung. Ketika Anda membuka Aplikasi itu akan menampilkan layar merah dengan kesalahan. Kemudian jalankan perintah kedua yang akan menjalankan pemaket dan membangun bundel aplikasi untuk Anda.


5

Coba perintah ini di terminal dan kemudian muat ulang. Ini berhasil untuk saya

adb reverse tcp: 8081 tcp: 8081



5
  1. restart genymotion
  2. Lari react-native run-android
  3. masalah terselesaikan

Nyata? restart the genymotion? Ty vole.
Michal

Itu seperti mengatakan "oh situs web Anda tidak berfungsi? Coba mulai ulang server Anda."
Michal

4

Saya mengalami pengecualian yang sama pada perangkat Z3 Compact D5803 - 6.0.1

Saya membuka file .buckconfig dan mengubah baris:

target = Google Inc.:Google APIs:23

untuk

target = Google Inc.:Google APIs:24

Karena saya melihat di SDK Manager bahwa Android 6.X memiliki api level 24.


3

Bagi saya, itu karena adbtidak ada dalam PATH. Itu terletak /Users/man/Library/Android/sdk/platform-toolsuntuk saya, mungkin ada di tempat lain untuk Anda, tetapi bagaimanapun, temukan dan tambahkan ke jalur Anda untuk melihat apakah itu membantu.


3

Karena Anda menggunakan Android <5.0 Anda tidak dapat menggunakan adb reversemetode default , tetapi Facebook telah menambahkan dokumentasi resmi untuk terhubung ke server pengembangan melalui Wi-Fi , yang akan mendukung versi Anda. Mengutip instruksi untuk MacOS, tetapi mereka juga memilikinya untuk Linux dan Windows:

Metode 2: Terhubung melalui Wi-Fi

Anda juga dapat terhubung ke server pengembangan melalui Wi-Fi. Pertama-tama Anda harus menginstal aplikasi pada perangkat Anda menggunakan kabel USB, tetapi begitu itu dilakukan, Anda dapat melakukan debug secara nirkabel dengan mengikuti instruksi ini. Anda memerlukan alamat IP mesin pengembangan Anda saat ini sebelum melanjutkan.

Anda dapat menemukan alamat IP di System Preferences → Network.

Pastikan laptop dan ponsel Anda berada di jaringan Wi-Fi yang sama. Buka aplikasi React Native Anda di perangkat Anda. Anda akan melihat layar merah dengan kesalahan. Ini bagus. Langkah-langkah berikut akan memperbaikinya. Buka menu Pengembang dalam aplikasi. Buka Pengaturan Dev → Host server debug untuk perangkat. Ketikkan alamat IP mesin Anda dan port server dev lokal (mis. 10.0.1.1:8081). Kembali ke menu Pengembang dan pilih Muat Ulang JS.


3

Itu masalah ini "secara acak" dan kadang-kadang saya menyadari apa yang salah dalam skenario saya.

Setelah saya perbarui ke React-native-cli 2.0.1, ada output pesan ke log yang membantu saya menggali dan menemukan akar permasalahan:

Server JS tidak dikenali, melanjutkan dengan membangun ...

Setelah meneliti beberapa tautan, saya menemukan yang ini:

Tidak dapat mengenali server JS

Karena saya di windows, saya menjalankan netstat dan menemukan bahwa VLC player saya juga berjalan di port 8081 yang menyebabkan masalah. Jadi, dalam kasus saya, jika saya memulai server vlc sebelum server yang bereaksi asli itu tidak akan berfungsi.

Pesan log yang sama ini bukan keluaran pada versi sebelumnya dari CLI-native-CLI, membuatnya gagal dalam diam.

TL, DR: periksa apakah ada yang berjalan pada port yang sama dengan manajer paket (8081 secara default)


2

Masalah saya adalah bahwa saya memeriksa AndroidManifest.xmlfile saya dan telah menghapus baris

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

karena aplikasi saya tidak perlu internet. Namun, aplikasi debug asli yang bereaksi memang membutuhkan akses internet (untuk mengakses paket) Whoops. :)


1
Man kamu menyelamatkan hari saya.
Mengoyak


2

Silakan periksa apakah Anda memiliki kesalahan berikut ketika Anda menjalankan react-native run-android: adb server version (XX) doesn't match this client (XX); killing...

Dalam hal ini pastikan /usr/local/opt/android-sdk/platform-tools/adbdan /usr/local/bin/adbmenunjuk ke hal yang samaadb

Dalam kasus saya yang satu menunjuk ke /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK), tetapi yang lain menunjuk ke /usr/local/Caskroom/android-platform-tools/26.0.2/platform-tools/adb(Homebrew)

Dan masalah telah diperbaiki setelah keduanya menunjuk ke /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK)


1

Saya mendapat kesalahan ini juga, sangat bingung. karena semua jawaban tidak berfungsi. Hanya setelah menambahkan adb ke path.


1

Bagi saya, saya telah mengaktifkan sinkronisasi sisi dan aktif. Menutupnya segera membuat masalah itu hilang. Mungkin ada baiknya menutup komunikasi ini atau lainnya antara PC dan perangkat


1

Saya akhirnya harus membuka port yang saya gunakan (8081 secara default). Di Linux, Anda dapat melakukan hal berikut

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

Anda dapat menguji untuk melihat apakah Anda benar-benar perlu melakukan ini. Navigasikan saja ke server dev Anda di Chrome di perangkat Android Anda. Jika tidak merespons, maka ini yang Anda butuhkan. Jika itu merespons, maka ini tidak akan membantu Anda.


1

Cara saya adalah:

react-native start

Setelah itu di perangkat Anda menggunakan:

click to Reload.

Lihat di konsol reaksi-asli, itu akan mengambil data bundel.


Ini masalah saya, karena terminal tidak memulai. Terima kasih!
Nicolas Leucci

1

Saya memiliki masalah yang sama. Ketika saya membuat proyek asli reaksi melalui AwesomeProject buat-reaksi-asli-aplikasi itu bekerja dengan baik di aplikasi Expo di ponsel. Setelah itu saya ingin menggunakan proyek quickstart itu untuk mengembangkan proyek saya dan mendapatkan kesalahan yang sama seperti Anda.

Setelah beberapa penelitian saya menemukan lebih baik untuk memulai proyek baru dengan AwesomeProject init-asli init (dengan semua pengaturan dalam dokumen asli bereaksi) Kemudian jalankan perintah ini:

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/

Itu harus memperbaiki masalah dengan bundel (--dev false tidak menampilkan peringatan)

Yang perlu Anda lakukan agar aplikasi dapat berjalan di perangkat virtual / nyata Anda adalah:

react-native run-android

Dan itu seharusnya bekerja dengan baik. Setidaknya itu berhasil untuk saya.


1

Bagi saya masalahnya adalah 'adb' tidak dikenali - periksa jawaban ini .

Untuk memperbaikinya, tambahkan C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools ke Variabel Lingkungan


Ini tidak lebih dari komentar. Tetapi jika Anda menempelkan baris terakhir dari jawaban tertaut Anda di sini, ini menjadi jawaban yang valid. Kalau tidak, ada kemungkinan jawaban ini akan dihapus.
Amit Joshi

1

Sebagian besar dari kita menghadapi masalah ini untuk pertama kalinya, ketika kita mulai bereaksi proyek asli # 1.

Beberapa langkah sederhana memecahkan masalah saya:

Saya membuat proyek sampel menggunakan perintah:

react-native init ReactProject1

Larutan

Cara mengatasinya adalah membantu local-cli\runAndroid\adb.jsmenemukannya adb.exe, dengan cara yang samalocal-cli\runAndroid\runAndroid.js :

temukan ganti pernyataan di bawah nama proyek (apa pun yang Anda berikan)\node_modules\react-native\local-cli\runAndroid

Menggantikan:

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

Oleh:

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

setelah melakukan penggantian di atas, jalankan jalankan reaksi-asli jalankan-android di cmd Anda, itu akan bundel apk dan pada awalnya mencoba menginstal js bundle secara lokal di perangkat Anda. (Mendapat Sukses)


0

Saya mencoba banyak saran di atas / di bawah, tetapi pada akhirnya, masalah yang saya hadapi adalah izin dengan penjaga, yang diinstal menggunakan homebrew sebelumnya. Jika Anda melihat pesan terminal Anda saat mencoba menggunakan emulator, dan menemukan kesalahan 'Izin ditolak' berkaitan dengan penjaga bersama dengan pesan 'Tidak dapat mendapatkan BatchedBridge "ini di emulator Anda, lakukan hal berikut:

Pergi ke /Users/<username>/Library/LaunchAgentsdirektori Anda dan ubah pengaturan izin sehingga pengguna Anda dapat Baca dan Tulis. Ini terlepas dari apakah Anda benar-benar memiliki com.github.facebook.watchman.plistfile di sana atau tidak.


0

Saya menemukan bahwa saya perlu menambahkan juga

upgrade reaksi asli

untuk menjalankan aplikasi dengan benar.


0

Saya mendapat masalah yang sama tetapi itu adalah kesalahan bodoh dari diri saya sendiri ...

Dari Android studio , saya meluncurkan installDebug/installReleaseskrip gradle dari appprojet bukan rootprojet.


0

Cara termudah!

  • Hentikan server dan akhiri pembangunan proyek.
  • Buka terminal 'Node.js'.
    • Arahkan ke folder dengan proyek 'react-asli'.
    • Ketik 'react-asli start' - Mulai server asli yang bereaksi secara manual.
  • Buka Terminal Editor Kode Anda dan ketik 'react-native run-android.

Kamu baik untuk pergi!


0

Cukup restart sistem Anda atau bundel lengkap Anda dan masalah ini dapat diperbaiki.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.