Skript kann nicht geladen werden. Stellen Sie sicher, dass Sie entweder einen Metro-Server ausführen oder dass Ihr Bundle 'index.android.bundle' zur Veröffentlichung korrekt verpackt ist


159

react-native run-androidBefehl wird beendet, indem eine Nachricht im Android Simulator hinterlassen wird. Die Nachricht lautet wie folgt:

Skript kann nicht geladen werden. Stellen Sie sicher, dass Sie entweder einen Metro-Server ausführen oder dass Ihr Bundle 'index.android.bundle' zur Veröffentlichung korrekt verpackt ist.

Bildschirmfoto

Was mache ich falsch?



5
Ich habe das gleiche Problem, weil mein Gerät nicht mit dem Internet verbunden ist.
Huo Chhunleng

Dieser Fehler kommt: throw er; // Nicht behandeltes 'Fehler'-Ereignis
Saeed

Ich fand es und legte es ab stackoverflow.com/a/58570426/6852210
Alireza

@ Belle Solution, haben Sie eine Lösung gefunden?
Hitesh

Antworten:


92

Sie haben den Bundler noch nicht gestartet. Führen Sie zuvor npm startoder react-native startim Stammverzeichnis Ihres Projekts aus react-native run-android.



12
Sie müssen 2 Knotenkonsolen gleichzeitig ausführen. Einer startet und führt den Bundler aus, der andere führt den Emulator aus.
Nerdragen

26
Für mich tritt dieser Fehler auch dann auf, wenn der Bundler gestartet wird.
P. Lorand

2
Stellen Sie sicher, dass Port 8081 nicht blockiert ist. Stellen Sie außerdem sicher, dass Sie ein Terminal zum Starten des Bundlers verwenden, warten Sie, bis das Laden des Abhängigkeitsdiagramms abgeschlossen ist, und führen Sie dann reaktionsnatives run-android auf einem anderen Terminal aus.
Nerdragen

1
In Windows läuft es von selbst, aber unter Linux nicht, danke! Arbeite perfekt!
Adrian Serna

60

Diese Schritte helfen mir wirklich:

Schritt 1: Erstellen Sie ein Verzeichnis in Android / App / Src / Main / Assets

Linux-Befehl :mkdir android/app/src/main/assets

Schritt 2: Umbenennen index.android.js(im Stammverzeichnis) in index.js( Möglicherweise gibt es eine index.jsDatei, in der Sie sie nicht umbenennen müssen ) Führen Sie dann den folgenden Befehl aus:

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

Schritt 3: Erstellen Sie Ihre APK:react-native run-android

Bitte verwenden Sie index.js in der neuesten Version.

Genießen :)


Was ist der Speicherort dieser Datei in reagieren native Projekt index.android.j
Arbaz.in

@ Arbaz.in im Stammverzeichnis.
Saeed

@ Arbaz.in Vielleicht gibt es eine index.jsDatei im Stammverzeichnis. In diesem Fall müssen Sie sie nicht umbenennen
Saeed

@ Saeed ja fand es
Arbaz.in

3
Dies kann die App momentan nur ausführen, aber wie wird dies das Debuggen und Hot-Loading ermöglichen? Dies ist nicht die perfekte Lösung, um dies zu erreichen.
buddhiv

39

Für mich wurde dieser Fehler durch ein Upgrade von React-Native verursacht

Ab Android 9.0 (API-Level 28) ist die Klartextunterstützung standardmäßig deaktiviert.

Wenn Sie das Upgrade-Diff auschecken, müssen Sie ein Debug-Manifest erstellen 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>

Weitere Informationen finden Sie unter: https://stackoverflow.com/a/50834600/1713216

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


1
Arbeitete für mich an RN 0.61.3.
oabojad

2
Leider hat das bei mir nicht funktioniert. Ich hatte dies bereits und erhalte immer noch den gleichen Fehler, obwohl der Metro Bundler läuft.
Andrew

Ich habe festgestellt, dass ich manchmal zusätzliche Überschreibungen benötige, wenn ich eine networkSecurityConfig definiert habe. Es scheinen jedoch immer diese Einstellungen zu sein, die die Probleme für mich verursachen. Sie können versuchen, eine Sicherheitskonfiguration zu entfernen, und android:usesCleartextTraffic="true"im Hauptfeld angeben, AndroidManifest.xmlob dies funktioniert.
Tom

Dies funktionierte für mich auf RN 0.62
KevinAdu

Ich habe alle diese Einstellungen einschließlich Android: usingCleartextTraffic = "true", aber ich kann die App immer noch nicht auf einem realen Gerät ausführen.
Lucky_girl

25

Führen Sie zuerst die Schritte 4 und 5 aus, bevor Sie Ihr Projekt ausführen können. Wenn Sie das Ergebnis nicht erhalten (mit den Schritten 4 und 5), führen Sie die folgenden Schritte aus

1- Versuchen Sie, Ihre Node-Version herunterzustufen (aktuelle Version ist 12.13.1)

  choco uninstall nodejs
  choco install nodejs --version 12.8

2- Fügen Sie den Pfad des npm-Moduls hinzu (C:\Users\your user name\AppData\Roaming\npm ) zu Systemvariablen anstelle von Benutzervariablen hinzu

3- Installieren Sie react native global mit dem Befehl

  npm install -g react-native-cli

4- Gehen Sie zum Stammverzeichnis Ihres Projektverzeichnisses und führen Sie den folgenden Befehl aus:

  react-native start

5- Öffnen Sie ein anderes Terminal im Stammverzeichnis Ihres Projekts und führen Sie den folgenden Befehl aus:

   react-native run-android 

EDIT:

Sie verwenden Genymotion? Wenn ja, führen Sie den folgenden Schritt aus:

Nach dem obigen Schritt, wenn Sie den folgenden Fehler erhalten?

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

Öffnen Sie Ihre Genymotion und gehen Sie zu:

genymotion menu -> Settings -> ADB -> Dann auswählenuse custom android sdk tools (klicken Sie auf Durchsuchen, um den SDK-Speicherort zu finden)

Führen Sie zum Schluss Ihr Projekt erneut aus.


1
12.9 funktionierte auch für mich. Danke, ich hatte ein Upgrade auf Version 12.13.x durchgeführt und bekam das oben genannte Problem.
Huey Mataruse


18

Sie können Folgendes versuchen:

Fügen Sie diese Zeile in Ihre AndroidManifest.xml ein

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

18

Ein ähnliches Problem ist bei mir aufgetreten.
Anscheinend blockiert Mcafee den 8081-Port. Ich habe Stunden gebraucht, um das herauszufinden.

Versuchen Sie zu laufen:

react-native run-android --port=1234

Wenn die App mit einem Fehler im Emulator angezeigt wird, rufen Sie die Entwicklungseinstellungen ( Ctrl+ M) auf.

Ändern Sie den "Debug-Server-Host und -Port für das Gerät" in "localhost: 1234".

Schließen Sie die App und starten Sie sie in der App-Schublade.


1
danke für einen hinweis, ich musste port 8081 in meiner firewall öffnen und es fing an zu funktionieren
ukie

Große Gegenstimme dafür. Wenn Sie Mcafee haben, würde ich das versuchen, es hat bei mir funktioniert.
Puerto

Danke, hat mein Projekt gespeichert
Rafid

Ich bin seit zwei Tagen hier festgefahren, hätte nie gedacht, dass es ein blockierter Hafen ist! Vielen Dank!
P. Naoum

Ich habe versucht, den localhost: 8081 im Browser zu treffen, aber kein Glück. Wenig recherchiert und herausgefunden, dass Macafee diesen Port blockiert hat. Folge deinem Weg. Begann perfekt zu arbeiten.
Tushar Jajodia

17

Fügen Sie einfach drei Splash hinzu: node_modules \ metro-config \ src \ defaults \ blacklist.js

Ersetzen Sie diesen Teil:

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

12

Wenn Sie alles richtig konfiguriert haben, versuchen Sie Folgendes:

adb reverse tcp: 8081 tcp: 8081

Warum? "Wenn der RN-Packager ausgeführt wird, ist in Ihrem Browser unter 127.0.0.1:8081 ein aktiver Webserver verfügbar. Von diesem Server aus wird das JS-Bundle für Ihre Anwendung bereitgestellt und aktualisiert, wenn Sie Änderungen vornehmen. Ohne den Reverse-Proxy, Ihr Telefon kann keine Verbindung zu dieser Adresse herstellen. "

Alle Credits für Swingline0


Könnten Sie bitte Ihrer Antwort hinzufügen, warum dies funktionieren sollte und was dieser Befehl bewirkt?
creyD

verbrachte den ganzen Tag damit, Bibliotheken umzuschalten und das war mein Problem
Adam Katz

10

[Schnelle Antwort]

Nachdem ich versucht hatte, dieses Problem in meinem Arbeitsbereich zu lösen, fand ich eine Lösung.

Dieser Fehler ist darauf zurückzuführen, dass bei der Verwendung einiger Kombinationen aus NPM- und Knotenversion bei Metro ein Problem auftritt.

Sie haben 2 Alternativen:

  • Alternative 1: Versuchen Sie, npm und node version zu aktualisieren oder herunterzustufen.
  • Alternative 2: Gehen Sie zu dieser Datei: \node_modules\metro-config\src\defaults\blacklist.jsund ändern Sie diesen Code:

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

    und ändern Sie dies:

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

    Bitte beachten Sie, dass Sie den Code erneut ändern müssen , wenn Sie ein npm installoder ein yarn installausführen.


8

Dies funktionierte für mich, nachdem ich verschiedene Möglichkeiten ausprobiert hatte.

In der Datei node_modules\metro-config\src\defaults\blacklist.js

Ersetzen:

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

mit:

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

hoffe das hilft.


Arbeitete wie ein Zauber, Danke
César Bermúdez

Hat auch für mich gearbeitet. Aber warum musste ich das korrigieren? Was schief gelaufen ist?
Mashrur

Wie es aussieht, metro-configwird \ für Pfade anstelle von / verwendet, was in dieser Antwort geändert werden soll. Tu das nicht . Das Ändern von npm-Paketen bedeutet, dass Ihr gesamtes Team dies auf seinem Computer, in CI, im Staging, in der Produktion und jedes Mal tun muss, wenn metro-config ein Update veröffentlicht. Ein besserer Ansatz besteht darin, die Metro-Konfiguration auf GitHub zu teilen, einen Fix zu erstellen, einen PR zu pushen und einzureichen, um ihn für alle zu reparieren.
Cameron Wilby

6

Ab Android 9.0 (API-Level 28) ist die Klartextunterstützung standardmäßig deaktiviert.

Dies ist, was Sie tun müssen, um dieses Problem zu beseitigen, wenn Sie normale Ausführungsbefehle ordnungsgemäß ausführen

  1. npm installieren
  2. reaktionsnativer Start
  3. React-Native Run-Android

Und ändern Sie Ihre Android-Manifest-Datei wie folgt.

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

5

Nach Stunden auf der Suche nach einer Antwort. Die Lösung bestand darin, einen Downgrade-Knoten auf Version 12.4 zu erstellen.

In meinem Fall stelle ich fest, dass der Fehler nur in der Version React 0.60 mit der Knotenversion 12.6 auftritt.


4

Meine Lösung hierfür lautet wie folgt:

Starten Sie den Metro-Server

$ react-native start

Starten Sie Android

$ react-native run-android

Wenn Fehler mit der Meldung "Port 8081 wird bereits verwendet" angezeigt werden, können Sie diesen Prozess abbrechen und erneut ausführen

$ react-native start

Siehe Seite "Native Fehlerbehebung reagieren" .


4

Wenn Sie unter Linux arbeiten, öffnen Sie das Terminal aus dem App-Stammverzeichnis und führen Sie es aus

npm start

Öffnen Sie dann ein anderes Terminalfenster und führen Sie Folgendes aus:

react-native run-android

3

Ich möchte nur eine nicht offensichtliche Möglichkeit hinzufügen, die hier nicht behandelt wird. Ich verwende @ react-native-community / netinfo zum Erkennen von Netzwerkänderungen, hauptsächlich des Netzwerkstatus. Um den Netzwerk-Aus-Status zu testen, muss der WIFI-Schalter (am Emulator) ausgeschaltet sein. Dadurch wird auch die Brücke zwischen dem Emulator und der Debug-Umgebung effektiv abgeschnitten. Ich hatte WIFI nach meinen Tests nicht wieder aktiviert, da ich nicht am Computer war und es sofort vergaß, als ich zurückkam.

Es besteht die Möglichkeit, dass dies auch bei jemand anderem der Fall ist und es sich lohnt, dies zu überprüfen, bevor Sie weitere drastische Schritte unternehmen.


3

Ich hatte die gleichen Probleme, das Problem für mich war, dass sich adb nicht im richtigen Umgebungspfad befand. Der Fehler sagt Ihnen, dass der U-Bahn-Port, während Sie sich in der adb befinden, Ports getötet und neu gestartet werden.

Umgebungsvariable hinzufügen (ADB)

  1. Umgebungsvariablen öffnen
  2. Wählen Sie aus der PATH-Variablen des zweiten Frames und klicken Sie unten auf die Option Bearbeiten
  3. Klicken Sie auf die Option Hinzufügen
  4. Senden Sie den Pfad der SDK-Plattform-Tools C: \ Benutzer \ Mein Benutzer \ AppData \ Local \ Android \ Sdk \ Plattform-Tools

Hinweis : Oder je nachdem, wo sich adb.exe auf Ihrem Computer befindet

  1. Änderungen speichern

Führen Sie Android Build erneut aus

$ react-native run-android

Oder

$ react-native start

$ react-native run-android

3

Ich habe mich auch diesem Problem gestellt. Ich habe diesen folgenden Schritt gelöst.

Überprüfen Sie den Android SDK-Pfad Environment Veritable.

Fügen Sie ANDROID_HOME = C:\Users\user_name\AppData\Local\Android\Sdkin Systemvariable
und C:\Users\user_name\AppData\Local\Android\Sdk\platform-toolsPfad in Systemvariable hinzu

Ersetzen Sie sharedBlacklist wie folgt : Codesegment,

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

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

Führen Sie dann npx react-native run-android --port 9001 aus

Viel Spaß beim Codieren ..!


2

Ich habe dies nur erlebt, weil mein Wifi auf meinem Emulator fälschlicherweise ausgeschaltet war. Ich habe es wieder eingeschaltet und es hat gut funktioniert. Hoffe, es ist hilfreich für jemanden


2

Die Lösung, die für mich funktioniert hat, ist die folgende:

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

Mein Codebeispiel


2

Aktualisieren Sie diesen Teil in der Metro Blacklist

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

2

Ich habe das gleiche Problem festgestellt, als ich dem Tutorial " React Native" gefolgt bin (Entwicklung unter Linux und Ausrichtung auf Android).

Dieses Problem hat mir geholfen, das Problem in den folgenden Schritten zu beheben. Führen Sie die folgenden Befehle in der folgenden Reihenfolge aus:

  1. (im Projektverzeichnis) 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

Sie können die obigen Schritte automatisieren, indem Sie sie in einen scriptsTeil davon package.jsonwie folgt einfügen :

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

Dann können Sie npm run android-linuxjedes Mal einfach über Ihre Befehlszeile ausführen .


1

Versuche Folgendes.

  1. Entfernen Sie Android- und IOS-Ordner
  2. Führen Sie den reaktionsnativen Auswurf aus
  3. Run React-Native Run-Android

Möglicherweise haben Sie nach den vorherigen Schritten Ausführungen npm start - --reset-cache

Ich arbeite, ich hoffe es hilft dir.


1

Standardmäßig wird auf dem Port 8081 ein winziger JavaScript-Server namens "Metro Server" ausgeführt.

Sie müssen diesen Port verfügbar machen, damit dieser Server gestartet werden kann. So,

  1. Lassen Sie den Port los
  2. Schließen Sie Ihr virtuelles Gerät
  3. "React-Native Run-Android" wieder.

Wie kann ich den Port freigeben?

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

Wie kann ich den Prozess beenden, der derzeit einen Port auf localhost in Windows verwendet?

und vor allem habe ich meine Knotenversion von 8.x auf 10.x (neueste Version) aktualisiert, wie von Facebook @ https://facebook.github.io/react-native/docs/getting-started vorgeschlagen


1

Für mich begann dieses Problem mit dem Upgrade von React-Native. Das Upgrade war erforderlich, um 64-Bit-Unterstützung hinzuzufügen.

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

Eine wichtige Änderung, die ich für das Upgrade vorgenommen habe, war in ../android/build/build.gradle

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

Ich musste die targetSdkVersion nach der Warnung von 27 auf 28 ändern, als ich versuchte, den Build (.apk) auf die Goole-Play-Konsole hochzuladen. Ich wusste nicht, dass dies für mich die Hauptursache für den oben genannten Fehler war. Sofortige Antworten von @tom und @tinmarfrutos machten absolut Sinn.

Ich habe das Problem durch Hinzufügen von android gelöst: usedCleartextTraffic = "true" zu meiner android / app / src / debug / AndroidManifest.xml


1

In meinem Fall habe ich in meinem Emulator einen Proxy eingerichtet. Es funktioniert wieder normal, nachdem ich diesen Proxy entfernt habe.


1

Möglichkeit dieses Fehlers ist auch der falsche Weg, einmal prüfen

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

Daran habe ich nie gedacht. Aber das war die Antwort für mich.
Siraj Alam

1

WICHTIG - Möglicherweise befinden sich in Ihrer Umgebung viele virtuelle Geräte. Stellen Sie sicher, dass Sie die Einstellung erneut wiederholen, wenn Sie die AVD ändern.

DEBUG-INFORMATIONEN-

Wenn bei dem oben genannten Fehler ein Fehler auftritt, müssen Sie zunächst überprüfen, was auf Port 8081 ausgeführt wird

Der schnellste Weg, dies zu finden, ist der folgende Befehl im Terminal

netstat -aon | findstr 8081

Wenn das etwas anzeigt, bedeutet dies, dass der Port blockiert ist. Wenn möglich, entsperren Sie diesen Port.

Andernfalls müssten Sie den Port ändern. Der Prozess dazu wurde bereits im obigen Kommentar von Naveen Kumar erwähnt

react-native run-android --port=9001

Stellen Sie sicher, dass 9001 auch nicht verwendet wird :)


1

Versuchen Sie diese Schritte, wenn Sie alles versucht haben, was in den obigen Lösungen erwähnt wurde:

  1. Erstellen Sie eine Datei in Android / App / Src / Main / Assets
  2. Führen Sie den folgenden Befehl aus:

reaktionsnatives Bundle - Plattform android --dev false --Eintragsdatei index.js --Bundle-Ausgabe android / app / src / main / assets / index.android.bundle --assets-dest android / app / src / main / res

  1. Führen Sie nun Ihren Befehl aus, um z. B. "React-Native Run-Android" zu erstellen

Wow das hat mir teilweise geholfen. Ich habe meine App für den Google Play Market vorbereitet. Ich habe lediglich neue Assets-Symbole für Android hinzugefügt und das Zielversin auf 28 geändert. Ich musste auf die Version 27 zurückkehren und alle beginnen wieder zu arbeiten. Ich weiß nicht, warum ich nicht reagieren soll sdk v28.
Michail Pidgorodetskiy

0

Wenn Sie unter Linux arbeiten, kann es vorkommen, dass Ihr npm-Remoteserver nicht ausgeführt wird. Öffnen Sie ein anderes Terminal (mit Projektverzeichnis) und führen Sie diesen Befehl sudo npm start oder sudo react-native start aus, bevor Sie sudo react-native run-android ausführen


0

Die Fehlermeldung auf dem Emulator ist irreführend. In meinem Fall habe ich ein Macbook verwendet. Ich musste die Berechtigungen für Android / Gradlew durch Ausführen ändern $ chmod 755 ./gradlew, und dann konnte die App erstellt und auf dem Android-Emulator bereitgestellt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.