error "No se pudo obtener BatchedBridge, asegúrese de que su paquete esté empaquetado correctamente" al inicio de la aplicación

167

Intentando crear un proyecto react-native en Android 4.4.2 me sale esta pantalla de error

dicho error

y no pude encontrar ninguna manera de resolverlo. Intenté reiniciar el empaquetador, volver a conectar el dispositivo, incluso reinstalar react native y comenzar un nuevo proyecto. En 6.0.0 y versiones posteriores funciona bien.

Zygro
fuente
1
¿Recibió este error después de ejecutar react-native run-android? Recibo el error en este caso, lo cual es extraño porque en modo de depuración no debería haber necesidad del paquete JS afaik ya que se supone que se está conectando al servidor de paquetes.
Ryan H.
Publiqué una respuesta al mismo problema aquí: stackoverflow.com/a/45110063/706798
Anton
Recibo este mismo mensaje de error, pero para iOS. Alguien tiene consejos? Intenté ejecutar 'react-native run-ios', pero no funciona, porque XCode está en una unidad externa para mí.
ryanwebjackson

Respuestas:

145

Una posible solución para esto es que probablemente no empaque su aplicación primero, realice los siguientes pasos y luego implemente su app-debug.apk en su dispositivo

$ cd myproject  
$ react-native start > /dev/null 2>&1 &  
$ curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

(si la carpeta assetsno existe, créela)

Luego ejecutar desde la raíz del proyecto

$> (cd android/ && ./gradlew assembleDebug)

instale el apk creado en su dispositivo, desde la ubicación: android/app/build/outputs/apk/app-debug.apk

avíseme si eso soluciona su problema

EDITAR :

Simplemente puede ponerlo en su package.json como un script para automatizarlo, creo que se solucionará en las próximas versiones de react-native y se ejecutará antes de ensamblar el APK final, por lo tanto, esto no será necesario (espero también)

poner :

"scripts": {
    "build": "(cd android/ && ./gradlew assembleDebug)",
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "bundle-android": "react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --sourcemap-output android/app/src/main/assets/index.android.map --assets-dest android/app/src/main/res/"
  },

o como se mencionó el rizo equivalente, pero para la mayoría de los casos lo anterior es más robusto

tbo
fuente
44
¡¡¡Si, funciona!!! ¿Qué acabo de hacer? ¿Por qué rizo? Además, ¿se puede automatizar?
Zygro
Muchas gracias, porque mi aplicación no vincula el paquete nativo React.
GeekHades
3
Esto parece un truco. Si está empaquetando JavaScript en un solo archivo, ¿no obtendrá la capacidad de recarga en vivo mientras ejecuta la aplicación durante el desarrollo?
Liron Yahdav
2
esto no es para desarrollo sino para empaquetado APK real
tbo
no pasa nada conmigo todavía obteniendo error: - com.facebook.react.devsupport.JSException: No se pudo obtener BatchedBridge, asegúrese de que su paquete esté empaquetado correctamente
Dinesh R Rajput
110

Me encontré con este problema también. Lo que hice fue forzar a matar la aplicación en mi dispositivo, luego abrí otra consola y corrí

react-native start

y luego abrí la aplicación nuevamente desde mi dispositivo y comenzó a funcionar nuevamente.

EDITAR: si está utilizando un dispositivo Android a través de USB y lo ha desenchufado o su computadora se ha dormido, es posible que primero deba ejecutar

adb reverse tcp:8081 tcp:8081
Felipe
fuente
55
Esto resolvió mi problema al usar react-native run-android. El uso react-native startnunca fue necesario para mí cuando estaba haciendoreact-native run-ios
Dylan Pierce
2
Esto funcionó, pero ¿por qué está sucediendo esto? ¿Esto se va a arreglar? ¿Tengo que abrir siempre 2 terminales y hacer el 'inicio' antes de poder ejecutarlo en un dispositivo?
Marko
¡Funciona para mí también! horas pasadas para encontrar una solución
dtjmsy
adb reverse tcp:8081 tcp:8081fue suficiente en sí mismo para mí. ¡Muchas gracias!
Darius
Esto es increíble después de eso, puedes hacer ./adb install
Faris Rayhan
27

Acabo de recibir este error. Esto es lo que hice para solucionarlo: seleccioné Dismiss, entré en el menú Desarrollador, luego Dev Settings, Elija Debug server host & port for device, agregué la dirección IP de mi computadora y el puerto:, 192.168.0.xx:8xxxuse la dirección IP asignada a las máquinas de su desarrollador en su red wifi. El puerto es generalmente:8081

Una vez que hice esto, todo salió bien. Además, mientras esté en el menú de desarrollo, recuerde seleccionar Enable Live Reloady Debug JS Remotely, hace que su vida sea mucho más fácil durante la depuración.

cubo
fuente
¡Trabajos! Para el usuario de ubuntu: ejecute ifconfig, luego busque inet addr: xxx.xxx.xxx.xxx donde xxx * es la ip de su máquina de desarrollador
henggana
Esto funcionó para mí en un nivel de API 19 / Kitkat 4.4, consulte stackoverflow.com/questions/31525431/… , facebook.github.io/react-native/docs/…
Michael Ribbons
¡Gracias! Solo tengo que hacer esta configuración cuando depuro sin cable USB (con herramientas como WiFi ADB).
Fidan Hakaj
44
Es importante tener en cuenta que puede hacer que el menú de desarrollador que @cube hace referencia arriba sacudiendo físicamente su dispositivo Android. Eso puede parecer extraño, pero eso es lo que lo hará aparecer. Luego siga el resto de las instrucciones. Esto me lo arregló.
Flyingace
22

Esto es lo que funcionó para mí (después de probar cualquier otra solución que encontré ...):

Corre adb reverse tcp:8081 tcp:8081adentro\Android\sdk\platform-tools

Chaim Salzer
fuente
1
puede ejecutar este comando en cualquier lugar, no tiene que b en herramientas de plataforma
goldylucks
1
Descubrí que react-native run-androidintenta ejecutar ese comando y depende de la variable de entorno de Windows pathpara contener la platform-toolsruta.
straya
1
Gracias, esto funcionó. PATH es C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools
chazefate
no, no funciona en Windows 10 y emulador de Android
píxel
16

Obtuve esto también cuando comencé por primera vez con React Native, usando un dispositivo físico. Si ese es el caso, debe hacer algunas cosas adicionales antes de comenzar. Debe ingresar información sobre su máquina de desarrollo en la 'Configuración de desarrollo' de React Native.

Cuando vea el error, agite su dispositivo . Aparecerá un cuadro de diálogo, la última opción será 'Configuración de desarrollo'. Seleccione 'Debug server hot & port for device' e ingrese su IP local y el puerto utilizado (generalmente 8081).

Vea el último párrafo de https://facebook.github.io/react-native/docs/running-on-device-android.html

Richh94
fuente
Esto es literalmente una repetición, literal de lo que dije anteriormente (en agosto)
cubo
3
No sabía que necesitaba sacudir el dispositivo. Primero, lo publicaría como un comentario, pero no tengo suficientes puntos para hacerlo. Voté tu publicación.
Richh94
La solución más simple y limpia. ¡Gracias!
callOfCode
7

Si ninguna de las soluciones funciona para usted, intente esto:

Descubrí que mi <root>/android/app/build/intermediates/assets/debugcarpeta estaba vacía y al ejecutarla cd android && ./gradlew assembleDebugno estaba creando esos archivos necesarios, que luego son utilizados por el hilo de JavaScript en nuestras aplicaciones nativas de reacción.

Ejecuté manualmente el siguiente comando que el comando debug build debería haber creado idealmente.

node node_modules/react-native/local-cli/cli.js bundle --platform android --dev true --reset-cache --entry-file index.android.js --bundle-output /<path to dir>/android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest /<path to dir>/android/app/build/intermediates/res/merged/debug

Después de ejecutar estos comandos, encontré dos archivos de paquete en este directorio <root>/android/app/build/intermediates/assets/debug

Y luego, cuando ejecuté nuevamente, cd android && ./gradlew installDebugmi aplicación comenzó a funcionar nuevamente.

Se depurará más y actualizará lo que realmente falla.

Sumit Kushwaha
fuente
Solo para aclarar lo que está sucediendo, parece que al integrar una reacción nativa en un proyecto existente, la ruta de salida del paquete NO se establece automáticamente, por lo que debe configurarla usted mismo. ¿De ahí la ruta de salida del paquete = / ruta / a / activos?
robsstackoverflow
Eres el mejor por cierto.
robsstackoverflow
7

En un terminal separado , conecte su dispositivo a la computadora y ejecute los siguientes comandos:

react-native start 
cd user/Library/Android/sdk/platform-tools/
./adb reverse tcp:8081 tcp:8081

Terminal de aplicación :

react-native run-android 
install apk on your device from this location android/app/build/outputs/apk/app-debug.apk
Brijmohan Karadia
fuente
1
¿Quizás podría ampliar su respuesta para incluir un poco más de detalle sobre el significado de los pasos individuales en su respuesta, desde qué directorios deben ejecutarse los comandos, etc.? Creo que su respuesta sería mucho más útil.
Niels
Esta es la respuesta correcta. Esto le permite iterar rápidamente conectándose al servidor nativo de reacción en lugar de tener que volver a empaquetar el paquete con cada cambio.
Joshua Pinter
6

Es demasiado tarde, pero esto realmente funciona para mí.

  1. react-native run-android.
  2. react-native start.

El primer comando se compilará apkpara Android y se implementará en su dispositivo si está conectado. Cuando abra la aplicación, se mostrará una pantalla roja con error. Luego, ejecute el segundo comando que ejecutará el paquete y creará el paquete de la aplicación por usted.

Shamsher
fuente
5

Pruebe este comando en la terminal y luego vuelva a cargar. Funciono para mi

adb reverse tcp: 8081 tcp: 8081

Praneeth
fuente
5

ver tema :

1.react-native start

2.Haga clic Reload(R,R)en su dispositivo.

XYz Amos
fuente
5
  1. reiniciar el genymotion
  2. correr react-native run-android
  3. El problema fue resuelto
Yang
fuente
¿De verdad? restart the genymotion? Ty vole.
Michal
Es como decir "¿su sitio web no funciona? Intente reiniciar su servidor".
Michal
4

Estaba teniendo la misma excepción en el dispositivo Z3 Compact D5803 - 6.0.1

Abrí el archivo .buckconfig y cambié la línea:

target = Google Inc.:Google APIs:23

a

target = Google Inc.:Google APIs:24

Porque vi en SDK Manager que Android 6.X tiene un nivel de API 24.

laszl0
fuente
3

Para mí, es porque adbno estaba en el PATH. Está ubicado /Users/man/Library/Android/sdk/platform-toolspara mí, puede ser otro lugar para ti, pero de todos modos, encuéntralo y agrégalo a tu camino para ver si eso ayuda.

h - n
fuente
3

Como está usando Android <5.0, no puede usar el adb reversemétodo predeterminado , pero Facebook ha agregado documentación oficial para conectarse al servidor de desarrollo a través de Wi-Fi , que admitiría su versión. Citando las instrucciones para MacOS, pero también las tienen para Linux y Windows:

Método 2: conectarse a través de Wi-Fi

También puede conectarse al servidor de desarrollo a través de Wi-Fi. Primero deberá instalar la aplicación en su dispositivo con un cable USB, pero una vez que haya hecho esto, puede depurar de forma inalámbrica siguiendo estas instrucciones. Necesitará la dirección IP actual de su máquina de desarrollo antes de continuar.

Puede encontrar la dirección IP en Preferencias del sistema → Red.

Asegúrese de que su computadora portátil y su teléfono estén en la misma red Wi-Fi. Abra su aplicación React Native en su dispositivo. Verás una pantalla roja con un error. Esto esta bien. Los siguientes pasos lo arreglarán. Abra el menú del desarrollador en la aplicación. Vaya a Configuración de desarrollador → Host del servidor de depuración para el dispositivo. Escriba la dirección IP de su máquina y el puerto del servidor de desarrollo local (por ejemplo, 10.0.1.1:8081). Vuelva al menú Desarrollador y seleccione Volver a cargar JS.

Jesús Carrera
fuente
3

Tenía este problema "al azar" y me llevó algún tiempo darme cuenta de lo que estaba mal en mi escenario.

Después de actualizar a React-native-cli 2.0.1, había un mensaje de salida en el registro que me ayudó a cavar y encontrar la causa raíz:

Servidor JS no reconocido, continuando con la compilación ...

Después de investigar algunos enlaces encontré este:

No se puede reconocer el servidor JS

Como estoy en Windows, ejecuté netstat y descubrí que mi reproductor VLC también se estaba ejecutando en el puerto 8081 causando el problema. Entonces, en mi caso, si iniciara el servidor vlc antes del servidor react-native no funcionaría.

Este mismo mensaje de registro no se emitió en versiones anteriores de react-native-cli, por lo que falla en silencio.

TL, DR: verifique si hay algo ejecutándose en el mismo puerto que el administrador de paquetes (8081 por defecto)

Luiz Henrique Martins Lins Rol
fuente
2

Mi problema fue que revisé mi AndroidManifest.xmlarchivo y eliminé la línea

<uses-permission android:name="android.permission.INTERNET" />

porque mi aplicación no necesitará internet. Sin embargo, la aplicación de depuración nativa Reaction necesita acceso a Internet (para acceder al empaquetador) Whoops. :)

SpencerL
fuente
1
Hombre, me salvaste el día. Me estaba arrancando el pelo :)
Christophe Cadilhac
2

Intenta limpiar el caché

inicio react-native --reset-cache

Hitesh Sahu
fuente
2

Compruebe si tiene el siguiente error cuando ejecuta react-native run-android: adb server version (XX) doesn't match this client (XX); killing...

En ese caso asegúrate /usr/local/opt/android-sdk/platform-tools/adby /usr/local/bin/adbapunta a lo mismoadb

En mi caso, uno apuntó a /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK), pero otro apuntó a /usr/local/Caskroom/android-platform-tools/26.0.2/platform-tools/adb(Homebrew)

Y el problema se ha solucionado después de que ambos señalaran /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK)

Serhey Dolgushev
fuente
1

También recibí este error, realmente confundido. Porque todas las respuestas no funcionan. Justo después de agregar adb a la ruta.

Bruce Lee
fuente
1

Para mí, tenía la sincronización lateral habilitada y activa. Cerrarlo inmediatamente hizo que el problema desapareciera. Puede valer la pena cerrar esta o cualquier otra comunicación entre la PC y el dispositivo

lee_dabiker
fuente
1

Terminé teniendo que abrir el puerto que estaba usando (8081 por defecto). En Linux, puede hacer lo siguiente

sudo iptables -A INPUT -p tcp --dport 8081 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 8081 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Puede probar para ver si realmente necesita hacer esto. Simplemente navegue a su servidor de desarrollo en Chrome en su dispositivo Android. Si no responde, entonces esto podría ser lo que necesita. Si responde, esto no te ayudará.

Anthony Naddeo
fuente
1

Mi camino es:

react-native start

Después de eso en su dispositivo usando:

click to Reload.

Consulte en la consola react-native, obtendrá datos del paquete js.

ThienSuBS
fuente
Este era mi problema, porque la terminal no estaba comenzando. Gracias !
Nicolas Leucci
1

Yo tuve el mismo problema. Cuando creé un proyecto nativo de reacción a través de AwesomeProject create-react-native-app , funcionó bien en la aplicación Expo en el teléfono. Después de eso, quería usar ese proyecto de inicio rápido para desarrollar mi proyecto y obtuve el mismo error que usted.

Después de investigar un poco, descubrí que es mejor comenzar un nuevo proyecto con react-native init AwesomeProject (con todos los ajustes en react native docs) Luego ejecute este comando:

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

Eso debería solucionar el problema con el paquete (--dev false no muestra advertencias)

Todo lo que necesita hacer para que la aplicación se ejecute en su dispositivo virtual / real es:

react-native run-android

Y debería estar funcionando bien. Al menos funcionó para mí.

Sebastian Voráč
fuente
1

Para mí, el problema era que no se reconocía 'adb': compruebe esta respuesta.

Para solucionar esto, agregue C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools a las variables de entorno

hombre agradable
fuente
Esto no es más que un comentario. Pero si pega la última línea de su respuesta vinculada aquí, esta se convierte en una respuesta válida. De lo contrario, hay posibilidades de que esta respuesta se elimine.
Amit Joshi
1

La mayoría de nosotros enfrentamos este problema por primera vez, cuando comenzamos a reaccionar con el proyecto nativo # 1.

Pocos pasos simples resolvieron mi problema:

Creé un proyecto de muestra usando el comando:

react-native init ReactProject1

Solución

La solución es ayudar local-cli\runAndroid\adb.jsa encontrar adb.exe, de la misma manera quelocal-cli\runAndroid\runAndroid.js :

encuentra la declaración de reemplazo bajo el nombre del proyecto (lo que hayas dado)\node_modules\react-native\local-cli\runAndroid

Reemplazar:

const devicesResult = child_process.execSync('adb devices');

Por:

const devicesResult = child_process.execSync( (process.env.ANDROID_HOME ? process.env.ANDROID_HOME + '/platform-tools/' : '') + 'adb devices');

después de hacer el reemplazo anterior, simplemente ejecute react-native run-android en su cmd, empaquetará apk y al principio intentará instalar js bundle localmente en su dispositivo. (Tiene éxito)

DeepakPanwar
fuente
0

Probé muchas de las sugerencias arriba / abajo, pero finalmente, el problema que enfrenté fue un permiso con watchman, que se instaló usando homebrew anteriormente. Si mira los mensajes de su terminal mientras intenta usar el emulador y encuentra errores de 'Permiso denegado' con respecto al vigilante junto con este mensaje 'No se pudo obtener BatchedBridge "en su emulador, haga lo siguiente:

Vaya a su /Users/<username>/Library/LaunchAgentsdirectorio y cambie la configuración de permisos para que su usuario pueda leer y escribir. Esto es independientemente de si realmente tiene o no un com.github.facebook.watchman.plistarchivo allí.

alexfigtree
fuente
0

Descubrí que también necesitaba agregar un

actualización nativa de reacción

para que la aplicación se ejecute correctamente.

M. Solle
fuente
0

Tengo el mismo problema pero fue un error estúpido de mi parte ...

Desde el estudio de Android , estaba lanzando el installDebug/installReleasescript gradle desde appprojet en lugar de rootprojet.

Martin Choraine
fuente
0

¡La manera más fácil!

  • Detenga el servidor y finalice la compilación del proyecto.
  • Abra una terminal 'Node.js'.
    • Navegue a la carpeta con el proyecto 'react-native'.
    • Escriba 'react-native start': inicio del servidor nativo reactivo manualmente.
  • Vaya a su Terminal de editor de código y escriba 'react-native run-android.

¡Eres bueno para ir!

Jason
fuente
0

Simplemente reinicie su sistema o su paquete completo y el problema puede solucionarse.

Vinayak Gupta
fuente