erro "Não foi possível obter o BatchedBridge, verifique se o pacote foi embalado corretamente" no início do aplicativo


167

Tentando criar um projeto react-native no Android 4.4.2, recebo esta tela de erro

dito erro

e não conseguiu encontrar nenhuma maneira de resolvê-lo. Tentei reiniciar o empacotador, reconectar o dispositivo, até reinstalar o reagir nativo e iniciar um novo projeto. No 6.0.0 e versões posteriores, funciona muito bem.


1
Você recebeu este erro após a execução react-native run-android? Estou recebendo o erro nesse caso, o que é estranho, porque no modo de depuração não deve haver necessidade do pacote JS afaik, pois ele deveria estar se conectando ao servidor de pacotes.
21916 Ryan H H.

Eu postei uma resposta para o mesmo problema aqui: stackoverflow.com/a/45110063/706798
Anton

Estou recebendo a mesma mensagem de erro, mas para iOS. Alguém tem conselhos? Tentei executar o 'react-native run-ios', mas não funciona, porque o XCode está em uma unidade externa para mim.
ryanwebjackson

Respostas:


145

Uma solução possível para isso é que você provavelmente não agrupará seu aplicativo primeiro, execute as etapas a seguir e implante seu app-debug.apk no 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"

(se a pasta assetsnão existir, crie-a)

Em seguida, execute a partir da raiz do projeto

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

instale o apk criado para o seu dispositivo, a partir da localização: android/app/build/outputs/apk/app-debug.apk

deixe-me saber se isso resolve o seu problema

EDIT :

Você pode simplesmente colocá-lo no seu package.json como um script para automatizá-lo, acredito que será corrigido nas próximas versões do react-native e será executado antes da montagem do APK final, portanto, isso não será necessário (espero também)

colocar :

"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/"
  },

ou como mencionado o equivalente de ondulação, mas na maioria dos casos o acima é mais robusto


4
Sim funciona !!! O que eu acabei de fazer? por que enrolar? Além disso, isso pode ser automatizado?
Zygro

Muito obrigado, porque meu aplicativo não vincula o pacote nativo do React.
GeekHades

3
Isso parece um hack. Se você estiver compactando o JavaScript em um único arquivo, não obterá o recurso de recarga ao vivo durante a execução do aplicativo durante o desenvolvimento?
Liron Yahdav

2
isto não é para o desenvolvimento, mas para real embalagens APK
tbo

nada acontecer comigo ainda recebendo erro: - com.facebook.react.devsupport.JSException: Não foi possível obter BatchedBridge, verifique se o pacote é embalado corretamente
Dinesh R Rajput

110

Me deparei com esta questão também. O que fiz foi forçar a interrupção do aplicativo no meu dispositivo, abri outro console e executei

react-native start

depois abri o aplicativo novamente no meu dispositivo e ele começou a funcionar novamente.

EDIT: Se você estiver usando um dispositivo Android via USB e o desconectou ou seu computador entrou no modo de suspensão, pode ser necessário executar primeiro

adb reverse tcp:8081 tcp:8081

5
Isso resolveu meu problema ao usar react-native run-android. Usando react-native startnunca mais foi necessário para mim quando eu estava fazendoreact-native run-ios
Dylan Pierce

2
Isso funcionou, mas por que isso está acontecendo? Isso vai ser consertado? Preciso sempre abrir 2 terminais e fazer o 'start' primeiro antes que eu possa executá-lo em um dispositivo?
Marko

Funciona pra mim também ! horas passadas para encontrar uma solução
dtjmsy

adb reverse tcp:8081 tcp:8081foi suficiente por si só para mim. Muito Obrigado!
Darius

Isto é, após incrível que você poderia fazer ./adb instalar
Faris Rayhan

27

Acabei de receber este erro. Aqui está o que eu fiz para corrigir: Eu selecionei Dismiss, Entrei no menu Desenvolvedor e, em seguida Dev Settings, Escolha Debug server host & port for device, adicionei o endereço IP e a porta dos meus computadores: 192.168.0.xx:8xxxuse qualquer que seja o endereço IP atribuído à máquina do desenvolvedor na sua rede wifi. A porta é geralmente:8081

Depois que fiz isso, tudo correu bem. Além disso, enquanto você estiver no menu dev, lembre-se de selecionar Enable Live Reloade Debug JS Remotely, isso facilita muito a sua vida durante a depuração.


Trabalho! Para o usuário ubuntu: executar ifconfig, em seguida, encontrar inet addr: xxx.xxx.xxx.xxx, onde xxx * é a sua máquina do desenvolvedor ip
henggana

Isso funcionou para mim em um nível API 19 / Kitkat 4.4, consulte stackoverflow.com/questions/31525431/… , facebook.github.io/react-native/docs/…
Michael Ribbons

Obrigado! Eu só tenho que fazer essa configuração quando eu depurar sem cabo USB (com ferramentas como WiFi ADB).
Fidan Hakaj 22/10

4
É importante observar que você pode criar o menu Desenvolvedor mencionado pelo @cube acima agitando fisicamente o seu dispositivo Android. Pode parecer estranho, mas é isso que vai trazer à tona. Siga o restante das instruções. Isso consertou para mim.
flyingace 8/16

22

Foi isso que funcionou para mim (depois de tentar todas as outras soluções que encontrei ...)

Corra para adb reverse tcp:8081 tcp:8081dentro\Android\sdk\platform-tools


1
pode executar isso em qualquer lugar de comando, não tem que B em platform-tools
goldylucks

1
Eu descobri que react-native run-androidtenta executar esse comando e depende da variável de ambiente do Windows pathpara conter o platform-toolscaminho.
straya

1
Obrigado, isso funcionou. PATH é C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools
chazefate

não, não funciona no emulador do Windows 10 e Android
pixel

16

Também obtive isso quando comecei pela primeira vez com o React Native, usando um dispositivo físico. Se for esse o caso, você precisará fazer algumas coisas extras antes de começar. Você precisa inserir algumas informações sobre sua máquina de desenvolvimento nas 'Configurações do desenvolvedor' do React Native.

Quando você vir o erro, agite seu dispositivo . Uma caixa de diálogo será exibida, a última opção será 'Configurações do desenvolvedor'. Selecione 'Debug server hot & port for device' e digite seu IP local e a porta usada (geralmente 8081).

Consulte o último parágrafo de https://facebook.github.io/react-native/docs/running-on-device-android.html


Isso é literalmente uma repetição, literalmente, do que eu disse acima (em agosto)
cube

3
Eu não sabia que precisava agitar o dispositivo. Primeiro, eu o publicaria como um comentário, mas não tenho pontos suficientes para fazer isso. Eu votei em sua postagem.
Richh94

Solução mais simples e limpa. Obrigado!
callOfCode

7

Se nenhuma solução funcionar para você, tente o seguinte:

Descobri que minha <root>/android/app/build/intermediates/assets/debugpasta estava vazia e, ao executar, cd android && ./gradlew assembleDebugnão estava criando os arquivos necessários, que são mais tarde usados ​​pelo encadeamento javascript em nossos aplicativos nativos de reação.

Executei manualmente o seguinte comando que o comando debug build deveria ter criado 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

Depois de executar esses comandos, encontrei dois arquivos de pacote neste diretório <root>/android/app/build/intermediates/assets/debug

E então eu corri novamente cd android && ./gradlew installDebugmeu aplicativo começou a funcionar novamente.

Depurará mais e atualizará o que está realmente falhando.


Apenas para esclarecer o que está acontecendo, parece que, ao integrar um reagente nativo a um projeto existente, o caminho de saída do pacote NÃO é definido automaticamente, portanto, você deve configurá-lo você mesmo. Portanto, o caminho de saída do pacote configurável = / path / to / assets?
Robsstackoverflow

Você é o melhor btw.
Robsstackoverflow

7

Em um terminal separado , conecte seu dispositivo ao computador e execute os seguintes comandos:

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

Terminal de aplicação :

react-native run-android 
install apk on your device from this location android/app/build/outputs/apk/app-debug.apk

1
Talvez você possa expandir sua resposta para incluir um pouco mais de detalhes sobre o significado das etapas individuais em sua resposta, em quais diretórios os comandos devem ser executados etc. Eu acho que isso tornaria sua resposta muito mais útil.
Niels

Esta é a resposta adequada. Isso permite que você itere rapidamente, conectando-se ao servidor nativo de reação, em vez de ter que reembalar o pacote configurável a cada alteração.
Joshua Pinter

6

É um pouco tarde demais, mas isso realmente funciona para mim.

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

O primeiro comando será construído apkpara o Android e implantado no seu dispositivo, se estiver conectado. Quando você abre o aplicativo, ele mostra a tela vermelha com erro. Em seguida, execute o segundo comando que executará o empacotador e criará o pacote de aplicativos para você.


5

Tente este comando no terminal e depois recarregue. Funcionou para mim

tcp reverso adb: 8081 tcp: 8081



5
  1. reinicie o genymotion
  2. corre react-native run-android
  3. o problema foi resolvido

Sério? restart the genymotion? Ty rat.
Michal

É como dizer "ah, seu site não funciona? Tente reiniciar o servidor".
Michal

4

Eu estava tendo a mesma exceção no dispositivo Z3 Compact D5803 - 6.0.1

Fui aberto o arquivo .buckconfig e alterei a linha:

target = Google Inc.:Google APIs:23

para

target = Google Inc.:Google APIs:24

Porque eu vi no SDK Manager que o Android 6.X tem um nível 24 de API.


3

Para mim, é porque adbnão estava no PATH. Ele está localizado /Users/man/Library/Android/sdk/platform-toolspara mim, pode estar em outro lugar para você, mas, mesmo assim, encontre-o e adicione-o ao seu caminho para ver se isso ajuda.


3

Como você está usando o Android <5.0, não é possível usar o adb reversemétodo padrão , mas o Facebook adicionou documentação oficial para conectar-se ao servidor de desenvolvimento via Wi-Fi , que suportaria sua versão. Citando as instruções para o MacOS, mas elas também as têm para Linux e Windows:

Método 2: conectar via Wi-Fi

Você também pode se conectar ao servidor de desenvolvimento por Wi-Fi. Primeiro, você precisará instalar o aplicativo no seu dispositivo usando um cabo USB, mas depois disso, você poderá depurar sem fio seguindo estas instruções. Você precisará do endereço IP atual da sua máquina de desenvolvimento antes de continuar.

Você pode encontrar o endereço IP em Preferências do Sistema → Rede.

Verifique se o laptop e o telefone estão na mesma rede Wi-Fi. Abra o aplicativo React Native no seu dispositivo. Você verá uma tela vermelha com um erro. Isto está bem. Os seguintes passos irão corrigir isso. Abra o menu Desenvolvedor no aplicativo. Vá para Configurações do desenvolvedor → Depurar host do servidor para o dispositivo. Digite o endereço IP da sua máquina e a porta do servidor dev local (por exemplo, 10.0.1.1:8081). Volte ao menu Desenvolvedor e selecione Recarregar JS.


3

Ele teve esse problema "aleatoriamente" e levou algum tempo para perceber o que havia de errado no meu cenário.

Após a atualização para o React-native-cli 2.0.1, houve uma mensagem no log que me ajudou a pesquisar e encontrar a causa raiz:

Servidor JS não reconhecido, continuando com a compilação ...

Depois de pesquisar alguns links, encontrei este:

Não foi possível reconhecer o servidor JS

Como estou no Windows, executei o netstat e descobri que meu VLC player também estava sendo executado na porta 8081, causando o problema. Portanto, no meu caso, se eu iniciasse o servidor vlc antes do servidor react-native, não funcionaria.

Essa mesma mensagem de log não foi emitida nas versões anteriores do react-native-cli, causando falha silenciosa.

TL, DR: verifique se há algo em execução na mesma porta que o gerenciador de pacotes (8081 por padrão)


2

Meu problema foi que examinei meu AndroidManifest.xmlarquivo e removi a linha

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

porque meu aplicativo não precisará de internet. No entanto, o aplicativo de depuração nativo react precisa de acesso à Internet (para acessar o empacotador) Ops. :)


1
Cara, você salvou meu dia. Estava arrancando meus cabelos:) #
Christophe Cadilhac


2

Verifique se você tem o seguinte erro ao executar react-native run-android: adb server version (XX) doesn't match this client (XX); killing...

Nesse caso, certifique-se /usr/local/opt/android-sdk/platform-tools/adbe /usr/local/bin/adbaponte para o mesmoadb

No meu caso, um foi apontado para /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK), mas outro foi apontado para /usr/local/Caskroom/android-platform-tools/26.0.2/platform-tools/adb(Homebrew)

E o problema foi corrigido depois que os dois apontaram /Users/sd/Library/Android/sdk/platform-tools/adb(Android SDK)


1

Também recebi esse erro, muito confuso. porque todas as respostas não funcionam. Logo após adicionar adb ao caminho.


1

Para mim, eu tinha a sincronização lateral ativada e ativa. Fechá-lo imediatamente fez com que o problema desaparecesse. Pode valer a pena fechar esta ou qualquer outra comunicação entre o PC e o dispositivo


1

Acabei tendo que abrir a porta que estava usando (8081 por padrão). No Linux, você pode fazer o seguinte

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

Você pode testar para ver se realmente precisa fazer isso. Basta navegar para o servidor de desenvolvimento no Chrome no seu dispositivo Android. Se não responder, pode ser o que você precisa. Se ele responder, isso não ajudará.


1

Meu caminho é:

react-native start

Depois disso no seu dispositivo usando:

click to Reload.

Veja no console react-native, que será buscar os dados do pacote js.


Esse foi o meu problema, porque o terminal não estava iniciando. Obrigado !
Nicolas Leucci

1

Eu tive o mesmo problema. Quando eu criei um projeto nativo react através do aplicativo createProject native native AwesomeProject ele funcionou bem no aplicativo Expo no telefone. Depois disso, quis usar esse projeto de início rápido para desenvolver meu projeto e obtive o mesmo erro que você.

Após algumas pesquisas, descubro que é melhor iniciar um novo projeto com o init-react react-native AwesomeProject (com todas as configurações nos documentos nativos do react). Em seguida, execute 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/

Isso deve corrigir o problema com o pacote (--dev false não está mostrando avisos)

Tudo o que você precisa fazer para que o aplicativo seja executado no seu dispositivo virtual / real é:

react-native run-android

E deve estar funcionando muito bem. Pelo menos funcionou pra mim.


1

Para mim, o problema era que 'adb' não era reconhecido - verifique esta resposta.

Para corrigir isso, adicione C: \ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ platform-tools às variáveis ​​de ambiente


Isso não passa de comentário. Mas se você colar a última linha da sua resposta vinculada aqui, isso se tornará uma resposta válida. Caso contrário, há chances de que essa resposta seja removida.
Amit Joshi

1

Muitos de nós enfrentamos esse problema pela primeira vez, quando começamos a reagir ao projeto nativo nº 1.

Poucos passos simples resolveram meu problema:

Criei um projeto de amostra usando o comando:

react-native init ReactProject1

Solução

A correção é ajudar local-cli\runAndroid\adb.jsa encontrar adb.exe, da mesma maneira quelocal-cli\runAndroid\runAndroid.js :

encontre a instrução replace em nome do projeto (o que você deu)\node_modules\react-native\local-cli\runAndroid

Substituir:

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

De:

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

depois de fazer a substituição acima, basta executar o react-native run-android no seu cmd, ele agrupará o apk e, primeiro, tente instalar o pacote js localmente no seu dispositivo. (Obteve sucesso)


0

Tentei muitas das sugestões acima / abaixo, mas, no final das contas, o problema que enfrentei foi de permissões com o watchman, que foi instalado usando o homebrew anteriormente. Se você observar as mensagens do terminal ao tentar usar o emulador e encontrar erros 'Permissão negada' em relação ao watchman, junto com a mensagem 'Não foi possível obter o BatchedBridge "no emulador, faça o seguinte:

Vá para o seu /Users/<username>/Library/LaunchAgentsdiretório e altere as configurações de permissões para que seu usuário possa ler e gravar. Isso independentemente de você realmente ter um com.github.facebook.watchman.plistarquivo ou não.


0

Eu descobri que precisava adicionar também um

atualização nativa de reação

para que o aplicativo seja executado corretamente.


0

Eu tenho o mesmo problema, mas foi um erro estúpido de mim mesmo ...

No Android studio , eu estava lançando o installDebug/installReleasescript gradle do appprojet em vez do rootprojet.


0

Caminho mais fácil!

  • Pare o servidor e finalize a construção do projeto.
  • Abra um terminal 'Node.js'.
    • Navegue para a pasta com o projeto 'react-native'.
    • Digite 'react-native start' --Iniciando o servidor nativo do react manualmente.
  • Vá para o Terminal do editor de código e digite 'react-native run-android.

Você está pronto para ir!


0

Basta reiniciar o sistema ou o pacote completo e o problema pode ser corrigido.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.