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