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.

Zygro
sumber
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

tbo
sumber
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
Felipe
sumber
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.

kubus
sumber
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

Chaim Salzer
sumber
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

Richh94
sumber
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.

Sumit Kushwaha
sumber
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
Brijmohan Karadia
sumber
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.

Shamsher
sumber
5

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

adb reverse tcp: 8081 tcp: 8081

Praneeth
sumber
5

lihat masalah :

1. mulai asli-asli

2. klik Reload(R,R)pada perangkat Anda.

XYz Amos
sumber
5
  1. restart genymotion
  2. Lari react-native run-android
  3. masalah terselesaikan
Yang
sumber
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.

laszl0
sumber
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.

h - n
sumber
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.

Jesús Carrera
sumber
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)

Luiz Henrique Martins Lins Rol
sumber
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. :)

SpencerL
sumber
1
Man kamu menyelamatkan hari saya.
Mengoyak
2

Coba bersihkan cache

mulailah bereaksi asli --reset-cache

Hitesh Sahu
sumber
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)

Serhey Dolgushev
sumber
1

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

Bruce Lee
sumber
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

lee_dabiker
sumber
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.

Anthony Naddeo
sumber
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.

ThienSuBS
sumber
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.

Sebastian Voráč
sumber
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

Orang baik
sumber
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)

Deepak Panwar
sumber
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.

alexfigtree
sumber
0

Saya menemukan bahwa saya perlu menambahkan juga

upgrade reaksi asli

untuk menjalankan aplikasi dengan benar.

M. Solle
sumber
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.

Martin Choraine
sumber
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!

Jason
sumber
0

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

Vinayak Gupta
sumber