Android no pudo cargar el paquete JS
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
react-native start > /dev/null 2>&1 &
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:
- cree una carpeta de activos en
android/app/src/main
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.
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 bundle
el comando para que funcione con proyectos de Android como se esperaba.
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.
Ok, creo que he descubierto cuál es el problema aquí. Tenía que ver con la versión que watchman
estaba ejecutando.
En un nuevo shell, ejecute brew update
luego: brew unlink watchman
luego:brew install watchman
ahora puedes ejecutar react-native start
desde la carpeta de tu proyecto
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 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.
- Presione el
Menu
botón del dispositivo - Seleccionar
Dev Settings
- Seleccione
Debug server host for device
oChange Bundle Location
- Escriba la IP de su máquina y recargue 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 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)