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.

Zygro
fonte
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

tbo
fonte
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
Felipe
fonte
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.

cubo
fonte
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

Chaim Salzer
fonte
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

Richh94
fonte
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.

Sumit Kushwaha
fonte
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
Brijmohan Karadia
fonte
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ê.

Shamsher
fonte
5

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

tcp reverso adb: 8081 tcp: 8081

Praneeth
fonte
5

veja o problema :

1.react-native start

2. clique Reload(R,R)no seu dispositivo.

XYz Amos
fonte
5
  1. reinicie o genymotion
  2. corre react-native run-android
  3. o problema foi resolvido
Yang
fonte
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.

laszl0
fonte
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.

h - n
fonte
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.

Jesús Carrera
fonte
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)

Luiz Henrique Martins Lins Rol
fonte
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. :)

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

Tente limpar o cache

react-native start --reset-cache

Hitesh Sahu
fonte
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)

Serhey Dolgushev
fonte
1

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

Bruce Lee
fonte
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

lee_dabiker
fonte
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á.

Anthony Naddeo
fonte
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.

ThienSuBS
fonte
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.

Sebastian Voráč
fonte
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

bom homem
fonte
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)

DeepakPanwar
fonte
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.

alexfigtree
fonte
0

Eu descobri que precisava adicionar também um

atualização nativa de reação

para que o aplicativo seja executado corretamente.

M. Solle
fonte
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.

Martin Choraine
fonte
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!

Jason
fonte
0

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

Vinayak Gupta
fonte