errore "Impossibile ottenere BatchedBridge, assicurati che il pacchetto sia impacchettato correttamente" all'avvio dell'app


167

Nel tentativo di creare un progetto nativo su Android 4.4.2, visualizzo questa schermata di errore

detto errore

e non sono riuscito a trovare alcun modo per risolverlo. Ho provato a riavviare Packager, ricollegare il dispositivo, anche reinstallare ReaT nativo e avviare un nuovo progetto. Su 6.0.0 e versioni successive funziona bene.


1
Hai ricevuto questo errore dopo l'esecuzione react-native run-android? Ricevo l'errore in questo caso, il che è strano perché in modalità debug non dovrebbe esserci bisogno del pacchetto JS afaik poiché si suppone che si connetta al pacchetto server.
Ryan H.

Ho pubblicato una risposta allo stesso problema qui: stackoverflow.com/a/45110063/706798
Anton

Ricevo questo stesso messaggio di errore, ma per iOS. Qualcuno ha un consiglio? Ho provato a eseguire 'reag-native-run-ios', ma non funziona, perché XCode è su un disco esterno per me.
ryanwebjackson

Risposte:


145

Una possibile soluzione per questo è che molto probabilmente non raggruppare prima l'applicazione, eseguire i passaggi seguenti e quindi distribuire l'app-debug.apk sul dispositivo

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

(se la cartella assetsnon esiste crearla)

Quindi eseguire dalla radice del progetto

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

installa l'apk creato sul tuo dispositivo, dalla posizione: android/app/build/outputs/apk/app-debug.apk

fammi sapere se questo risolve il tuo problema

MODIFICA :

Puoi semplicemente metterlo nel tuo package.json come uno script per automatizzarlo, credo che sarà risolto nelle prossime versioni di reagente-nativo e verrà eseguito prima di assemblare l'APK finale, quindi non sarà necessario (spero anche)

mettere :

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

o come detto l'equivalente di arricciatura, ma nella maggior parte dei casi quanto sopra è più robusto


4
Sì funziona!!! Che cosa ho appena fatto? perché arricciare? inoltre, può essere automatizzato?
Zygro,

Grazie mille, perché la mia app non può collegare il bundle nativo di React.
GeekHades,

3
Questo sembra un trucco. Se stai impacchettando JavaScript in un singolo file non otterrai la possibilità di ricaricare dal vivo mentre esegui l'app durante lo sviluppo?
Liron Yahdav,

2
questo non è per lo sviluppo ma per l'imballaggio APK effettivo
fino al

non succede nulla con me ancora ricevendo un errore: - com.facebook.react.devsupport.JSException: Impossibile ottenere BatchedBridge, assicurati che il pacchetto sia impacchettato correttamente
Dinesh R Rajput

110

Mi sono imbattuto anche in questo problema. Quello che ho fatto è stato forzare l'uccisione dell'app sul mio dispositivo, quindi ho aperto un'altra console e ho eseguito

react-native start

e poi ho aperto di nuovo l'app dal mio dispositivo e ha ricominciato a funzionare.

EDIT: se si utilizza un dispositivo Android tramite USB e lo si è scollegato o il computer è andato in sospensione, potrebbe essere necessario eseguire prima

adb reverse tcp:8081 tcp:8081

5
Questo ha risolto il mio problema durante l'utilizzo react-native run-android. L'uso react-native startnon è mai stato richiesto per me quando stavo facendoreact-native run-ios
Dylan Pierce,

2
Questo ha funzionato, ma perché sta succedendo? Sarà risolto? Devo sempre aprire 2 terminali e iniziare prima di poterlo avviare su un dispositivo?
Marko,

funziona anche per me!
ho

adb reverse tcp:8081 tcp:8081è stato di per sé sufficiente per me. Grazie molto!
Dario il

Questo è fantastico dopo che potresti farlo ./adb install
Faris Rayhan

27

Ho appena ricevuto questo errore. Ecco cosa ho fatto per risolvere il problema: ho selezionato Dismiss, sono andato nel menu Sviluppatore, quindi Dev Settings, Scegli Debug server host & port for device, ho aggiunto l'indirizzo IP e la porta del mio computer: 192.168.0.xx:8xxxusa qualunque indirizzo IP assegnato alle tue macchine sviluppatore sia sulla tua rete wifi. La porta è di solito:8081

Una volta fatto questo, tutto è andato bene. Inoltre, mentre sei nel menu di sviluppo, ricorda di selezionare Enable Live Reloade Debug JS Remotely, ti semplifica la vita durante il debug.


Lavori! Per l'utente ubuntu: esegui ifconfig, quindi trova inet addr: xxx.xxx.xxx.xxx dove xxx * è il tuo computer sviluppatore ip
henggana,

Questo ha funzionato per me a livello di API 19 / Kitkat 4.4, vedere stackoverflow.com/questions/31525431/... , facebook.github.io/react-native/docs/...
Michael Nastri

Grazie! Devo solo fare questa configurazione quando eseguo il debug senza cavo USB (con strumenti come WiFi ADB).
Fidan Hakaj,

4
È importante notare che puoi creare il menu Developer a cui @cube fa riferimento sopra scuotendo fisicamente il tuo dispositivo Android. Può sembrare strano, ma è questo che lo farà apparire. Quindi seguire il resto delle istruzioni. Questo mi ha risolto.
flyingace

22

Questo è ciò che ha funzionato per me (dopo aver provato ogni altra soluzione che ho trovato ...):

Corri adb reverse tcp:8081 tcp:8081dentro\Android\sdk\platform-tools


1
può eseguire questo comando ovunque, non è necessario b in platform-tools
goldylucks il

1
Ho scoperto che react-native run-androidtenta di eseguire quel comando e dipende dalla variabile di ambiente di Windows pathper contenere il platform-toolspercorso.
straya,

1
Grazie, ha funzionato. PERCORSO è C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools
chazefate

no, non funziona su Windows 10 e sull'emulatore Android
pixel

16

L'ho ottenuto anche quando ho iniziato per la prima volta con React Native, usando un dispositivo fisico. In tal caso, devi fare alcune cose extra prima di poter iniziare. Devi inserire alcune informazioni sulla tua macchina di sviluppo nelle "Impostazioni degli sviluppatori" di React Native.

Quando viene visualizzato l'errore, scuoti il ​​dispositivo . Apparirà una finestra di dialogo, l'ultima opzione sarà 'Impostazioni Dev'. Seleziona "Debug server hot & port for device" e inserisci il tuo IP locale e la porta utilizzata (di solito 8081).

Vedi l'ultimo paragrafo di https://facebook.github.io/react-native/docs/running-on-device-android.html


Questa è letteralmente una ripetizione, testualmente di quanto ho detto sopra (ad agosto)
cubo

3
Non sapevo che avrei bisogno di scuotere il dispositivo. In primo luogo, lo pubblicherei come commento, ma non ho abbastanza punti per farlo. Ho votato il tuo post.
Richh94,

Soluzione più semplice e pulita. Grazie!
callOfCode

7

Se nessuna delle soluzioni funziona per te prova questo:

Ho scoperto che la mia <root>/android/app/build/intermediates/assets/debugcartella era vuota e in esecuzione cd android && ./gradlew assembleDebugnon creava i file richiesti, che sono successivamente utilizzati dal thread JavaScript nelle nostre app native di reazione.

Ho eseguito manualmente il seguente comando che il comando di debug build avrebbe dovuto creare idealmente.

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

Dopo aver eseguito questi comandi ho trovato due file bundle in questa directory <root>/android/app/build/intermediates/assets/debug

E poi ho eseguito di nuovo la cd android && ./gradlew installDebugmia app ha ricominciato a funzionare.

Eseguirà il debug di più e aggiornerebbe ciò che sta effettivamente fallendo.


Solo per chiarire cosa sta succedendo sembra che quando si integra un reagente nativo in un progetto esistente, il percorso di output del bundle NON viene impostato automaticamente, quindi è necessario impostarlo da soli. Da qui il percorso di output del bundle = / path / to / assets?
robsstackoverflow,

Sei il migliore tra parentesi.
robsstackoverflow,

7

In un terminale separato , collega il dispositivo al computer ed esegui i seguenti comandi:

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

Terminale di applicazione :

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

1
Forse potresti espandere la tua risposta per includere un po 'più di dettaglio su cosa significano i singoli passaggi nella tua risposta, da quali directory dovrebbero essere eseguiti i comandi, ecc.? Penso che renderebbe la tua risposta molto più utile.
Niels

Questa è la risposta corretta. Ciò consente di scorrere rapidamente collegandosi al server nativo di reazione invece di dover reimballare il bundle con ogni modifica.
Joshua Pinter

6

È troppo tardi, ma questo funziona davvero per me.

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

Il primo comando costruirà apkper Android e lo distribuirà sul tuo dispositivo se è collegato. Quando apri l'App mostrerà lo schermo rosso con errore. Quindi esegui il secondo comando che eseguirà packager e creerà il pacchetto di app per te.


5

Prova questo comando nel terminale e poi ricarica. Ha funzionato per me

adb tcp inverso: 8081 tcp: 8081



5
  1. riavviare il genymotion
  2. correre react-native run-android
  3. il problema è stato risolto

Davvero? restart the genymotion? Ty vole.
Michal,

È come dire "oh il tuo sito web non funziona? Prova a riavviare il tuo server".
Michal,

4

Stavo avendo la stessa eccezione sul dispositivo Z3 Compact D5803 - 6.0.1

Sono andato aperto il file .buckconfig e ho cambiato la riga:

target = Google Inc.:Google APIs:23

per

target = Google Inc.:Google APIs:24

Perché ho visto in SDK Manager che Android 6.X ha un livello di API 24.


3

Per me, è perché adbnon era nel PATH. È situato /Users/man/Library/Android/sdk/platform-toolsper me, potrebbe essere altrove per te, ma comunque, trovalo e aggiungilo al tuo percorso per vedere se ti aiuta.


3

Dato che stai usando Android <5.0 non puoi usare quello predefinito adb reverse metodo , ma Facebook ha aggiunto la documentazione ufficiale per connettersi al server di sviluppo tramite Wi-Fi , che supporterebbe la tua versione. Citando le istruzioni per MacOS, ma le hanno anche per Linux e Windows:

Metodo 2: connettersi tramite Wi-Fi

Puoi anche connetterti al server di sviluppo tramite Wi-Fi. Dovrai prima installare l'app sul tuo dispositivo usando un cavo USB, ma una volta fatto ciò potrai eseguire il debug in modalità wireless seguendo queste istruzioni. Prima di procedere, avrai bisogno dell'indirizzo IP attuale della tua macchina di sviluppo.

È possibile trovare l'indirizzo IP in Preferenze di Sistema → Rete.

Assicurati che il tuo laptop e il tuo telefono siano sulla stessa rete Wi-Fi. Apri l'app React Native sul tuo dispositivo. Vedrai una schermata rossa con un errore. Questo va bene. I seguenti passaggi lo risolveranno. Apri il menu Sviluppatore in-app. Vai su Impostazioni Dev → Host del server di debug per dispositivo. Digitare l'indirizzo IP della macchina e la porta del server di sviluppo locale (ad es. 10.0.1.1:8081). Torna al menu Sviluppatore e seleziona Ricarica JS.


3

Aveva questo problema "a caso" e mi ci è voluto un po 'di tempo per capire cosa c'era di sbagliato nel mio scenario.

Dopo aver aggiornato a React-native-cli 2.0.1, c'era un messaggio nel registro che mi ha aiutato a scavare e trovare la causa principale:

Server JS non riconosciuto, proseguendo con build ...

Dopo aver cercato alcuni link ho trovato questo:

Impossibile riconoscere il server JS

Dato che sono su Windows, ho eseguito netstat e ho scoperto che anche il mio lettore VLC era in esecuzione sulla porta 8081 causando il problema. Quindi, nel mio caso, se avessi avviato il server vlc prima del server di reazione nativo non avrebbe funzionato.

Questo stesso messaggio di log non veniva emesso nelle versioni precedenti del reag-native-cli, facendolo fallire silenziosamente.

TL, DR: controlla se c'è qualcosa in esecuzione sulla stessa porta del gestore pacchetti (8081 per impostazione predefinita)


2

Il mio problema era che avevo esaminato il mio AndroidManifest.xmlfile e avevo rimosso la riga

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

perché la mia app non avrà bisogno di internet. Tuttavia, l'app di debug nativa reattiva necessita dell'accesso a Internet (per accedere al packager) Whoops. :)


1
Amico, mi hai salvato la giornata. Mi stavo strappando i capelli :)
Christophe Cadilhac il


2

Si prega di verificare se si verifica il seguente errore durante l'esecuzione react-native run-android: adb server version (XX) doesn't match this client (XX); killing...

In tal caso, assicurarsi /usr/local/opt/android-sdk/platform-tools/adbe /usr/local/bin/adbindicare la stessa cosaadb

Nel mio caso uno è stato indicato /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK), ma un altro è stato indicato/usr/local/Caskroom/android-platform-tools/26.0.2/platform-tools/adb (Homebrew)

E il problema è stato risolto dopo che entrambi hanno indicato /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK)


1

Anch'io ho questo errore, davvero confuso. perché tutte le risposte non funzionano. Subito dopo aggiungi adb al percorso.


1

Per me, avevo la sincronizzazione laterale abilitata e attiva. La chiusura immediata ha risolto il problema. Potrebbe valere la pena di chiudere questa o qualsiasi altra comunicazione tra PC e dispositivo


1

Ho finito per dover aprire la porta che stavo usando (8081 per impostazione predefinita). Su Linux, puoi fare quanto segue

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

Puoi provare per vedere se hai davvero bisogno di farlo. Accedi al tuo server di sviluppo in Chrome sul tuo dispositivo Android. Se non risponde, questo potrebbe essere quello che ti serve. Se risponde, questo non ti aiuterà.


1

La mia strada è:

react-native start

Successivamente nel dispositivo in uso utilizzando:

click to Reload.

Vedi in console reattivo nativo, sarà recuperare i dati del bundle js.


Questo era il mio problema, perché il terminal non si avviava. Grazie !
Nicolas Leucci,

1

Ho avuto lo stesso problema. Quando ho creato un progetto nativo di reazione tramite AwesomeProject di create-reply-native-app ha funzionato bene nell'app Expo sul telefono. Dopo quello che volevo usare quel progetto di avvio rapido per sviluppare il mio progetto e ho avuto lo stesso errore di te.

Dopo alcune ricerche ho scoperto che è meglio iniziare un nuovo progetto con init AwesomeProject di Reate-nativo (con tutte le impostazioni nei documenti nativi di Reazione) Quindi eseguire questo comando:

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/

Ciò dovrebbe risolvere il problema con bundle (--dev false non mostra avvisi)

Tutto quello che devi fare per far funzionare l'app sul tuo dispositivo virtuale / reale è:

react-native run-android

E dovrebbe funzionare bene. Almeno ha funzionato per me.


1

Per me il problema era che "adb" non era riconosciuto - controlla questa risposta.

Per risolvere questo problema aggiungere C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools alle variabili di ambiente


Questo non è altro che un commento. Ma se si incolla qui l'ultima riga della risposta collegata, questa diventa una risposta valida. Altrimenti ci sono possibilità che questa risposta venga rimossa.
Amit Joshi,

1

Molti di noi affrontano questo problema per la prima volta, quando iniziamo a reagire al progetto nativo n. 1.

Pochi semplici passaggi hanno risolto il mio problema:

Ho creato un progetto di esempio usando il comando:

react-native init ReactProject1

Soluzione

La soluzione è aiutare local-cli\runAndroid\adb.jsa trovare adb.exe, allo stesso modo di local-cli\runAndroid\runAndroid.js:

trova l'istruzione sostitutiva sotto projectname (qualunque cosa tu abbia dato)\node_modules\react-native\local-cli\runAndroid

Sostituire:

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

Di:

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

dopo aver effettuato la sostituzione sopra, esegui reag-native run-android nel tuo cmd, raggrupperà apk e inizialmente tenterà di installare il pacchetto js localmente nel tuo dispositivo. (Successo)


0

Ho provato molti dei suggerimenti sopra / sotto, ma alla fine, il problema che ho dovuto affrontare era un permesso con watchman, che era stato installato usando homebrew in precedenza. Se guardi i tuoi messaggi del terminale mentre provi a usare l'emulatore e riscontri errori "Autorizzazione negata" per quanto riguarda watchman insieme a questo messaggio "Impossibile ottenere BatchedBridge" sul tuo emulatore, procedi come segue:

Vai alla tua /Users/<username>/Library/LaunchAgentsdirectory e modifica le impostazioni delle autorizzazioni in modo che l'utente possa leggere e scrivere. Questo indipendentemente dal fatto che tu abbia o meno un com.github.facebook.watchman.plistfile lì dentro.


0

Ho scoperto che dovevo aggiungere anche a

aggiornamento reattivo nativo

per far funzionare correttamente l'applicazione.


0

Ho avuto lo stesso problema ma è stato uno stupido errore da parte mia ...

Da Android Studio , stavo lanciando installDebug/installReleasescript Gradle da Projet appinvece che rootProjet.


0

Il modo più semplice!

  • Arresta il server e termina la creazione del progetto.
  • Apri un terminale "Node.js".
    • Passare alla cartella con il progetto "reagente nativo".
    • Digitare "avvio nativo di reazione" - Avvio manuale del server nativo di reazione.
  • Vai al tuo terminale Editor di codice e digita 'reag-native run-android.

Sei a posto!


0

Basta riavviare il sistema o il pacchetto completo e il problema potrebbe essere risolto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.