reactjsr Android nativo no pudo cargar el paquete JS

Estoy tratando de ejecutar AwesomeProject en mi Nexus5 (Android 5.1.1).

Puedo construir el proyecto e instalarlo en el dispositivo. Pero cuando lo ejecuto, tengo una pantalla roja que dice

No se puede descargar el paquete JS. ¿Olvidaste iniciar el servidor de desarrollo o conectar tu dispositivo?

En iOS nativo, puedo elegir cargar jsbundle sin conexión. ¿Cómo puedo hacer lo mismo para Android? (O al menos, ¿dónde puedo configurar la dirección del servidor?)

Actualizar

Para ejecutar con un servidor local, ejecute los siguientes comandos bajo el directorio raíz de su proyecto react-native

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

por favor, eche un vistazo a la respuesta de dsissitka para más detalles.

Para ejecutar sin un servidor, agrupe el jsfile en la aplicación ejecutando:

  1. crea una carpeta de activos en android/app/src/main
  2. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

Por favor, eche un vistazo a la respuesta de kzzzf para más detalles.

Para agrupar el archivo JS en su apk mientras tiene su servidor en ejecución ( react-native start ), descargue el paquete en el directorio de activos de su aplicación:

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

Con el próximo lanzamiento (0.12), arreglaremos el comando del react-native bundle para trabajar con proyectos de Android como se espera.

Lo siguiente me hizo funcionar en Ubuntu 14.04:

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

Actualización : Ver

  • Running On Device (Android)
  • Advertencia de dispositivo suprimida?

Actualización 2 : @scgough Obtuvimos este error porque React Native (RN) no pudo obtener JavaScript del servidor de desarrollo que se ejecuta en nuestras estaciones de trabajo. Puedes ver por qué sucede esto aquí:

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

Si su aplicación RN detecta que está usando Genymotion o el emulador, intenta obtener el JavaScript de GENYMOTION_LOCALHOST (10.0.3.2) o EMULATOR_LOCALHOST (10.0.2.2). De lo contrario, supone que está utilizando un dispositivo e intenta obtener el JavaScript de DEVICE_LOCALHOST (localhost). El problema es que el servidor de desarrollo se ejecuta en el host local de su estación de trabajo, no en el del dispositivo, por lo que para que funcione, necesita:

  • Reenviar tráfico desde (servidor local del dispositivo): 8081 / tcp a (servidor local de la estación de trabajo): 8081 / tcp. Eso es lo que hace ese comando adb.
  • Dígale a su aplicación RN dónde puede encontrar su servidor de desarrollo.

Ok, creo que he averiguado cuál es el problema aquí. Tenía que ver con la versión del watchman que estaba ejecutando.

En un nuevo caparazón, ejecute la brew update luego: brew unlink watchman luego: brew install watchman

ahora, puedes ejecutar el react-native start desde tu carpeta de proyectos

Dejo este shell abierto, creo una nueva ventana de shell y ejecuto: react-native run-android desde la carpeta de mi proyecto. Todo esta bien con el mundo.

PD. Originalmente estaba en la versión 3.2 del vigilante. Esto me actualizó a 3.7.

pps. Soy nuevo en esto, así que puede que no sea la ruta más rápida hacia la solución, pero me ha funcionado.

* MÁS INFORMACIÓN PARA EJECUTAR / DEBUGAR EN UN DISPOSITIVO *

Es posible que descubra que si implementa su aplicación en su dispositivo Android en lugar de en un emulador, obtiene una pantalla roja de la muerte con un error que dice ” Unable to load JS Bundle . Debe configurar el servidor de depuración de su dispositivo para que funcione como su computadora reactjsr … ya sea su nombre O su dirección IP.

  1. Presione el botón Menu del dispositivo
  2. Seleccione la Dev Settings
  3. Seleccione el Debug server host for device
  4. Escriba el IP de su máquina y vuelva a cargar JS más el puerto de reacción, por ejemplo, 192.168.1.10:8081

Más información: http://facebook.github.io/react-native/docs/running-on-device-android.html

Desde su directorio de proyecto, ejecute

 react-native start 

Emite lo siguiente:

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

Una solución fácil que funciona para mí con Ubuntu 14.04.

 react-native run-android 

El emulador (ya lanzado) devolverá: no se puede descargar JS Bundle; comenzar de nuevo el servidor JS:

 react-native start 

Hit Recargar JS en el emulador. Funcionó para mí Espero que ayude

En la aplicación en Android, abrí el Menú (Comando + M en Genymotion) -> Configuración Dev -> Depurar servidor host y puerto para el dispositivo

establecer el valor a: localhost: 8081

Funcionó para mí

Después de probar una combinación de las respuestas aquí, esto es lo que funciona para mí.

Estoy usando Genymotion como mi emulador.

1 Inicie el emulador Genymotion.

2 Desde una terminal

 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 Recargar desde el emulador.

¡Carga!

Ahora puedo comenzar a desarrollar.

¡Elimina la aplicación de tu teléfono! Intenté varios pasos, pero finalmente lo hice.

  1. Si intentó ejecutar su aplicación antes pero falló, elimínela de su dispositivo Android.
  2. Ejecute $ react-native run-android
  3. Abra el menú Agitar reacción de rabia desde su aplicación en su dispositivo Android, vaya a Dev Settings y luego a Debug server host & port for device . Allí ingrese su IP de servidor (IP de su computadora) y el host 8081 , por ejemplo, 192.168.50.35:8081 . En una Mac, puede encontrar la dirección IP de su computadora en System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address .
  4. Abra de nuevo el menú Agitar rabia y haga clic en Reload JS .

No tengo suficiente reputación para comentar, pero esto se refiere a la respuesta de dsissitka. Funciona en Windows 10 también.

Para reiterar, los comandos son:

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

Aparentemente adb reverse se introdujo en Android 5.0
Obteniendo “error: cerrado” dos veces en “adb reverse”

Creo que tenemos que seguir adelante con la respuesta de Kzzzf

Estaba obteniendo esto en Linux después de detener el proceso react-native run-android . Parece que el servidor de nodo todavía se está ejecutando, por lo que la próxima vez que lo ejecute, no se ejecutará correctamente y su aplicación no podrá conectarse.

La solución aquí es matar el proceso del nodo que se ejecuta en un Xterm que puedes matar al ctrl-c esa ventana (más fácil) o puedes encontrarlo usando lsof -n -i4TCP:8081 luego kill -9 PID .

Luego ejecute react-native run-android nuevo.

Comprueba tu conexión wifi.

Otra posibilidad podría ser que no está conectado a wifi, conectado a la red incorrecta, o que la dirección IP es incorrecta en su configuración de desarrollo. Por alguna razón, mi android se desconectó del wifi y comencé a obtener este error, sin saberlo.

Corriendo en el dispositivo

He encontrado otra respuesta.

  • adb reverse: solo funciona en Android 5.0+ (API 21).
  • Otro: abra el menú Desarrollador agitando el dispositivo, vaya a Configuración de desarrollo , vaya a Servidor de depuración host para el dispositivo , escriba la dirección IP de su máquina y el puerto del servidor local de desarrollo

Una actualización

Ahora en Windows no es necesario ejecutar el inicio de reac-native. El empaquetador se ejecutará automáticamente.

Una cosa importante para comprobar que nadie ha mencionado hasta ahora: verifique su firewall local, asegúrese de que esté desactivado .

Vea mi respuesta aquí: https://stackoverflow.com/a/41400708/1459275

Estos son los pasos simples para ejecutar su aplicación en android (versión):

1. Vaya a la raíz de su aplicación.

2. Ejecute este comando.

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

Todos sus archivos son copiados.

3. Crea APK firmado.

Abra el estudio de Android.

Generar> Generar sesión firmada> [Completar los detalles requeridos, la pulsación de tecla debe generarse antes de este paso]

Su APK debe generarse sin ningún error. Instale en su dispositivo y esto debería funcionar sin problemas.

También puede conectar su dispositivo y presionar directamente el icono Ejecutar en Android Studio para realizar pruebas.


Generando golpe de teclado:

  1. Ir a C: \ Archivos de progtwig \ Java \ jdkx.x.x_x \ bin

  2. correr

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

Probablemente le pida que complete algunos detalles. Hazlo y tendrás tu archivo de pulsación de teclas ( my_private_key.keystore ) que puede usarse para firmar tu apk.

Solo uso Ubuntu y Android, y no pude ejecutarlo. Encontré una solución realmente simple que es actualizar su archivo package.json, cambiando estas líneas:

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

a

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

Y luego ejecuta el servidor tecleando

 npm run start 

Esto garantiza que el dispositivo Android busque el servidor de nodo en su computadora en lugar de localmente en el teléfono.

Ejecutar npm start desde el directorio de react-native funcionó para mí.

La pregunta inicial fue sobre volver a cargar la aplicación en un dispositivo fítico.

Cuando depure la aplicación en un dispositivo físico (es decir, a través de adb), puede volver a cargar el paquete JS haciendo clic en el botón de “acción” superior izquierdo de su dispositivo. Esto abrirá el menú de opciones (Recargar, Depurar JS de forma remota …).

Espero que esto ayude.

Este error se puede resolver fácilmente siguiendo los pasos:

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

Puede seguir las instrucciones mencionadas en la página oficial para solucionar este problema. Este problema ocurre en el dispositivo real porque el paquete JS se encuentra en su sistema de desarrollo y la aplicación dentro de su dispositivo real no está al tanto de su ubicación.