hatası "BatchedBridge alınamadı, uygulamanın başlangıcında paketinizin doğru şekilde paketlendiğinden emin olun" hatası


167

Android 4.4.2'de yerel bir yerel proje oluşturmaya çalışıyorum Bu hata ekranını alıyorum

bahsedilen hata

ve çözmek için herhangi bir yol bulamadık. Paketleyiciyi yeniden başlatmayı, cihazı yeniden bağlamayı, hatta yerel tepkiyi yeniden yüklemeyi ve yeni bir projeyi başlatmayı denedim. 6.0.0 ve sonraki sürümlerde gayet iyi çalışıyor.


1
Bu hatayı yürüttükten sonra mı aldınız react-native run-android? Hata ayıklama modunda paket sunucusuna bağlanması gerekiyordu çünkü JS paket afaik gerek yok çünkü bu garip hatayı alıyorum.
Ryan

Aynı soruna burada bir cevap gönderdim: stackoverflow.com/a/45110063/706798
Anton

Aynı hata mesajını alıyorum, ancak iOS için. Kimsenin tavsiyesi var mı? 'React-native run-ios' çalıştırmayı denedim, ancak çalışmıyor, çünkü XCode benim için harici bir sürücüde.
ryanwebjackson

Yanıtlar:


145

Bunun için olası bir çözüm, büyük olasılıkla önce uygulamanızı bir araya getirmemeniz, aşağıdaki adımları gerçekleştirmemeniz ve ardından app-debug.apk dosyanızı cihazınıza dağıtmamanızdır.

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

(klasör assetsyoksa oluşturun)

Sonra proje kökünden çalıştırın

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

oluşturulan apk'yi konumdan cihazınıza yükleyin: android/app/build/outputs/apk/app-debug.apk

sorununuzu çözüp çözmediğini bana bildirin

DÜZENLE :

Basitçe paketinize koyabilirsiniz. Json'u otomatikleştirmek için bir komut dosyası olarak, reaksiyonun yerel sürümlerinin gelecek sürümlerinde düzeltileceğine ve son APK'yı monte etmeden önce yürütüleceğine inanıyorum, bu yüzden bu gerekmeyecek (umarım de)

koymak :

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

veya kıvrılma eşdeğeri belirtildiği gibi, ancak çoğu durumda yukarıdakiler daha sağlamdır


4
Evet çalışıyor!!! Az önce ne yaptım? neden kıvırmak? ayrıca, bu otomatikleştirilebilir mi?
Zygro

Çok teşekkür ederim, çünkü Uygulamam React yerel paketini bağlantılandırmıyor.
GeekHades

3
Bu bir hack gibi görünüyor. JavaScript'i tek bir dosyaya paketliyorsanız, geliştirme sırasında uygulamayı çalıştırırken canlı yeniden yükleme özelliğini alamazsınız?
Liron Yahdav

2
Bu geliştirme için değil, gerçek APK ambalaj için
tbo

hiçbir şey olmuyor hala hata alıyorum: - com.facebook.react.devsupport.JSException: BatchedBridge alınamadı, paketinizin doğru bir şekilde paketlendiğinden emin olun
Dinesh R Rajput

110

Ben de bu konuyla karşılaştım. Yaptığım şey, uygulamayı cihazımda zorla öldürmekti, sonra başka bir konsol açtım ve koştum

react-native start

ve uygulamayı tekrar cihazımdan açtım ve tekrar çalışmaya başladı.

DÜZENLEME: USB üzerinden bir android cihaz kullanıyorsanız ve fişini çektiyseniz veya bilgisayarınız uyku moduna geçtiyse, önce çalıştırmanız gerekebilir.

adb reverse tcp:8081 tcp:8081

5
Bu, kullanırken sorunumu çözdü react-native run-android. react-native startYaparken kullanmak benim için hiç gerekmedireact-native run-ios
Dylan Pierce

2
Bu işe yaradı, ama bu neden oluyor? Bu düzeltilecek mi? Her zaman 2 terminal açmam ve bir cihazda çalıştırmadan önce 'başlat' yapmam gerekir mi?
Marko

benim için de işe yarıyor! bir çözüm bulmak için saatler harcadı
dtjmsy

adb reverse tcp:8081 tcp:8081benim için tek başına yeterliydi. Çok teşekkürler!
Darius

Bundan sonra bu harika ./adb install
Faris Rayhan

27

Bu hatayı aldım. Düzeltmek için yaptım: DismissSeçti, Geliştirici menüsüne girdim, sonra Dev Settings, Seç Debug server host & port for device, Bilgisayarlarımın IP adresini ve bağlantı noktasını ekledim:, 192.168.0.xx:8xxxgeliştirici makinelerinize IP adresinizin kablosuz ağınızda atanmış olduğu her şeyi kullanın. Liman genellikle:8081

Bunu yaptıktan sonra her şey yolunda gitti. Ayrıca, dev menüsündeyken seçmeyi unutmayın Enable Live Reloadve Debug JS Remotelyhata ayıklama sırasında hayatınızı çok daha kolay hale getirir.


İşler! Ubuntu kullanıcısı için: çalıştır ifconfig, sonra bul inet addr: xxx.xxx.xxx.xxx Burada xxx *, geliştirici makinenizin
ipidir

Bu benim için bir API seviyesi 19 / Kitkat 4.4 üzerinde çalıştı, bkz. Stackoverflow.com/questions/31525431/… , facebook.github.io/react-native/docs/…
Michael Ribbons

Teşekkür ederim! Bu yapılandırmayı sadece USB kablosu olmadan hata ayıkladığımda yapmam gerekiyor (WiFi ADB gibi araçlarla).
Fidan Hakaj

4
Android cihazınızı fiziksel olarak sallayarak yukarıdaki @cube referanslarını geliştiren Geliştirici menüsünü yapabileceğinizi unutmayın. Bu garip gelebilir, ama bunu ortaya çıkaracak. Ardından talimatların geri kalanını uygulayın. Bu benim için düzeltildi.
flyingace

22

Bu benim için çalıştı (bulduğum her çözümü denedikten sonra ...):

adb reverse tcp:8081 tcp:8081İçeri koş\Android\sdk\platform-tools


1
bu komutu her yerde çalıştırabilir, platform araçlarında b zorunda
kalmazsınız

1
react-native run-androidBu komutu çalıştırmayı denediğini pathve platform-toolsyolu içeren Windows ortam değişkenine bağlı olduğunu buldum .
straya

1
Teşekkür ederim, bu işe yaradı. PATH C: \ Kullanıcılar \ KULLANICIADI \ AppData \ Local \ Android \ sdk \ platform-tools
chazefate 5:17 '

hayır, Windows 10 ve Android emülatöründe çalışmıyor
piksel

16

Bunu, React Native ile ilk kez fiziksel bir cihaz kullanarak başladığımda da aldım. Bu durumda, başlamadan önce fazladan bazı şeyler yapmanız gerekir. React Native'ın 'Geliştirme Ayarları'na geliştirme makineniz hakkında bazı bilgiler girmeniz gerekir.

Hatayı gördüğünüzde cihazınızı sallayın . Bir iletişim kutusu açılır, son seçenek 'Geliştirici Ayarları' olacaktır. 'Sunucu sıcak ve bağlantı noktası aygıtında hata ayıkla' seçeneğini seçin ve yerel IP'nizi ve kullanılan bağlantı noktasını (genellikle 8081) girin.

Https://facebook.github.io/react-native/docs/running-on-device-android.html sayfasının son paragrafına bakın


Bu kelimenin tam anlamıyla bir tekrar, yukarıda söylediğim şeyin kelimesi kelimesine (Ağustos ayında)
küp

3
Cihazı sallamam gerektiğini bilmiyordum. İlk olarak, bir yorum olarak gönderirim, ancak bunu yapmak için yeterli puanım yok. Gönderinizi onayladım.
Richh94

En basit ve en temiz çözüm. Teşekkürler!
9O17

7

Çözümlerin hiçbiri sizin için uygun değilse bunu deneyin:

<root>/android/app/build/intermediates/assets/debugKlasörümün boş olduğunu ve cd android && ./gradlew assembleDebugçalışarak gerekli dosyaları oluşturmadığını, daha sonra reaksiyon yerel uygulamalarımızda javascript iş parçacığı tarafından kullanıldığını buldum .

Ben debug build komutunun ideal olarak yaratmış olması gereken aşağıdaki komutu elle çalıştırdım.

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

Bu komutları çalıştırdıktan sonra bu dizinde iki paket dosyası buldum <root>/android/app/build/intermediates/assets/debug

Ve sonra bir kez daha koştu cd android && ./gradlew installDebugbenim app tekrar çalışmaya başladı.

Daha fazla hata ayıklayacak ve aslında başarısız olanı güncelleyecektir.


Neler olduğunu açıklığa kavuşturmak için, mevcut bir projeye yerel bir reaksiyonu entegre ederken, paket çıktı yolunun otomatik olarak ayarlanmadığı anlaşılıyor, bu yüzden kendiniz ayarlamanız gerekiyor. Dolayısıyla paket çıktı yolu = / path / to / asset?
robsstackoverflow

Sen en iyi btw'sin.
robsstackoverflow

7

Bir de ayrı terminale, cihazınızı bilgisayara bağlayın ve aşağıdaki komutları çalıştırın:

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

Uygulama terminali:

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

1
Belki cevabınızdaki tek tek adımların ne anlama geldiğine, komutların hangi dizinlerden çalıştırılması gerektiğine vb. Bunun cevabınızı çok daha yararlı hale getireceğini düşünüyorum.
niels

Bu doğru cevap. Bu, paketi her değişiklikle yeniden paketlemek yerine yerel yerel sunucuya bağlanarak hızlı bir şekilde yinelemenizi sağlar.
Joshua Pinter

6

Biraz geç ama bu gerçekten benim için çalışıyor.

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

İlk komut apkandroid için inşa edilecek ve bağlıysa cihazınıza dağıtacaktır. Uygulamayı açtığınızda hata ile kırmızı ekran gösterilecektir. Ardından, paketleyiciyi çalıştıracak ve sizin için uygulama paketi oluşturacak ikinci komutu çalıştırın.


5

Terminalde bu komutu deneyin ve ardından yeniden yükleyin. Benim için çalıştı

adb ters tcp: 8081 tcp: 8081



5
  1. genymotion'u yeniden başlat
  2. Çalıştırmak react-native run-android
  3. Problem çözüldü

Gerçek mi? restart the genymotion? Ty vole.
Michal

Bu, "oh web siteniz çalışmıyor mu? Sunucunuzu yeniden başlatmayı deneyin."
Michal

4

Aynı istisna Z3 Compact D5803 - 6.0.1 cihazında da vardı

.Buckconfig dosyasını açtım ve satırı değiştirdim:

target = Google Inc.:Google APIs:23

için

target = Google Inc.:Google APIs:24

Çünkü SDK Manager'da Android 6.X'in api seviyesi 24 olduğunu gördüm.


3

Benim için, çünkü adbdeğildi PATH. Benim için yer alıyor /Users/man/Library/Android/sdk/platform-tools, sizin için başka bir yerde olabilir, ama yine de, bulup yardım etmek için yolunuza ekleyin.


3

Android <5.0 kullandığınızdan, varsayılan adb reverseyöntemi kullanamazsınız , ancak Facebook, geliştirme sunucusuna Wi-Fi aracılığıyla bağlanmak için resmi sürümünüzü ekledi . MacOS için talimatlardan alıntı yapılır, ancak Linux ve Windows için de vardır:

Yöntem 2: Kablosuz bağlantı

Geliştirme sunucusuna Wi-Fi üzerinden de bağlanabilirsiniz. Öncelikle uygulamayı bir USB kablosu kullanarak cihazınıza yüklemeniz gerekir, ancak bu yapıldıktan sonra bu talimatları izleyerek kablosuz olarak hata ayıklayabilirsiniz. Devam etmeden önce geliştirme makinenizin mevcut IP adresine ihtiyacınız olacak.

IP adresini Sistem Tercihleri ​​→ Ağ'da bulabilirsiniz.

Dizüstü bilgisayarınızın ve telefonunuzun aynı Wi-Fi ağında olduğundan emin olun. React Native uygulamanızı cihazınızda açın. Hatalı kırmızı bir ekran göreceksiniz. Tamamdır. Aşağıdaki adımlar sorunu çözecektir. Uygulama içi Geliştirici menüsünü açın. Geliştirici Ayarları → Cihaz için sunucu ana bilgisayarında hata ayıkla seçeneğine gidin. Makinenizin IP adresini ve yerel geliştirici sunucusunun bağlantı noktasını yazın (örneğin 10.0.1.1:8081). Geliştirici menüsüne geri dönün ve JS'yi Yeniden Yükle'yi seçin.


3

Bu sorunu "rasgele" vardı ve senaryomda neyin yanlış olduğunu fark etmem bir zamanımı aldı.

React-native-cli 2.0.1 için güncelledikten sonra, günlük neden kazmak ve kök neden bulmak için bana yardımcı olan bir ileti çıktı oldu:

JS sunucusu tanınmadı, derlemeye devam ediyor ...

Bazı bağlantıları araştırdıktan sonra bunu buldum:

JS sunucusu tanınamıyor

Windows'ta olduğumdan beri netstat'ı çalıştırdım ve VLC oynatıcımın da 8081 numaralı bağlantı noktasında çalıştığını ve soruna neden olduğunu öğrendim. Yani, benim durumumda, tepki yerel sunucudan önce vlc sunucusunu başlatırsam işe yaramaz.

Aynı günlük iletisi, tepki-native-cli'nun önceki sürümlerinde çıkmadı ve sessizce başarısız oldu.

TL, DR: Paket yöneticisi ile aynı bağlantı noktasında çalışan bir şey olup olmadığını kontrol edin (varsayılan 8081)


2

Benim sorunum benim AndroidManifest.xmldosya üzerinden geçti ve hattı kaldırmıştı

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

çünkü uygulamamın internete ihtiyacı olmayacak. Ancak, reaksiyon yerel hata ayıklama uygulaması (paketleyiciye erişmek için) internet erişimi gerekir. :)


1
Adamım günümü kurtardın. Saçımı
söküyordum

2

Önbelleği temizlemeye çalışın

yerel tepki başlat - reset-cache


2

Lütfen çalıştırırken aşağıdaki hatanın olup olmadığını kontrol edin react-native run-android: adb server version (XX) doesn't match this client (XX); killing...

Bu durumda emin olun /usr/local/opt/android-sdk/platform-tools/adbve /usr/local/bin/adbaynı işaretadb

Benim durumumda biri işaret edildi /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK), ancak diğeri işaret edildi /usr/local/Caskroom/android-platform-tools/26.0.2/platform-tools/adb(Homebrew)

Her ikisi de işaret ettikten sonra sorun giderildi /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK)


1

Ben de bu hatayı aldım, gerçekten kafam karıştı. çünkü tüm cevaplar çalışmıyor. Hemen yola adb ekleyin .


1

Benim için yan senkronizasyon etkin ve aktifti. Hemen kapatılması sorunu ortadan kaldırdı. Bunu veya PC ile cihaz arasındaki herhangi bir iletişimi kapatmaya değer olabilir


1

Kullandığım bağlantı noktasını açmak zorunda kaldım (varsayılan 8081). Linux'ta aşağıdakileri yapabilirsiniz

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

Bunu gerçekten yapmanız gerekip gerekmediğini görmek için test edebilirsiniz. Android cihazınızdaki Chrome'daki geliştirici sunucunuza gidin. Yanıt vermezse, ihtiyacınız olan şey bu olabilir. Yanıt verirse, bu size yardımcı olmaz.


1

Benim yolum:

react-native start

Bundan sonra aşağıdakileri kullanarak cihazınızda:

click to Reload.

Bkz. Konsol tepki yerel, js paket verileri getirilecek.


Bu benim sorunumdu, çünkü terminal başlamadı. Teşekkürler !
Nicolas Leucci

1

Ben de aynı problemi yaşadım. Create-tepki-doğal-uygulama AwesomeProject ile bir tepki yerel proje oluşturduğumda , telefondaki Expo uygulamasında iyi çalıştı. Bundan sonra projemi geliştirmek için bu hızlı başlangıç ​​projesini kullanmak istedim ve seninle aynı hatayı aldım.

Biraz araştırma yaptıktan sonra, reat-native init AwesomeProject ile yeni bir proje başlatmanın daha iyi olduğunu anladım (tüm ayarlar yerel yerel dokümanlarda) Daha sonra bu komutu çalıştırın:

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/

Bu şey paketle düzeltilmelidir (--dev false uyarıları göstermez)

Uygulamanın sanal / gerçek cihazınızda çalışması için yapmanız gereken tek şey:

react-native run-android

Ve gayet iyi çalışıyor olmalı. En azından benim için çalıştı.


1

Benim için sorun 'adb' tanınmadı - bu yanıtı kontrol edin .

Bunu düzeltmek için Ortam Değişkenlerine C: \ Kullanıcılar \ KULLANICIADI \ AppData \ Local \ Android \ sdk \ platform-tools ekleyin


Bu yorum yapmaktan başka bir şey değildir. Ancak bağlantılı cevabınızın son satırını buraya yapıştırırsanız, bu geçerli bir cevap olur. Aksi takdirde bu cevabın kaldırılması ihtimali vardır.
Amit Joshi

1

Çoğumuz bu sorunla ilk kez, yerli proje # 1'i tepki vermeye başladığımızda karşılaşıyoruz.

Birkaç basit adım sorunumu çözdü:

Komut kullanarak örnek bir proje oluşturdum:

react-native init ReactProject1

Çözüm

Düzeltme yardımına olduğunu local-cli\runAndroid\adb.jsbulmak için adb.exe, aynı şekilde olarak local-cli\runAndroid\runAndroid.js:

projectname altındaki replace deyimini bul (her ne verdiysen)\node_modules\react-native\local-cli\runAndroid

Değiştir:

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

Tarafından:

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

yukarıdaki değiştirme yaptıktan sonra, sadece cmd tepki-yerli run-android çalıştırmak, apk paket ve ilk başta cihazınıza yerel olarak js paket yüklemeye çalışın. (Başarılı)


0

Yukarıdaki / aşağıdaki önerilerin çoğunu denedim, ancak sonuçta, karşılaştığım sorun, daha önce homebrew kullanılarak kurulan bekçi ile bir izinti. Öykünücüyü kullanmaya çalışırken terminal iletilerinize bakarsanız ve öykünücünüzdeki bu 'BatchedBridge alınamadı' iletisi ile birlikte bekçi ile ilgili 'İzin reddedildi' hatalarıyla karşılaşırsanız, aşağıdakileri yapın:

Dizininize gidin /Users/<username>/Library/LaunchAgentsve kullanıcınızın Oku ve Yazabilmesi için izin ayarlarını değiştirin. Bu aslında com.github.facebook.watchman.plistorada bir dosya olup olmadığına bakılmaksızın .


0

Ben de bir eklemek gerekir bulundu

yerel tepki yükseltme

Uygulamanın düzgün çalışmasını sağlamak için.


0

Aynı sorunu aldım ama kendimden aptalca bir hataydı ...

Gönderen Android stüdyoda , ben başlattığını installDebug/installReleasegelen gradle komut appprojet yerine rootprojet.


0

En kolay yol!

  • Sunucuyu durdurun ve proje oluşturmayı sonlandırın.
  • Bir 'Node.js' terminali açın.
    • 'Reat-native' projesiyle klasöre gidin.
    • 'Reat-native start' yazın - Yerel yerel sunucuyu el ile başlatma.
  • Kod Düzenleyici Terminalinize gidin ve 'reat-native run-android yazın.

Gitmek güzelsin!


0

Sisteminizi veya tüm paketinizi yeniden başlatmanız yeterlidir, sorun çözülebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.