Impossibile caricare lo script. Assicurati di eseguire un server Metro o che il pacchetto "index.android.bundle" sia impacchettato correttamente per il rilascio


160

react-native run-androidil comando termina lasciando un messaggio nel simulatore Android. Il messaggio è il seguente:

Impossibile caricare lo script. Assicurati di eseguire un server Metro o che il pacchetto "index.android.bundle" sia impacchettato correttamente per il rilascio.

Immagine dello schermo

Che cosa sto facendo di sbagliato?



5
Ho lo stesso problema perché il mio dispositivo non è connesso a Internet.
Huo Chhunleng,

Questo errore viene: buttare; // Evento "errore" non
gestito

l'ho trovato e messo giù stackoverflow.com/a/58570426/6852210
Alireza

@Belle Solution, hai trovato qualche soluzione?
Hitesh,

Risposte:


94

Non hai ancora avviato il bundler. Esegui npm starto react-native startnella directory principale del tuo progetto prima react-native run-android.


per prima cosa eseguo avvio nativo di reazione ma quando eseguo run-android di reazione nativo, viene terminato dopo la compilazione riuscita
Belle Solutions

12
Devi avere una console a 2 nodi in esecuzione contemporaneamente. Uno avvia ed esegue il bundler, l'altro esegue l'emulatore.
Nerdragen,

27
Per me, questo errore appare anche se il bundler è avviato.
P.

2
Assicurarsi che la porta 8081 non sia bloccata. Inoltre, assicurati di utilizzare un terminale per avviare il bundler, attendi che termini il caricamento del grafico delle dipendenze, quindi esegui run-android reattivo-nativo su un altro terminale.
Nerdragen,

1
In Windows funziona da solo, ma su Linux no, grazie! Lavoro perfetto!
Adrian Serna,

62

Questi passaggi mi aiutano davvero:

Passaggio 1: crea una directory in android / app / src / main / assets

Comando Linux :mkdir android/app/src/main/assets

Passaggio 2: Rinomina index.android.js(nella directory principale) in index.js( Forse esiste un index.jsfile nel qual caso non è necessario rinominarlo ) quindi esegui il comando seguente:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

Passaggio 3: crea il tuo APK:react-native run-android

Si prega di utilizzare index.js nell'ultima versione.

Godere :)


Qual è la posizione di questo file nel progetto nativo reagire index.android.j
Arbaz.in

@ Arbaz.in nella directory principale.
Saeed,

@ Arbaz.in Forse c'è un index.jsfile nella directory principale, nel qual caso non è necessario rinominarlo
Saeed

@Saeed sì l'ho trovato
Arbaz.in

3
Questo può solo eseguire l'app per il momento, ma come consentirà il debug e il caricamento a caldo? questa non è la soluzione perfetta per farlo.
buddiv,

39

Per me questo errore è stato causato da un aggiornamento di React-native

A partire da Android 9.0 (livello API 28), il supporto testo in chiaro è disabilitato per impostazione predefinita.

Se si verifica il diff di aggiornamento è necessario creare un manifest di debug android/app/src/debug/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
</manifest>

Per ulteriori informazioni: https://stackoverflow.com/a/50834600/1713216

https://react-native-community.github.io/upgrade-helper/


1
Ha funzionato per me su RN 0.61.3.
Żabojad,

2
Sfortunatamente, questo non ha funzionato per me. Ho già avuto questo e sto ancora ricevendo lo stesso errore, anche se Metro Bundler è in esecuzione.
Andrew,

Ho scoperto che a volte ho bisogno di sostituzioni extra se ho definito networkSecurityConfig, sembra che siano sempre queste impostazioni a causare i problemi per me. Puoi provare a rimuovere qualsiasi configurazione di sicurezza e specificare android:usesCleartextTraffic="true"nella schermata principale AndroidManifest.xmlse funziona?
Tom,

Questo ha funzionato per me su RN 0.62
KevinAdu il

Ho tutte quelle impostazioni tra cui Android: useCleartextTraffic = "true", ma non riesco ancora a eseguire app su dispositivo reale.
Lucky_girl,

25

Innanzitutto esegui i passaggi 4 e 5, quindi puoi eseguire il tuo progetto. Se non si ottiene il risultato (con i passaggi 4 e 5), procedere come segue

1- Prova a eseguire il downgrade della versione del tuo nodo (la versione attuale è 12.13.1)

  choco uninstall nodejs
  choco install nodejs --version 12.8

2- Aggiungere il percorso del modulo npm ( C:\Users\your user name\AppData\Roaming\npm) alle variabili di sistema anziché alle variabili utente

3- Installa reagire nativamente a livello globale usando il comando

  npm install -g react-native-cli

4- Vai alla radice della directory del tuo progetto ed esegui il seguente comando:

  react-native start

5- Aprire un altro terminale nella radice del progetto ed eseguire il comando seguente:

   react-native run-android 

MODIFICARE :

Stai usando Genymotion? In caso affermativo, procedere come segue:

Dopo il passaggio precedente se viene visualizzato il seguente errore?

error Failed to launch emulator. Reason: No emulators found as an output of `emulator -list-avds`.

Apri il tuo genymotion e vai a:

genymotion menu -> Settings -> ADB -> Quindi selezionare use custom android sdk tools(fare clic su Sfoglia per trovare la posizione SDK)

Infine, esegui di nuovo il tuo progetto ..


1
12.9 ha funzionato anche per me, grazie, ho eseguito l'aggiornamento alla versione 12.13.x e ho iniziato a riscontrare il problema sopra riportato.
Huey Mataruse,


18

Puoi provare quanto segue:

Aggiungi questa riga sul tuo AndroidManifest.xml

<application
[...]
android:usesCleartextTraffic="true"
/>
[...]
</application>

18

Un problema simile si è verificato con me.
Apparentemente Mcafee blocca la porta 8081. Mi ci sono volute ore per capirlo.

Prova a correre:

react-native run-android --port=1234

Quando l'app si presenta con un errore sull'emulatore, entra nelle impostazioni di sviluppo ( Ctrl+ M).

Modificare "Host e porta del server di debug per il dispositivo" in "localhost: 1234".

Chiudi l'app e avviala dal cassetto delle app.


1
grazie per un suggerimento, ho dovuto aprire la porta 8081 nel mio firewall e ha iniziato a funzionare
ukie

Grande voto per questo. Se hai Mcafee, proverei questo, ha funzionato per me.
Puerto

Grazie, salvato il mio progetto
Rafid,

Sono stato bloccato qui per due giorni, non avrei mai pensato che fosse una porta bloccata! Molte grazie!
P. Naoum,

Ho provato a colpire il localhost: 8081 nel browser, ma senza fortuna. Poche ricerche e hanno scoperto che macafee ha bloccato quella porta. Folllowed your way. Ha iniziato a funzionare perfettamente.
Tushar Jajodia,

17

basta aggiungere tre splash in: node_modules \ metro-config \ src \ defaults \ blacklist.js

sostituire questa parte:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

12

se hai tutto correttamente configurato, prova questo:

adb tcp inverso: 8081 tcp: 8081

Perché? "Quando il packager RN è in esecuzione, è presente un server Web attivo accessibile nel browser in 127.0.0.1:8081. È da questo server che il pacchetto JS per la tua applicazione viene offerto e aggiornato mentre apporti le modifiche. Senza il proxy inverso, il tuo telefono non sarebbe in grado di connettersi a quell'indirizzo ".

tutti i crediti verso Swingline0


Potresti per favore aggiungere alla tua risposta perché questo dovrebbe funzionare e cosa fa questo comando?
creyD

ho passato l'intera giornata a cercare di attivare / disattivare le librerie e questo era il mio problema
Adam Katz,

10

[Risposta rapida]

Dopo aver provato a risolvere questo problema nel mio spazio di lavoro, ho trovato una soluzione.

Questo errore è dovuto a un problema con Metro che utilizza alcune combinazioni di NPM e versione Node.

Hai 2 alternative:

  • Alternativa 1: provare ad aggiornare o eseguire il downgrade di npm e della versione del nodo.
  • Alternativa 2: vai a questo file: \node_modules\metro-config\src\defaults\blacklist.jse modifica questo codice:

    var sharedBlacklist = [
      /node_modules[/\\]react[/\\]dist[/\\].*/,
      /website\/node_modules\/.*/,
      /heapCapture\/bundle\.js/,
      /.*\/__tests__\/.*/
    ];

    e cambia in questo:

    var sharedBlacklist = [
      /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
      /website\/node_modules\/.*/,
      /heapCapture\/bundle\.js/,
      /.*\/__tests__\/.*/
    ];

    Si noti che se si esegue un npm installo un yarn installè necessario modificare nuovamente il codice.


8

Questo ha funzionato per me dopo aver provato diversi modi.

Nel file node_modules\metro-config\src\defaults\blacklist.js

Sostituisci:

var sharedBlacklist = [
  /node_modules[/\\]react[/\\]dist[/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

con :

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

spero che questo ti aiuti.


Ha funzionato come un fascino, grazie
César Bermúdez,

Ha funzionato anche per me. Ma perché l'ho dovuto correggere? Che cosa è andato storto?
Mashrur,

Dal suo aspetto, metro-configusato \ per percorsi invece di /, che questa risposta suggerisce di modificare. Non farlo . La modifica dei pacchetti npm significa che tutto il team deve farlo sulla propria macchina, in CI, nella messa in scena, nella produzione e ogni volta che metro-config rilascia un aggiornamento. Un approccio migliore consiste nel biforcare metro-config su GitHub, eseguire una correzione, inviare e inviare un PR per risolverlo per tutti.
Cameron Wilby il

6

A partire da Android 9.0 (livello API 28), il supporto testo in chiaro è disabilitato per impostazione predefinita.

Questo è ciò che devi fare per sbarazzarti di questo problema se esegui correttamente i normali comandi

  1. npm install
  2. inizio reattivo
  3. reatt-native run-android

E modifica il tuo file manifest Android in questo modo.

<application
    android:name=".MainApplication"
    android:icon="@mipmap/ic_launcher"
    android:usesCleartextTraffic="true" // add this line with TRUE Value.
android:theme="@style/AppTheme">

5

Dopo ore alla ricerca di una risposta. La soluzione era quella di creare un nodo di downgrade alla versione 12.4.

Nel mio caso mi rendo conto che l'errore si verifica solo nella versione reagisce nativo 0.60 con il nodo versione 12.6.


4

La mia soluzione è la seguente:

Avviare il server Metro

$ react-native start

Avvia Android

$ react-native run-android

Se vedi errori che dicono "porta 8081 già in uso", puoi terminare quel processo ed eseguire nuovamente

$ react-native start

Vedi la pagina di risoluzione dei problemi nativi di React .


4

Se sei su Linux, apri il terminale dalla directory principale dell'app ed esegui

npm start

quindi aprire un'altra finestra del terminale ed eseguire:

react-native run-android

3

Voglio solo aggiungere una possibilità non ovvia non trattata qui. Sto usando @ React-native-community / netinfo per rilevare i cambiamenti della rete, principalmente lo stato della rete. Per testare lo stato di rete disattivata, l'interruttore WIFI (sull'emulatore) deve essere spento. Ciò inoltre interrompe efficacemente il ponte tra l'emulatore e l'ambiente di debug. Non avevo riattivato il WIFI dopo i miei test da quando ero lontano dal computer e me ne sono immediatamente dimenticato quando sono tornato.

C'è la possibilità che questo possa valere anche per qualcun altro e che valga la pena di verificare prima di fare qualsiasi altro passo drastico.


3

Avevo lo stesso problema, il problema per me era che l' adb non si trovava nel giusto percorso ambientale, l'errore ti stava dicendo porta metropolitana, mentre sei nell'adb, le porte vengono uccise e riavviate.

Aggiungi variabile di ambiente (ADB)

  1. Apri variabili d'ambiente
  2. Selezionare dalla variabile PATH del secondo fotogramma e fare clic sull'opzione di modifica di seguito
  3. Fai clic su Aggiungi opzione
  4. Invia il percorso degli strumenti della piattaforma sdk C: \ Users \ My User \ AppData \ Local \ Android \ Sdk \ platform-tools

Nota : oppure a seconda di dove si trova adb.exe nel tuo computer

  1. Salvare le modifiche

Esegui di nuovo Android Build

$ react-native run-android

O

$ react-native start

$ react-native run-android

3

Ho anche affrontato questo problema. Ho risolto questo passaggio seguente.

Controlla il percorso sdk di Android in Environment Veritable.

Aggiungi ANDROID_HOME = C:\Users\user_name\AppData\Local\Android\Sdkin variabile di sistema
e C:\Users\user_name\AppData\Local\Android\Sdk\platform-toolspercorso in variabile di sistema

sostituisci sharedBlacklist come sotto il segmento di codice,

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

in node_modules / metro-config / src / default / blacklist.js

Quindi eseguire npx reag-native run-android --port 9001

Buona codifica ..!


2

L'ho sperimentato solo perché il mio Wifi era stato spento per errore sul mio emulatore. L'ho riacceso e ha iniziato a funzionare correttamente. Spero sia utile a qualcuno


2

La soluzione che ha funzionato per me è la seguente:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
]; 

Il mio esempio di codice


2

aggiorna questa parte nella lista nera della metropolitana

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

2

Ho riscontrato lo stesso problema seguendo il tutorial di React Native (sviluppo su Linux e targeting per Android).

Questo problema mi ha aiutato a risolvere il problema nei seguenti passaggi. Esegui i seguenti comandi nella sequenza seguente:

  1. (nella directory del progetto) mkdir android/app/src/main/assets
  2. react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
  3. react-native run-android

Puoi automatizzare i passaggi precedenti posizionandoli in scriptsparte in package.jsonquesto modo:

"android-linux": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && react-native run-android"

Quindi puoi semplicemente eseguire npm run android-linuxdalla tua riga di comando ogni volta.


1

Per impostazione predefinita, sulla porta 8081 viene eseguito un piccolo server JavaScript chiamato "Metro Server".

È necessario rendere disponibile questa porta per l'avvio di questo server. Così,

  1. rilasciare la porta
  2. chiudi il tuo dispositivo virtuale
  3. "Reag-native run-android" di nuovo.

Come rilasciare la porta?

http://tenbull.blogspot.com/2019/05/how-to-kill-process-currently-using.html

Come terminare il processo attualmente utilizzando una porta su localhost in Windows?

e, soprattutto, ho aggiornato la mia versione del nodo da 8.xa 10.x (ultima), come suggerito da facebook @ https://facebook.github.io/react-native/docs/getting-started


1

Per me questo problema è iniziato con l'aggiornamento di reattivo nativo. L'aggiornamento era necessario per aggiungere il supporto a 64 bit.

Before:
-------- 
Environment:
Node: 10.15.0
npm: 6.9.0
Watchman: 4.9.0
Xcode: Not Found
Android Studio: 3.4 AI-183.6156.11.34.5692245

Packages: (wanted => installed)
react: 16.0.0-alpha.12 => 16.0.0-alpha.12
react-native: ~0.55.2 => 0.55.4
react-native-cli: 2.0.1

After:
------
info 
React Native Environment Info:
Binaries:
Node: 10.15.0
npm: 6.9.0
Watchman: 4.9.0
SDKs:
Android SDK:
API Levels: 23, 26, 27, 28
Build Tools: 27.0.3, 28.0.3
System Images: android-28 | Google APIs Intel x86 Atom
IDEs:
Android Studio: 3.4 AI-183.6156.11.34.5692245
Xcode: /undefined - /usr/bin/xcodebuild
npmPackages:
react: ^16.8.6 => 16.9.0 
react-native: 0.59.9 => 0.59.9 
npmGlobalPackages:
create-react-native-app: 2.0.2
react-native-cli: 2.0.1

Inoltre, un'importante modifica che ho apportato per l'aggiornamento è stata in ../android/build/build.gradle

android {
    ...
    defaultConfig {
        ...
        targetSdkVersion 28
        ...
    }
    ...
}

Ho dovuto cambiare targetSdkVersion da 27 a 28 seguendo l'avvertenza quando ho provato a caricare la build (.apk) su goole play console. Non ho capito che questa era la causa principale dell'errore sopra riportato per me. Le risposte immediate di @tom e @tinmarfrutos hanno avuto un senso assoluto.

Ho risolto il problema aggiungendo android: useCleartextTraffic = "true" sul mio android / app / src / debug / AndroidManifest.xml


1

Nel mio caso, ho impostato un proxy nel mio emulatore. Funziona alla normalità dopo aver rimosso quel proxy.


1

possibilità di questo errore è anche il percorso sbagliato, controllare una volta

 export ANDROID_HOME=/Users/microrentindia/Library/Android/sdk/
 export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

Non ci ho mai pensato. Ma questa è stata la risposta per me.
Siraj Alam,

1

IMPORTANTE: potresti avere molti dispositivi virtuali nel tuo ambiente. Assicurarsi che se si sta modificando AVD, ripetere nuovamente l'impostazione.

INFORMAZIONI SUL DEBUG

Nel caso in cui si verifichi l'errore sopra riportato, è necessario verificare prima cosa è in esecuzione sulla porta 8081

Il modo più rapido per scoprire che sta usando il seguente comando nel terminale

netstat -aon | findstr 8081

se questo ti mostra qualcosa significa che la porta è bloccata. se possibile ottenere quella porta sbloccata.

Altrimenti, dovrai cambiare la porta. Il processo per farlo è già stato menzionato nel commento sopra di Naveen Kumar

react-native run-android --port=9001

Assicurarsi che 9001 non sia utilizzato :)


1

Prova questi passaggi se hai provato tutto quanto menzionato nelle soluzioni sopra:

  1. Crea file in android / app / src / main / assets
  2. Esegui il seguente comando:

bundle reattivo nativo - piattaforma android --dev false --entry-file index.js --bundle-output android / app / src / main / assets / index.android.bundle --assets-dest android / app / src / main / res

  1. Ora esegui il tuo comando per creare, ad esempio, reatt-native run-android

Wow, questo mi ha aiutato parzialmente. Stavo preparando la mia app per google play market tutto quello che ho fatto è stato aggiungere nuove icone di risorse per Android e cambiare target rispetto a 28. Ho dovuto tornare alla versione v27 e ricominciare a lavorare ... Non so perché non reagire con sdk v28.
Michail Pidgorodetskiy,

0

Prova quanto segue.

  1. Rimuovi le cartelle Android e IOS
  2. eseguire espulsione reattivo nativo
  3. eseguire reattivo nativo run-android

Forse dopo i passaggi precedenti hai esecuzioni npm start - --reset-cache

Lavoro, spero che ti aiuti.


0

Se si esegue su un sistema operativo Linux, potrebbe esserci un caso in cui il server remoto npm non è in esecuzione. Apri un altro terminale (con la directory di progetto) ed esegui questo comando sudo npm start o sudo rea -native start prima di fare sudo Rea-native run-android


0

Il messaggio di errore sull'emulatore è in qualche modo fuorviante. Nel mio caso, ho usato un Macbook. Avevo bisogno di cambiare le autorizzazioni su Android / Gradlew eseguendo $ chmod 755 ./gradlewe quindi l'app poteva essere costruita e distribuita nell'emulatore Android.

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.