Partilhar via


É possível se conectar aos emuladores de Android em execução em um Mac usando uma VM do Windows?

Para se conectar ao emulador Android em execução em um Mac a partir de uma máquina virtual do Windows, use as seguintes etapas:

Observação

Recomendamos o uso de um emulador Android que não inclua a Google Play Store.

  1. Inicie o emulador no Mac.

  2. Mate o adb servidor no Mac:

    adb kill-server
    
  3. Observe que o emulador está escutando em 2 portas TCP na interface de rede de loopback:

    lsof -iTCP -sTCP:LISTEN -P | grep 'emulator\|qemu'
    
    emulator6 94105 macuser   20u  IPv4 0xa8dacfb1d4a1b51f      0t0  TCP localhost:5555 (LISTEN)
    emulator6 94105 macuser   21u  IPv4 0xa8dacfb1d845a51f      0t0  TCP localhost:5554 (LISTEN)
    

    A porta ímpar é a usada para se conectar ao adb. Consulte também https://developer.android.com/tools/devices/emulator.html#emulatornetworking.

  4. Opção 1: Use nc para encaminhar pacotes TCP de entrada recebidos externamente na porta 5555 (ou qualquer outra porta desejada) para a porta ímpar na interface de loopback (127.0.0.1 5555 neste exemplo) e para encaminhar os pacotes de saída de volta para o outro lado:

    cd /tmp
    mkfifo backpipe
    nc -kl 5555 0<backpipe | nc 127.0.0.1 5555 > backpipe
    

    Enquanto os nc comandos permanecerem em execução em uma janela do Terminal, os pacotes serão encaminhados conforme o esperado. Você pode digitar Control-C na janela Terminal para encerrar os nc comandos assim que terminar de usar o emulador.

    (A opção 1 é geralmente mais fácil do que a opção 2, especialmente se Preferências > do Sistema Segurança & Privacidade > O Firewall está ativado.)

    Opção 2: Use pfctl para redirecionar pacotes TCP da porta (ou qualquer outra porta desejada) na interface de rede compartilhada para a porta 5555 ímpar na interface de loopback (127.0.0.1:5555 neste exemplo):

    sed '/rdr-anchor/a rdr pass on vmnet8 inet proto tcp from any to any port 5555 -> 127.0.0.1 port 5555' /etc/pf.conf | sudo pfctl -ef -
    

    Este comando configura o encaminhamento de porta usando o serviço do pf packet filter sistema. As quebras de linha são importantes. Certifique-se de mantê-los intactos ao copiar e colar. Você também precisará ajustar o nome da interface do vmnet8 se estiver usando o Parallels. vmnet8é o nome do dispositivo NAT especial para o modo de rede compartilhada no VMWare Fusion. A interface de rede apropriada no Parallels é provavelmente vnic0.

  5. Conecte-se ao emulador a partir da máquina Windows:

    C:\> adb connect ip-address-of-the-mac:5555
    

    Substitua "ip-address-of-the-mac" pelo endereço IP do Mac, por exemplo, conforme listado pelo ifconfig vmnet8 | grep 'inet '. Se necessário, substitua 5555 pela outra porta desejada na etapa 4. (Nota: uma maneira de obter acesso adb à linha de comando é através de ferramentas > Android > Android Adb Command Prompt no Visual Studio.)

Técnica alternativa usando ssh

Se você ativou o Login Remoto no Mac, poderá usar ssh o encaminhamento de porta para se conectar ao emulador.

  1. Instale um cliente SSH no Windows. Uma opção é instalar o Git para Windows. O ssh comando estará disponível no prompt de comando do Git Bash .

  2. Siga as etapas 1 a 3 acima para iniciar o emulador, matar o adb servidor no Mac e identificar as portas do emulador.

  3. Execute ssh no Windows para configurar o encaminhamento de porta bidirecional entre uma porta local no Windows (neste exemplo) e a porta do emulador ímpar na interface de loopback do Mac (localhost:15555127.0.0.1:5555neste exemplo):

    C:\> ssh -L localhost:15555:127.0.0.1:5555 mac-username@ip-address-of-the-mac
    

    Substitua mac-username pelo nome de usuário do Mac, conforme listado pelo whoami. Substitua ip-address-of-the-mac pelo endereço IP do Mac.

  4. Conecte-se ao emulador usando a porta local no Windows:

    C:\> adb connect localhost:15555
    

    (Nota: uma maneira fácil de obter acesso adb à linha de comando é através das Ferramentas > Android > Adb Prompt de Comando no Visual Studio.)

Um pequeno cuidado: se você usar a porta para a porta 5555 local, adb pensará que o emulador está sendo executado localmente no Windows. Isso não causa nenhum problema no Visual Studio, mas no Visual Studio para Mac faz com que o aplicativo saia imediatamente após a inicialização.

O uso adb -H de técnicas alternativas ainda não é suportado

Em teoria, outra abordagem seria usar adba capacidade interna do para se conectar a um adb servidor em execução em uma máquina remota (veja por exemplo https://stackoverflow.com/a/18551325). Mas as extensões IDE Xamarin.Android atualmente não fornecem uma maneira de configurar essa opção.

Informações do contato

Este documento discute o comportamento atual em março de 2016. A técnica descrita neste documento não faz parte do conjunto de testes estável do Xamarin, portanto, pode quebrar no futuro.

Se você notar que a técnica não funciona mais, ou se você notar quaisquer outros erros no documento, sinta-se livre para adicionar à discussão no seguinte tópico do fórum: http://forums.xamarin.com/discussion/33702/android-emulator-from-host-device-inside-windows-vm. Obrigado!