No se puede cargar la secuencia de comandos. Asegúrese de que está ejecutando un servidor Metro o de que su paquete 'index.android.bundle' está empaquetado correctamente para su lanzamiento

160

react-native run-androidel comando termina dejando un mensaje en el simulador de Android. El mensaje es el siguiente:

No se puede cargar la secuencia de comandos. Asegúrese de que está ejecutando un servidor Metro o de que su paquete 'index.android.bundle' está empaquetado correctamente para su lanzamiento.

Captura de pantalla

¿Qué estoy haciendo mal?

Belle Solutions
fuente
¿puedes probar este enlace stackoverflow.com/questions/32572399/… ?
errorau
55
Tengo el mismo problema porque mi dispositivo no está conectado a Internet.
Huo Chhunleng
Este error que viene: tirar er; // Evento de 'error' no controlado
Saeed,
@Belle Solution, ¿encontraste alguna solución?
Hitesh

Respuestas:

94

Aún no has comenzado el paquete. Ejecute npm starto react-native starten el directorio raíz de su proyecto antes react-native run-android.

Nerdragen
fuente
primero ejecuto react-native start pero cuando ejecuto react-native run-android, termina después de la compilación exitosa
Belle Solutions
12
Debe tener una consola de 2 nodos ejecutándose simultáneamente. Uno inicia y ejecuta el paquete, el otro ejecuta el emulador.
Nerdragen
27
Para mí, este error aparece incluso si se inicia el paquete.
P.Lorand
2
Asegúrese de que el puerto 8081 no esté bloqueado. Además, asegúrese de usar un terminal para iniciar el paquete, espere a que termine de cargar el gráfico de dependencia, luego ejecute react-native run-android en otro terminal.
Nerdragen el
1
En Windows se ejecuta solo, pero en Linux no lo hace, ¡gracias! Trabajo perfecto!
Adrian Serna
62

Estos pasos realmente me ayudan:

Paso 1: crea un directorio en android / app / src / main / assets

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

Paso 2: cambie el nombre index.android.js(en el directorio raíz) a index.js( Quizás haya un index.jsarchivo en cuyo caso no necesita cambiarle el nombre ) y luego ejecute el siguiente comando:

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

Paso 3: crea tu APK:react-native run-android

Utilice index.js en la última versión.

Disfruta :)

Saeed
fuente
¿Cuál es la ubicación de este archivo en reaccionar proyecto nativo index.android.j
Arbaz.in
@ Arbaz.in en el directorio raíz.
Saeed
@ Arbaz.in Tal vez hay un index.jsarchivo en el directorio raíz, en cuyo caso no necesita cambiarle el nombre
Saeed
@Saeed sí lo encontró
Arbaz.in
3
Esto solo puede ejecutar la aplicación por el momento, pero ¿cómo permitirá esto la depuración y la carga en caliente? Esta no es la solución perfecta para hacer esto.
buddhiv
39

Para mí, este error fue causado por una actualización de react-native

A partir de Android 9.0 (API nivel 28), la compatibilidad con texto sin formato está deshabilitada de forma predeterminada.

Si revisa la diferencia de actualización, debe crear un manifiesto de depuración 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>

Consulte para obtener más información: https://stackoverflow.com/a/50834600/1713216

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

Tom
fuente
1
Trabajó para mí en RN 0.61.3.
boabojad
2
Lamentablemente, esto no funcionó para mí. Ya tenía esto y sigo recibiendo el mismo error, a pesar de que Metro Bundler se está ejecutando.
Andrew
He descubierto que a veces necesito anulaciones adicionales si tengo un networkSecurityConfig definido, aunque parece que estas configuraciones siempre me causan problemas. ¿Puede intentar eliminar cualquier configuración de seguridad y especificar android:usesCleartextTraffic="true"en la vista principal AndroidManifest.xmlsi eso funciona?
Tom
Esto funcionó para mí en RN 0.62
KevinAdu
Tengo todas esas configuraciones, incluido Android: usesCleartextTraffic = "true", pero aún no puedo ejecutar la aplicación en un dispositivo real.
Lucky_girl
25

Primero realice los pasos 4 y 5, luego puede ejecutar su proyecto. Si no obtiene el resultado (con los pasos 4 y 5), realice los siguientes pasos

1- Intenta degradar tu versión de Nodo (la versión actual es 12.13.1)

  choco uninstall nodejs
  choco install nodejs --version 12.8

2- Agregue la ruta del módulo npm ( C:\Users\your user name\AppData\Roaming\npm) a las variables del sistema en lugar de las variables de usuario

3- Instalar reaccionar nativo globalmente mediante el comando

  npm install -g react-native-cli

4- Vaya a la raíz del directorio de su proyecto y ejecute el siguiente comando:

  react-native start

5- Abre otra terminal en la raíz de tu proyecto y ejecuta el siguiente comando:

   react-native run-android 

EDITAR:

¿Estás usando Genymotion? En caso afirmativo, realice el siguiente paso:

Después del paso anterior, ¿obtiene el siguiente error?

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

Abre tu genymotion y ve a:

genymotion menu -> Settings -> ADB -> Luego seleccione use custom android sdk tools(haga clic en Examinar para encontrar la ubicación de SDK)

Finalmente, ejecute su proyecto nuevamente.

AbolfazlR
fuente
1
12.9 también funcionó para mí. Gracias. Me actualicé a la versión 12.13.xy comencé a tener el problema anterior.
Huey Mataruse
Antecedentes de esta respuesta: github.com/facebook/react-native/issues/26598
Christian Davén
18

Puedes probar lo siguiente:

Agregue esta línea en su AndroidManifest.xml

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

Un problema similar sucedió conmigo.
Aparentemente, Mcafee bloquea el puerto 8081. Me tomó horas resolver esto.

Intenta correr:

react-native run-android --port=1234

Cuando la aplicación aparezca con un error en el emulador, ingrese a la configuración de desarrollo ( Ctrl+ M).

Cambie el "Host del servidor de depuración y el puerto del dispositivo" a "localhost: 1234".

Cierre la aplicación e iníciela desde el cajón de aplicaciones.

Naveen Kumar
fuente
1
gracias por una pista, que tenía que abrir el puerto 8081 en mi firewall y comenzó a trabajar
ukie
Gran voto a favor de esto. Si tienes Mcafee, probaría esto, funcionó para mí.
Puerto
Gracias, salvé mi proyecto
Rafid
He estado atrapado aquí por dos días, ¡nunca hubiera pensado que es un puerto bloqueado! ¡Muchas gracias!
P. Naoum
Traté de golpear el localhost: 8081 en el navegador pero no tuve suerte. Poca investigación y descubrió que macafee ha bloqueado ese puerto. Seguí tu camino. Comenzó a trabajar perfectamente bien.
Tushar Jajodia
17

solo agregue tres splash en: node_modules \ metro-config \ src \ defaults \ blacklist.js

reemplace esta parte:

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

si tiene todo configurado correctamente, intente esto:

adb reverse tcp: 8081 tcp: 8081

¿Por qué? "Cuando se ejecuta el empaquetador RN, hay un servidor web activo accesible en su navegador en 127.0.0.1:8081. Es desde este servidor que el paquete JS para su aplicación se sirve y actualiza a medida que realiza cambios. Sin el proxy inverso, su teléfono no podría conectarse a esa dirección ".

todos los créditos a Swingline0

Tua Tara
fuente
¿Podría agregar a su respuesta por qué esto debería funcionar y qué hace este comando?
creyD
Pasé todo el día tratando de alternar bibliotecas y este fue mi problema
Adam Katz
10

[Respuesta rápida]

Después de intentar resolver este problema en mi espacio de trabajo, encontré una solución.

Este error se debe a que hay un problema con Metro al usar algunas combinaciones de NPM y la versión Node.

Tienes 2 alternativas:

  • Alternativa 1: Intente actualizar o degradar npm y la versión del nodo.
  • Alternativa 2: vaya a este archivo \node_modules\metro-config\src\defaults\blacklist.jsy cambie este código:

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

    y cambia a esto:

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

    Tenga en cuenta que si ejecuta una npm installo una yarn install, debe cambiar el código nuevamente.

Javier C.
fuente
8

Esto funcionó para mí después de intentarlo de varias maneras.

En el archivo node_modules\metro-config\src\defaults\blacklist.js

Reemplazar:

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__\/.*/
];

espero que esto ayude.

Mangalprada Malaya
fuente
Funcionó de maravilla, gracias
César Bermúdez
A mí también me funcionó. Pero, ¿por qué tuve que corregirlo? ¿Qué salió mal?
Mashrur
Por lo que parece, metro-configusó \ para rutas en lugar de /, que esta respuesta sugiere modificar. No hagas esto . La modificación de los paquetes npm significa que todo su equipo tiene que hacer esto en su máquina, en CI, en la puesta en escena, en la producción y cada vez que metro-config lanza una actualización. Un mejor enfoque es bifurcar la configuración de metro en GitHub, comprometer una solución, presionar y enviar un RP para solucionarlo para todos.
Cameron Wilby
6

A partir de Android 9.0 (API nivel 28), la compatibilidad con texto sin formato está deshabilitada de forma predeterminada.

Esto es lo que debe hacer para deshacerse de este problema si ejecuta correctamente los comandos de ejecución normales

  1. npm install
  2. inicio reaccionar nativo
  3. react-native run-android

Y modifique su archivo de manifiesto de Android de esta manera.

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

Después de horas buscando una respuesta. La solución fue hacer un nodo de degradación a la versión 12.4.

En mi caso, me doy cuenta de que el error solo ocurre en la versión reaccionar nativa 0.60 con la versión 12.6 del nodo.

Victor Araújo
fuente
4

Mi solución a esto es la siguiente:

Inicie el servidor Metro

$ react-native start

Inicia Android

$ react-native run-android

Si ve errores que dicen "el puerto 8081 ya está en uso", puede eliminar ese proceso y volver a ejecutar

$ react-native start

Consulte la página Reaccionar solución de problemas nativa .

shizhen
fuente
4

Si está en Linux, abra el terminal desde el directorio raíz de la aplicación y ejecute

npm start

luego abra otra ventana de terminal y ejecute:

react-native run-android
solomon njobvu
fuente
3

Solo quiero agregar una posibilidad no obvia no cubierta aquí. Estoy usando @ react-native-community / netinfo para detectar cambios en la red, principalmente el estado de la red. Para probar el estado apagado de la red, el interruptor WIFI (en el emulador) debe estar apagado. Esto también corta efectivamente el puente entre el emulador y el entorno de depuración. No había vuelto a habilitar WIFI después de mis pruebas ya que estaba lejos de la computadora y rápidamente lo olvidé cuando regresé.

Existe la posibilidad de que este también sea el caso de otra persona y valga la pena comprobarlo antes de tomar otras medidas drásticas.

Arunmenon
fuente
3

Estaba teniendo el mismo problema, el problema para mí era que adb no estaba en la ruta correcta del entorno, el error te dice que tienes un puerto de metro, mientras estás en el adb, los puertos se eliminan y se reinician.

Añadir variable de entorno (ADB)

  1. Variables de entorno abierto
  2. Seleccione de la variable PATH del segundo cuadro y haga clic en la opción de edición a continuación
  3. Haga clic en agregar opción
  4. Envíe la ruta de herramientas de la plataforma sdk C: \ Users \ My User \ AppData \ Local \ Android \ Sdk \ platform-tools

Nota : O dependiendo de dónde se encuentre adb.exe en su máquina

  1. Guardar cambios

Ejecute Android Build nuevamente

$ react-native run-android

O

$ react-native start

$ react-native run-android
CarlosChavarria
fuente
3

También me he enfrentado a este problema. Resolví este siguiente paso.

Compruebe la ruta de sdk de Android en Environment Veritable.

Agregar ANDROID_HOME = C:\Users\user_name\AppData\Local\Android\Sdken variable de sistema
y C:\Users\user_name\AppData\Local\Android\Sdk\platform-toolsruta en variable de sistema

reemplace sharedBlacklist como el siguiente segmento de código,

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

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

Luego ejecute npx react-native run-android --port 9001

Feliz codificación ..!

Chanaka
fuente
2

Experimenté esto solo porque mi Wifi se apagó por error en mi emulador. Lo volví a encender y comenzó a funcionar bien. Espero que sea útil para alguien

Baba del bosque
fuente
2

La solución que funcionó para mí es la siguiente:

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

Mi ejemplo de código

Jorge Santos Neill
fuente
2

actualizar esta parte en la lista negra de metro

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

Me encontré con el mismo problema al seguir el tutorial React Native (desarrollo en Linux y orientación a Android).

Este problema me ayudó a resolver el problema en los siguientes pasos. Ejecute los siguientes comandos en la siguiente secuencia:

  1. (en el directorio del proyecto) 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

Puede automatizar los pasos anteriores colocándolos en scriptsparte de package.jsonesta manera:

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

Entonces puede ejecutar npm run android-linuxdesde su línea de comando cada vez.

cracknut
fuente
1

Por defecto, un pequeño servidor JavaScript llamado "Metro Server" se ejecuta en el puerto 8081.

Debe hacer que este puerto esté disponible para que este servidor se inicie. Entonces,

  1. liberar el puerto
  2. cierra tu dispositivo virtual
  3. "react-native run-android" nuevamente.

¿Cómo liberar el puerto?

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

¿Cómo matar el proceso que actualmente usa un puerto en localhost en Windows?

y lo más importante, actualicé mi versión de nodo de 8.xa 10.x (más reciente), como lo sugiere facebook @ https://facebook.github.io/react-native/docs/getting-started

Karthik H
fuente
1

Para mí, este problema comenzó con la actualización de react-native. La actualización fue necesaria para agregar soporte de 64 bits.

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

Además, un cambio importante que hice para la actualización fue en ../android/build/build.gradle

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

Tuve que cambiar la targetSdkVersion de 27 a 28 después de la advertencia cuando intenté subir la compilación (.apk) a la consola goole play. Poco me di cuenta de que esta fue la causa raíz del error anterior para mí. Las respuestas inmediatas de @tom y @tinmarfrutos tenían sentido absoluto.

Resolví el problema agregando android: usesCleartextTraffic = "true" a mi android / app / src / debug / AndroidManifest.xml

vivekkan
fuente
1

En mi caso, configuré un proxy en mi emulador. Funciona de nuevo a la normalidad después de eliminar ese proxy.

Benson
fuente
1

la posibilidad de este error también es la ruta incorrecta, verifique una vez

 export ANDROID_HOME=/Users/microrentindia/Library/Android/sdk/
 export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
usuario3143487
fuente
Nunca pensé en esto. Pero esta fue la respuesta para mí.
Siraj Alam el
1

IMPORTANTE: es posible que tenga muchos dispositivos virtuales en su entorno. Asegúrese de que si está cambiando AVD, repita la configuración nuevamente.

INFORMACIÓN DE DEPURACIÓN

En caso de que experimente el error anterior, primero debe verificar qué se está ejecutando en el puerto 8081

La forma más rápida de encontrar eso es usando el siguiente comando en la terminal

netstat -aon | findstr 8081

si eso te muestra algo significa que el puerto está bloqueado. si es posible, desbloquee ese puerto.

De lo contrario, necesitaría cambiar el puerto. El proceso para hacerlo ya ha sido mencionado en el comentario anterior de Naveen Kumar

react-native run-android --port=9001

Asegúrese de que 9001 tampoco se usa :)

TARJU
fuente
1

Pruebe estos pasos si ha probado todo lo mencionado en las soluciones anteriores:

  1. Crear archivo en android / app / src / main / assets
  2. Ejecute el siguiente comando:

paquete react-native --plataforma android --dev falso --intry-file index.js --bundle-output android / app / src / main / assets / index.android.bundle --assets-dest android / app / src / main / res

  1. Ahora ejecuta tu comando para compilar, por ejemplo, react-native run-android
Prayag
fuente
Wow, esto me ayudó en parte. Estaba preparando mi aplicación para Google Play Market, todo lo que hice fue agregar nuevos iconos de activos para Android y cambiar la versión de destino a 28. Tuve que volver a cambiar a la versión v27 y todo comenzó a funcionar nuevamente ... No sé por qué reaccionar no funciona con SDK v28.
Michail Pidgorodetskiy
0

Intenta lo siguiente.

  1. Eliminar carpetas de Android e IOS
  2. ejecutar la expulsión nativa de reacción
  3. ejecutar react-native run-android

Tal vez después de los pasos anteriores tienes ejecuciones npm start - --reset-cache

Yo trabajo, espero que te ayude.

LuisO
fuente
0

Si está ejecutando en el sistema operativo Linux, puede haber un caso en el que su servidor remoto npm no se esté ejecutando. Abra otra terminal (con el directorio del proyecto) y ejecute este comando sudo npm start o sudo react-native start antes de hacer sudo react-native run-android

vicky keshri
fuente
0

El mensaje de error en el emulador es un poco engañoso. En mi caso, usé un Macbook. Necesitaba cambiar los permisos en Android / Gradlew ejecutando $ chmod 755 ./gradlew, y luego la aplicación podría construirse e implementarse en el emulador de Android.

Jane
fuente