React-Native, Android, Genymotion: servidor ADB não ACK

168

Estou trabalhando com React-Native, Android e Genymotion no Mac. Quando executo react-native run-android, recebo estas linhas no final da operação de inicialização:

...
04:54:40 E/adb: error: could not install *smartsocket* listener: Address already in use
04:54:40 E/adb: ADB server didn't ACK
04:54:40 E/ddms: '/Users/paulbrie/Library/Android/sdk/platform-tools/adb,start-server' failed -- run manually if necessary
04:54:40 E/adb: * failed to start daemon *
04:54:40 E/adb: error: cannot connect to daemon
:app:installDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:installDebug'.
> com.android.builder.testing.api.DeviceException: Timeout getting device list.
...

No entanto, adb devicesretorna isso:

List of devices attached
192.168.59.101:5555 device

Até agora não encontrei nenhuma solução para executar meu aplicativo no emulador. Alguém encontrou o mesmo problema?

Obrigado Paul

Paulo
fonte
Este erro pode ocorrer independentemente da execução do Genymotion.
IgorGanapolsky

Respostas:

319

Após mais pesquisas, percebi que o Genymotion usa por padrão seu próprio adb.

insira a descrição da imagem aqui

Mudei para o meu adb principal (o mesmo usado pelo react-native) e ele resolveu o problema. Acho que porque o adb do Genymotion foi lançado primeiro, recebi a Address already in usemensagem de erro.

Paulo
fonte
4
Obrigado por postar isso. Eu quase tive um ataque cardíaco, atualizei meus estúdios Android 2.1 para Preview 3 ontem à noite e o genymotion não será mais conectado. Isso me ajudou a resolvê-lo.
19616 Simon
7
Eu tentei esta solução, mas ainda tenho o mesmo erro. Existem soluções alternativas?
calclavia
1
@ user2254679 também verificou esta discussão? stackoverflow.com/questions/5703550/…
Paul
@Paul, por favor, você pode elaborar qual o caminho que está fornecendo? onde está localizado esse adb usado pelo react-native? Estou tentando fornecer o caminho do meu Android SDK, mas ele não está funcionando. em inglês seria melhor.
K Pal
@KPal, o caminho é específico para sua própria configuração. No meu caso, foi o caminho padrão da instalação do Android no Mac naquela época: /Users/$yourName/Library/Android/sdk. Se você instalou o Android, deve procurar seu caminho, dada a versão do Android / sua plataforma.
Paul
45

Estou usando o genymotion, mas a solução de Paul sozinha não corrigiu o erro (para Mac).

Eu precisei:

Atualize o SDK do Android para a versão mais recente (24.4.1) através do gerenciador de SDK

Digite androidna linha de comando

No gerenciador do SDK, encontre as ferramentas e as instalações mais recentes do SDK.

Uma vez instalado, o caminho do SDK deve atualizar o novo local do SDK, como abaixo.

insira a descrição da imagem aqui

Atualize o $ ANDROID_HOME para usar o novo SDK

export ANDROID_HOME=/usr/local/Cellar/android-sdk/24.4.1_1

export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

Confirme se ele foi adicionado visualizando seu caminho com echo $PATH

Em genymotion, faça o que @Paul diz acima e aponte o genymotion ADB para usar o mesmo sdk

insira a descrição da imagem aqui

smj2393
fonte
Funciona para o ubuntu 16.04. Por alguma razão, pensei que o $ANDROID_HOME/toolsdiretório não seria necessário no caminho de classe. Você precisa adicionar para se conectar ao adb.
Orar 28/02
10

Sistema: Windows 10

Meu problema: configurar o Genymotion para apontar para o SDK personalizado não teve nenhum efeito. Eu ainda recebi o:

Não foi possível iniciar o projeto no Android: não foi possível instalar o ouvinte smartsocket: não é possível vincular a 127.0.0.1:5037: Normalmente, apenas um uso de cada endereço de soquete (protocolo / endereço de rede / porta) é permitido. (10048) não pôde ler ok no ADB Server * falha ao iniciar o daemon * erro: não é possível conectar-se ao daemon

O que eu descobri foi que havia uma diferença nas versões do ADB sendo usadas em todo o sistema. Aqui está o comando que eu usei para encontrá-los:

where /r C:\ adb.exe

Isso produziu os resultados:

C:\Program Files\Expo XDE\resources\app\node_modules\xdl\binaries\windows\adb\adb.exe
C:\Program Files\Genymobile\Genymotion\tools\adb.exe
C:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb.exe
C:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb backup\adb.exe

Navegando para cada diretório e executando:

adb.exe version

Permitiu-me ver que a Expo estava executando a versão ADB:

Android Debug Bridge version 1.0.36
Revision fd9e4d07b0f5-android

Enquanto o Genymotion usando o SDK personalizado tinha a versão (c: \ Users \ kyle \ AppData \ Local \ Android \ Sdk \ platform-tools \ adb.exe):

Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android

Como teste, tirei os arquivos adb (adb.exe, AdbWinApi.dll, AdbWinUsbApi.dll) de

c:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb.exe

e os colocou em uma pasta de backup. Em seguida, movi os arquivos adb localizados em

c:\Program Files\Expo XDE\resources\app\node_modules\xdl\binaries\windows\adb\adb.exe

nesse mesmo local. Eu matei adb com:

adb kill-server

o que causou uma reinicialização do servidor adb automaticamente devido a meu dispositivo Genymotion já estar em execução. Apertei o botão "Reiniciar" dentro do Expo XDE e ele imediatamente começou a funcionar. Aqui está o log em que clico no botão reiniciar às 1:13:04:

12:45:53 AM
could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)
could not read ok from ADB Server
* failed to start daemon *
error: cannot connect to daemon
1:13:04 AM
Restarting project and clearing packager cache (Hold shift while clicking restart to avoid clearing cache).
1:13:11 AM
Starting React Native packager...
1:13:17 AM
Scanning 543 folders for symlinks in C:\Users\kyle\git\betalog\node_modules (49ms)
1:13:17 AM
1:13:19 AM
Couldn't adb reverse: closed
1:13:20 AM
Project opened! You can now use the "Share" or "Device" buttons to view your project.
1:13:26 AM
Couldn't adb reverse: closed
1:13:26 AM
Downloading latest version of Expo
1:13:28 AM
Installing Expo on device
1:13:33 AM
Opening on Android device
1:13:56 AM
Building JavaScript bundle: finished in 59643ms.
1:14:01 AM
Dependency graph loaded.
1:14:03 AM
Your JavaScript transform cache is empty, rebuilding (this may take a minute).

Conclusão: Genymotion e Expo podem precisar usar a mesma versão do adb para que a Expo possa se comunicar adequadamente com o dispositivo simulado. Apontar o Genymotion para o local do SDK do Android e garantir que o Expo XDE tenha a mesma versão permitirá a comunicação correta entre os dispositivos. Mudei a versão do Expo XDE para o local do SDK, mas você pode seguir o caminho inverso (pegue os arquivos sdk ADB e coloque-os no local do recurso do Expo XDE).

PS: Eu já passei por todas as postagens de stackoverflow relacionadas a esse problema. Só para vocês saberem que meu gerenciador de tarefas mostra três instâncias do adb.exe em execução. Se você matar algum deles, eles simplesmente voltam.

Espero que isso ajude / aplausos

Kyle s
fonte
8

Talvez suas versões do adb sejam incompatíveis

Verifica:

adb version 

Então:

cd /Path/to/Android/Sdk/platform-tools && ./adb version

Se esses dois forem diferentes, há um erro aqui, basta remover o adb do sys e copie o que estiver nas ferramentas da plataforma para / usr / bin /

Aldo RVV
fonte
4

Se quiser manter seu sistema limpo, você também pode usar o Genymotion sem o Android Studio :

  1. Encontre a cópia de Genymotion de adb. No macOS, isso é normalmente /Applications/Genymotion.app/Contents/MacOS/tools/.
  2. Adicione o diretório de ferramentas do Genymotion ao seu caminho - execute / adicione a linha export PATH=/Applications/Genymotion.app/Contents/MacOS/tools/:$PATHao seu ~/.bash_profileou ~/.bash_rc.
  3. Certifique-se de que você pode executar o adb do seu terminal.

(Em https://docs.expo.io/versions/latest/workflow/genymotion )

cseelus
fonte
4

a versão adb no seu sistema é diferente da versão adb nas ferramentas da plataforma sdk do android. Abaixo sugestão é trabalhar para mim para o sistema operacional Linux

  1. verifique a versão do sys adb, execute o comando abaixo

versão adb

Android Debug Bridge versão 1.0.39

  1. verifique a versão do sdk adb

cd / root / Android / Sdk / ferramentas de plataforma

./adb version

Android Debug Bridge versão 1.0.32

  1. cópia de

rm / usr / bin / adb

[Nota: o comando acima remove o adb existente e copia-o do diretório sdk / platform-tools]

sudo cp / root / Android / Sdk / ferramentas de plataforma / adb / usr / bin / adb

Em seguida, execute o projeto usando este comando

react-native run-android

Hoque MD Zahidul
fonte
esta é uma solução boa para Linux, funciona com ou sem estúdio Android instalado
Maroof Shittu
3

Eu tive a mesma coisa enquanto tentava executar a partir da interface do usuário expo. Fez as mesmas coisas, conforme descrito nas respostas, mas o aplicativo não estava em execução. Quando uma vez tentou executar a exp androidpartir da linha de comando (na pasta do projeto), o aplicativo foi executado com êxito e na próxima vez em que foi executado a partir da Expo UI.

Aleksandr Suhhinin
fonte
2

Eu tive uma questão semelhante.

Primeiro, eu desinstalei o aplicativo. Em seguida, apontei o GenyMotion para o Android SDK fornecido pelo Android Studio. Em seguida, executei "adb kill-server" no terminal. Finalmente, refiz o "react-native run-android" e obtive um sucesso de construção.

VocoJax
fonte
2

As etapas trabalhadas para mim são:

  • $ adb kill-server

  • $ adb start-server

  • $ cd android

  • $ ./gradlew clean

  • $ cd ..

  • $ react-native run-android

Ragnar
fonte
2

Para o Ubuntu

Funciona para mim!!

  1. verifique a versão do sys adb

versão adb

Android Debug Bridge versão 1.0.39

2 verificar a versão sdk adb

cd / home / user_name / Android / sdk / platform-tools

./adb version

Android Debug Bridge versão 1.0.32

  1. cópia de

sudo cp / home / nome_do_usuário / Android / sdk / ferramentas de plataforma / adb / usr / local / bin

Isso é tudo! Isso vai funcionar agora.

Rajat vindru
fonte
1

1. use o caminho sdk personalizado no genymotion. (Suponha que este não funcione significa, tente executar o segundo)

2. Utilize manualmente este comando para executar (SDK PATH / adb, ela será start -n / Package name / MainActivity).

C: \ Users \ AppData \ Local \ Android \ Sdk / platform-tools / adb, ela iniciará -n com.example / com.example.ManiActivity

E tente executar o aplicativo usando react-native run-android.

Priyanga
fonte
1

Estes são os passos

$ adb kill-server

$ adb start-server

$ cd android

$ ./gradlew clean

$ cd ..

$ react-native run-android
Muhammed Nazil
fonte