Android no pudo cargar el paquete JS

Resuelto Matthew asked hace 54 años • 26 respuestas

Estoy intentando ejecutar AwesomeProject en mi Nexus5 (Android 5.1.1).

Puedo construir el proyecto e instalarlo en el dispositivo. Pero cuando lo ejecuto, aparece 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 de reacción, 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 el servidor local, ejecute los siguientes comandos en el directorio raíz de su proyecto nativo de reacción

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

Eche un vistazo a la respuesta de dsissitka para obtener más detalles.

Para ejecutar sin un servidor, incluya el archivo js en el apk ejecutando:

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

Eche un vistazo a la respuesta de kzzzf para obtener más detalles.

Matthew avatar Jan 01 '70 08:01 Matthew
Aceptado

Para agrupar el archivo JS en su apk mientras su servidor se ejecuta ( 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 la próxima versión (0.12), arreglaremos react-native bundleel comando para que funcione con proyectos de Android como se esperaba.

kzzzf avatar Sep 17 '2015 01:09 kzzzf

Lo siguiente hizo que funcionara para mí en Ubuntu 14.04:

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

Actualización : Ver

  • Ejecutándose en el dispositivo (Android)
  • ¿Se ha suprimido la advertencia del dispositivo?

Actualización 2 : @scgough Recibimos este error porque React Native (RN) no pudo recuperar 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 recuperar el JavaScript de GENYMOTION_LOCALHOST (10.0.3.2) o EMULATOR_LOCALHOST (10.0.2.2). De lo contrario, supone que estás usando un dispositivo e intenta recuperar 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 debe:

  • Reenvíe el tráfico desde (host local del dispositivo): 8081/tcp a (host 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.
dsissitka avatar Sep 14 '2015 21:09 dsissitka

Ok, creo que he descubierto cuál es el problema aquí. Tenía que ver con la versión que watchmanestaba ejecutando.

En un nuevo shell, ejecute brew update luego: brew unlink watchman luego:brew install watchman

ahora puedes ejecutar react-native startdesde la carpeta de tu proyecto

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

PD. Originalmente estaba en la versión 3.2 de Watchman. Esto me actualizó a 3.7.

PP. Soy nuevo en esto, por lo que puede que no sea el camino más rápido hacia la solución, pero me ha funcionado.

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

Es posible que si implementas tu aplicación en tu dispositivo Android en lugar de en un emulador, aparezca 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 sea su computadora ejecutando React... ya sea su nombre O dirección IP.

  1. Presione el Menubotón del dispositivo
  2. SeleccionarDev Settings
  3. Seleccione Debug server host for deviceoChange Bundle Location
  4. Escriba la IP de su máquina y recargue JS más el puerto de reacción, por ejemplo192.168.1.10:8081

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

scgough avatar Sep 14 '2015 21:09 scgough

Desde el directorio de su proyecto, ejecute

react-native start

Produce 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] <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)
Pēteris Caune avatar Sep 14 '2015 20:09 Pēteris Caune