Conectando a um emulador Android a partir de uma VM
Um cenário típico para desenvolvedores Xamarin que usam Mac (meu caso), mas gostam do Visual Studio para Windows, é usar um Mac como máquina de desenvolvimento carregando o Windows com Parallels Desktop. Ao testar um aplicativo Android é preferível usar o emulador nativo no macOS ao invés de tentar rodar ele dentro da VM do Windows, o que costuma ser bem problemático.
O setup para isso ficou bastante simples nos últimos tempos:
- Executar o Emulador do Android no macOS
- Configurar o netcat (
nc
) para direcionar as conexões de rede para o emulador - Usar o
adb
no Windows para se conectar ao emulador
Eu criei alguns scripts para facilitar:
Script para iniciar o emulador:
#!/bin/bash
# Start Android Emulator
cd $ANDROID_HOME/tools
emulator -avd <NomeDoEmulador> &
Note o uso da variável $ANDROID_HOME
, ela foi declarada no .bash_profile
para ficar disponível nas chamadas de Terminal e do Script. A mudança de pasta é necessária pois se chamar o comando emulator
em uma pasta diferente dará um erro.
Script para direcionar os pacotes para o adb:
#!/bin/bash
# Open up the Android Emulator to be accessed through network
adb kill-server
# Allow remote connection to the Emulator
cd /tmp
mkfifo backpipe
nc -kl 5555 0<backpipe | nc 127.0.0.1 5555 > backpipe
No Windows, deixo no Desktop um batch (connect-emu.bat) para conectar ao emulador da máquina principal:
"c:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe" connect localhost.mac:5555
PAUSE
Note o uso do endereço
localhost.mac
para se referenciar a máquina host (rodando o macOS). Minha VM esta configurada para usar Shared Network, que cria uma subrede no próprio computador com um DHCP local, e o endereço do host geralmente é o primeiro (10.211.55.2).Para esse nome se tornar acessível na VM, adicionei a seguinte entrada no arquivo
"C:\Windows\System32\drivers\etc\hosts"
:10.211.55.2 localhost.mac
Com isso fica bastante simples referenciar o macOS.
Além disso, o artigo que usei como referência lista mais duas formas de fazer isso caso esses passos não funcionem, mas eu fiquei com essa primeira opção por ser a mais simples.
Algumas pessoas me perguntam porque usar um Mac para emular o Windows. Trata-se de um misto de preferência pessoa com praticidade. Para criar aplicativos iOS no Xamarin é obrigatório passar por um macOS para compilação, então trabalhando em um Mac não preciso me preocupar em ter uma máquina de build.
Mas esse ainda não é meu motivo principal. Pessoalmente eu tenho o macOS como meu sistema operacional “base”, onde realizo todas as minhas tarefas computacionais, a parte das ferramentas que uso especificamente para desenvolvimento de apps.