Android non è riuscito a caricare il bundle JS


201

Sto cercando di eseguire AwesomeProject sul mio Nexus5 (Android 5.1.1).

Sono in grado di costruire il progetto e installarlo sul dispositivo. Ma quando lo eseguo, ho una schermata rossa che dice

Impossibile scaricare il bundle JS. Hai dimenticato di avviare il server di sviluppo o di connettere il tuo dispositivo?

In reattivo iOS nativo, posso scegliere di caricare jsbundle offline. Come posso fare la stessa cosa per Android? (O almeno, dove posso configurare l'indirizzo del server?)

Aggiornare

Per eseguire con il server locale, eseguire i comandi seguenti nella directory principale del progetto reagente-nativa

  1. react-native start > /dev/null 2>&1 &
  2. adb reverse tcp:8081 tcp:8081

per favore dai un'occhiata alla risposta di dsissitka per maggiori dettagli.

Per eseguire senza un server, raggruppa jsfile nell'apk eseguendo:

  1. crea una cartella delle risorse in android/app/src/main
  2. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

per favore dai un'occhiata alla risposta di kzzzf per maggiori dettagli.


Stll non ha ancora capito il problema. Ma nel frattempo, puoi provarlo sul tuo simulatore. Funziona perfettamente bene con la mia genymotion.
Bryan,

quando provo a digitare i due comandi per eseguire con il server locale ricevo un errore in PowerShell che dice: "Il carattere e commerciale (&) non è consentito". Presumo che dovrei essere nella radice della mia app-dir quando eseguo il comando?
user2236165

1
Ciò significa che il debug tramite USB su Android 4.1 è impossibile poiché adb reversenon è supportato?
bonh,

Vorrei menzionare che per poter eseguire adb reverse tcp:8081 tcp:8081è necessaria la versione 1.0.32 di ADB, l' reverseopzione non è in 1.0.31
jvalen

Risposte:


110

Per raggruppare il file JS nel tuo apk mentre il tuo server è in esecuzione ( react-native start) scarica il bundle nella directory delle risorse della tua app:

curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

Con la prossima versione (0.12) ripareremo il react-native bundlecomando per lavorare con i progetti Android come previsto.


grazie! Come faccio a dire a ReaInstanceManager di usare l'asset in bundle? O la magia accade automaticamente?
Matteo,

9
Impossibile creare il file Avviso: android / app / src / main / assets / index.android.bundle: nessun file o avviso: directory
almeynman,

2
Avvertenza: impossibile creare il file Avvertenza: android / app / src / main / assets / index.android.bundle: nessun file o avvertenza: curl della directory: (23) Scrittura del corpo non riuscita (0! = 16167)
Shivang

3
@ Shivang: crea gli asset della directory in android / app / src / main. Ho avuto questo errore perché non esisteva ancora.
piscatore

1
Questo è il modo migliore e semplice quando distribuiamo l'app localmente a scopo di test. (via tessuto) grazie
Dinesh Anuruddha,

90

Quanto segue ha funzionato per me su Ubuntu 14.04:

cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081

Aggiornamento : vedi

Aggiornamento 2 : @scgough Abbiamo riscontrato questo errore perché React Native (RN) non è stato in grado di recuperare JavaScript dal server di sviluppo in esecuzione sulle nostre workstation. Puoi vedere perché questo accade qui:

https://github.com/facebook/react-native/blob/42eb5464fd8a65ed84b799de5d4dc225349449be/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java#L116-L137

Se la tua app RN rileva che stai utilizzando Genymotion o l'emulatore, prova a recuperare JavaScript da GENYMOTION_LOCALHOST (10.0.3.2) o EMULATOR_LOCALHOST (10.0.2.2). Altrimenti presume che tu stia utilizzando un dispositivo e prova a recuperare JavaScript da DEVICE_LOCALHOST (localhost). Il problema è che il server dev viene eseguito sull'host locale della workstation, non su quello del dispositivo, quindi per farlo funzionare è necessario:


5
in esecuzione adb reverse tcp: 8081 tcp: 8081 anche su osx funziona
shyamal

Funziona! molte grazie. Sai se c'è un modo per indicare jscodelocation alla risorsa apk, proprio come main.jsbundle di iOS?
Matteo,

@dsissitka posso solo chiedere in modo che sia registrato qui nel thread - che cosa fa esattamente?
Scgough

@Matthew Non temere. Scusa!
dsissitka,

E se funzionassimo su Android 4.2 e ottenessimo questo errore: stackoverflow.com/questions/31525431/…
Augustin Riedinger,

39

Ok, penso di aver capito qual è il problema qui. Aveva a che fare con la versione watchmanche stavo correndo.

In una nuova shell, esegui brew update quindi: brew unlink watchman quindi:brew install watchman

ora puoi eseguire react-native startdalla cartella del tuo progetto

Lascio aperta questa shell, creo una nuova finestra della shell ed eseguo: react-native run-androiddalla cartella del mio progetto. Va tutto bene per il mondo.

ps. Inizialmente ero sulla versione 3.2 di watchman. Questo mi ha portato a 3.7.

pps. Sono nuovo di questo, quindi potrebbe non essere la via più rapida per la soluzione, ma ha funzionato per me.

* ALTRE INFORMAZIONI PER IL FUNZIONAMENTO / DEBUGGING SU UN DISPOSITIVO *

Potresti scoprire che se distribuisci la tua app sul tuo dispositivo Android anziché su un emulatore ottieni una schermata rossa della morte con un errore che dice Unable to load JS Bundle. È necessario impostare il server di debug per il dispositivo affinché reagisca al computer in esecuzione ... o il suo nome O l'indirizzo IP.

  1. Premere il dispositivo Menutasto
  2. Selezionare Dev Settings
  3. Seleziona Debug server host for deviceoChange Bundle Location
  4. Digita l'IP della tua macchina e ricarica JS più la porta di reazione, ad es 192.168.1.10:8081

Maggiori informazioni: http://facebook.github.io/react-native/docs/running-on-device-android.html


@ jacobross85 Sono contento che abbia aiutato! Dammi un voto se ne hai voglia ;-)
Scgough

1
Ho dovuto correre brew uninstall watchmanprima che potesse installare l'ultima versione per me.
Amozoss,

Ho aggiunto alcune informazioni in più per coloro che eseguono il debug su un dispositivo Android anziché su un emulatore.
scgough

Stava già eseguendo l'ultima versione di watchman ma questo mi ha risolto il problema. Weeeeird
pfac,

1
Grazie per questo fratello è davvero utile. Ecco perché ti darò il voto.
Priyank Jotangiya l'

17

Dalla directory del progetto, esegui

react-native start

Emette quanto segue:

$ react-native start
 ┌────────────────────────────────────────────────────────────────────────────┐ 
   Running packager on port 8081.                                             
                                                                              
   Keep this packager running while developing on any JS projects. Feel       
   free to close this tab and run your own packager instance if you           
   prefer.                                                                    
                                                                              
   https://github.com/facebook/react-native                                  │ 
                                                                              
 └────────────────────────────────────────────────────────────────────────────┘ 
Looking for JS files in
   /home/user/AwesomeProject 


React packager ready.

[11:30:10 PM] <START> Building Dependency Graph
[11:30:10 PM] <START> Crawling File System
[11:30:16 PM] <END>   Crawling File System (5869ms)
[11:30:16 PM] <START> Building in-memory fs for JavaScript
[11:30:17 PM] <END>   Building in-memory fs for JavaScript (852ms)
[11:30:17 PM] <START> Building in-memory fs for Assets
[11:30:17 PM] <END>   Building in-memory fs for Assets (838ms)
[11:30:17 PM] <START> Building Haste Map
[11:30:18 PM] <START> Building (deprecated) Asset Map
[11:30:18 PM] <END>   Building (deprecated) Asset Map (220ms)
[11:30:18 PM] <END>   Building Haste Map (759ms)
[11:30:18 PM] <END>   Building Dependency Graph (8319ms)

1
Sto anche riscontrando il problema segnalato dall'OP. Eseguo il progetto utilizzando react-native run-androiddalla cartella del progetto. Si installa OK nel terminale ma non appena l'app si apre sul mio dispositivo mi viene visualizzato uno schermo rosso che diceUnable to download JS bundle
scgough

6
devi eseguire adb reverse tcp: 8081 tcp: 8081
Matthew,

1
Ho eseguito adb reverse tcp: 8081 tcp: 8081 e ottengo un errore: errore chiuso: chiuso
JacobRossDev

1
Ho lo stesso problema, errore: chiuso. Qualche aiuto, per favore?
Eusthace,

Assicurati che il tuo indirizzo IP sia corretto in "Impostazioni sviluppatore" se utilizzi Android. Se lavori con un IP dinamico, questo può cambiare dall'oggi al domani.
Sam Purcell,

13

Una soluzione semplice che funziona per me con Ubuntu 14.04.

react-native run-android

L'emulatore (già avviato) restituirà: Impossibile scaricare il pacchetto JS; riavviare il server JS:

react-native start

Premi Ricarica JS sull'emulatore. Ha funzionato per me. Spero che possa aiutare


Funziona davvero. Di tutte le risposte, questa è la soluzione più semplice. Non riesco a credere che questo non sia nel documento ufficiale.
bluecollarcoder,

L'OP riguarda l'esecuzione su un dispositivo, non sull'emulatore. Questi passaggi non funzionano su un dispositivo senza configurazione aggiuntiva. Vedi risposta accettata
davidgoli,

8

Nell'app su Android ho aperto Menu (Command + M in Genymotion) -> Impostazioni Dev -> Host e porta del server di debug per dispositivo

imposta il valore su: localhost: 8081

Ha funzionato per me.


Grazie! Ha funzionato per me
Howard il

7

Dopo aver provato una combinazione di risposte qui, questo è ciò che funziona per me.

Sto usando Genymotion come mio emulatore.

1 Avvia l'emulatore Genymotion.

2 Da un terminale

cd AwesomeProject
react-native run-android # it loads in genymotion and fails with bundle error
react-native start > /dev/null 2>&1 & # from dsissitka
adb reverse tcp:8081 tcp:8081 # from dsissitka

3 Ricarica dall'emulatore.

Carica!

Ora posso iniziare a sviluppare.


ottenere "errore: chiuso" due volte su "adb reverse"
almeynman,

Cordiali saluti: Sto facendo quanto sopra con la risposta "Daniel Masarin" dell'impostazione dell'host del server di debug sul mio indirizzo WiFi con la porta 8081, funziona con RN v 0.17.0
ooolala il

grazie mille questo funziona per me :) su API 21+ sopra funziona solo questo
Ashwini Bhat,

4

Elimina l'app dal tuo telefono! Ho provato diversi passaggi, ma alla fine l'ho fatto.

  1. Se hai provato a eseguire l'app in precedenza ma non è riuscito, eliminala dal tuo dispositivo Android.
  2. Correre $ react-native run-android
  3. Apri il menu Agita React Rage dall'app sul tuo dispositivo Android, vai a Dev Settingse poi a Debug server host & port for device. Inserisci il tuo IP server (IP del tuo computer) e host 8081, ad es 192.168.50.35:8081. Su un Mac puoi trovare l'IP del tuo computer all'indirizzo System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address.
  4. Apri di nuovo il menu Agita rabbia e fai clic Reload JS.


2

Non ho abbastanza reputazione per commentare, ma questo si riferisce alla risposta di dsissitka. Funziona anche su Windows 10.

Per ribadire, i comandi sono:

cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081

2

Ecco i semplici passaggi per eseguire la tua app su Android (versione):

1. Vai alla radice dell'applicazione.

2. Esegui questo comando.

bundle reattivo nativo - piattaforma 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

Tutti i tuoi file vengono copiati.

3. Creare un APK firmato.

Apri Android Studio.

Genera> Genera APK firmato> [Inserisci i dettagli richiesti, la sequenza di tasti deve essere generata prima di questo passaggio]

Il tuo APK dovrebbe essere generato senza errori. Installa sul tuo dispositivo e questo dovrebbe funzionare senza problemi.

Puoi anche connettere il tuo dispositivo e premere direttamente l'icona Esegui su Android Studio per i test.


Generazione della sequenza di tasti:

  1. Vai a C: \ Programmi \ Java \ jdkx.x.x_x \ bin

  2. Correre

keytool -genkey -v -keystore d: \ my_private_key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Probabilmente ti chiederà di inserire alcuni dettagli. Fallo e avrai il tuo file di battitura ( my_private_key.keystore ) che può essere usato per firmare il tuo apk.


dopo che react-native bundleho ricevuto Errore: risorse duplicate
Amir Shabani,

1

Lo stavo ottenendo su Linux dopo aver interrotto il react-native run-androidprocesso. Sembra che il server nodo sia ancora in esecuzione, quindi alla successiva esecuzione, non funzionerà correttamente e l'app non potrà connettersi.

La correzione qui è di uccidere il processo del nodo che è in esecuzione in un Xterm che puoi uccidere ctrl-cing quella finestra (più facile) o puoi trovarlo usando lsof -n -i4TCP:8081allora kill -9 PID.

Quindi corri di react-native run-androidnuovo.


1

Controlla la tua connessione wifi.

Un'altra possibilità potrebbe essere che tu non sia connesso al wifi, connesso alla rete sbagliata o che l'indirizzo IP sia errato nelle tue impostazioni di sviluppo. Per qualche ragione, il mio Android si è disconnesso dal wifi e ho iniziato a ottenere questo errore, inconsapevolmente.


Grazie. Per impostazione predefinita, il server Debug viene raggiunto sulla rete locale. Pertanto, se non si dispone dell'accesso wifi, non è possibile raggiungerlo.
Paul

1

In esecuzione sul dispositivo

Ho trovato un'altra risposta

  • adb reverse: funziona solo su Android 5.0+ (API 21).
  • Altro: apri il menu Developer agitando il dispositivo, vai su Impostazioni Dev , Vai all'host del server Debug per dispositivo , digita l'indirizzo IP della tua macchina e la porta del server di sviluppo locale

1

Un aggiornamento

Ora su Windows non è necessario eseguire l'avvio di reazione nativo. Il packager verrà eseguito automaticamente.



0

Sto usando solo Ubuntu e Android e non sono riuscito a farlo funzionare. Ho trovato una soluzione davvero semplice che è quella di aggiornare il file package.json, cambiando queste righe:

"scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },

per

"scripts": {
    "start": "adb reverse tcp:8081 tcp:8081 && node node_modules/react-native/local-cli/cli.js start"
  },

E quindi esegui il server digitando

npm run start

Ciò garantisce che il dispositivo Android cerchi il nodo server sul computer anziché localmente sul telefono.


0

La domanda iniziale riguardava il ricaricamento dell'applicazione in un dispositivo fisico.

Quando esegui il debug dell'applicazione in un dispositivo fisico (ad es. Tramite adb), puoi ricaricare il bundle JS facendo clic sul pulsante "azione" in alto a sinistra del dispositivo. Si aprirà il menu delle opzioni (Ricarica, Debug JS da remoto ...).

Spero che questo ti aiuti.


0

Questo errore può essere facilmente risolto procedendo come segue:

    //run the command at /android sdk / platforms-tool folder
        adb reverse tcp:8081 tcp:8081

    //now come to root folder of your app
    1. npm start
    2. create 'assets' folder inside rootApp/android/app/src/main/
    3. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"
    4. make sure anyone physical or virtual device attached is running.
    5. react-native run-android

1
posso eseguire adb reverse tcp:8081 tcp:8081nella cartella principale della mia app?
Marson Mao,

trova la cartella adb nel tuo sistema operativo. è in Android SDK / strumenti della piattaforma /
Atif Hussain,

1
ma vedo molti punti che indicano che questo comando può essere eseguito nella cartella principale dell'app, anche la risposta di dsissitka suggerisce che eseguirlo nella cartella dell'app principale, quindi sono davvero confuso.
Marson Mao,

può essere che questo comando sia gestito anche da reagente-nativo. Non sono sicuro di questo. ma adb è supportato dagli strumenti Android sdk. puoi trovare maggiori dettagli qui facebook.github.io/react-native/docs/…
Atif Hussain,

1
@MarsonMao A seconda della configurazione del sistema, potresti essere in grado di eseguire adb dalla directory dell'app. Leggi le variabili PATH e i pacchetti globali e locali per maggiori informazioni.
Mchandleraz,

0

È possibile seguire le istruzioni menzionate nella pagina ufficiale per risolvere questo problema. Questo problema si verifica sul dispositivo reale perché il bundle JS si trova sul sistema di sviluppo e l'app all'interno del dispositivo reale non è a conoscenza della sua posizione.


0

Nel nuovo React Native (sicuramente 0.59) è presente la configurazione di debug android/app/src/debug/res/xml/react_native_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="false">localhost</domain>
    <domain includeSubdomains="false">10.0.2.2</domain>
    <domain includeSubdomains="false">10.0.3.2</domain>
  </domain-config>
</network-security-config>

0

Avvia i due terminali sullo stesso e il primo terminale avvia reattivo-nativo di avvio e il secondo terminale reagisce-nativo di funzionamento-android questo problema viene risolto in modo semplice. E buona fortuna


0

Ehi, stavo affrontando questo problema con il mio progetto nudo nativo, il simulatore IOS funziona bene, ma Android ha continuato a darmi questo errore. ecco una possibile soluzione che ha funzionato per me.

passo 1, controlla se il dispositivo adb è autorizzato eseguendo nel tuo terminale: dispositivi adb

se non è autorizzato eseguire i seguenti comandi

passaggio 2, sudo adb kill-server passaggio 3, sudo adb start-server

quindi controlla se il comando adb devices mostra l'elenco dei dispositivi collegati all'emulatore-5554 dispositivo

anziché non autorizzato se si tratta di un dispositivo anziché non autorizzato

passaggio 4, esegui npx reag-native run-android

questo ha funzionato nel mio caso, spero che questo risolva il tuo problema.


0

Ho trovato questo strano ma ho trovato una soluzione. Ho notato che ogni tanto la mia cartella del progetto andava in sola lettura e non riuscivo a salvarla da VS. Quindi ho letto un suggerimento per trasferire NPM dall'utente PATH locale alla variabile globale PATH a livello di sistema, e ha funzionato come un incantesimo.


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.