Para testar aplicativos que envolvem interações multidispositivo, conecte várias instâncias do Android Emulator para que elas possam se comunicar entre si. O método para estabelecer uma conexão depende da versão do emulador que você está usando.
Emuladores do Android versão 36.5 e mais recentes
O Android Emulator versão 36.5 e mais recentes oferecem um modelo de rede simplificado que conecta instâncias em uma rede Wi-Fi compartilhada.
Com essa pilha de rede, vários emuladores aparecem como dispositivos distintos na mesma rede Wi-Fi virtual. Isso permite que eles se descubram e se comuniquem automaticamente usando protocolos padrão baseados em Wi-Fi.
Os emuladores podem se encontrar na rede virtual usando tecnologias como Network Service Discovery (NSD) e Wi-Fi Direct.
Como os emuladores estão na mesma rede Wi-Fi, você também pode encontrar o endereço IP específico de um emulador e se conectar a ele diretamente de outra instância de emulador. Para conseguir o endereço IP da interface Wi-Fi virtual (wlan0), execute
o seguinte comando na máquina host:
adb shell ip addr show wlan0
Android Emulator antes da versão 36.5
Se você estiver usando uma versão anterior do Android Emulator, a comunicação direta entre instâncias não será possível por padrão. Cada instância do emulador opera por trás do próprio roteador virtual, isolando-o da rede local e de outros emuladores.
Para ativar a comunicação, configure manualmente o redirecionamento de rede. Esse processo envolve a criação de um mapeamento que encaminha o tráfego de uma porta específica na máquina host para uma porta no dispositivo emulado, ignorando o roteador virtual.
É possível configurar o redirecionamento de rede de duas maneiras:
- Comandos do console do emulador: use o console integrado para configurar mapeamentos de portas para a instância do emulador em execução.
- Android Debug Bridge (adb): use comandos adb para configurar as regras de encaminhamento de porta necessárias.
Configurar o redirecionamento pelo console do emulator
Cada instância do emulador oferece um console de controle a que você pode se conectar e
emitir comandos específicos para essa instância. Use o comando redir do console
para configurar o redirecionamento conforme necessário para uma instância de emulador.
Primeiro, determine o número da porta do console para a instância de emulador de destino. Por exemplo, o número da porta do console para a primeira instância do emulador iniciada é 5554. Em seguida, conecte-se ao console da instância de emulador de destino, especificando o número de porta do console, da seguinte maneira:
telnet localhost 5554
Após a conexão, faça a autenticação antes de configurar o redirecionamento. Consulte
Iniciar e interromper uma sessão de console
para saber, em detalhes, como fazer isso. Depois da autenticação, use o comando redir para
trabalhar com o redirecionamento.
Para adicionar um redirecionamento, use o seguinte comando:
redir add <protocol>:<host-port>:<guest-port>
Em que <protocol> é tcp ou udp, e <host-port> e <guest-
port> definem o mapeamento entre sua máquina e o sistema emulado.
Por exemplo, o comando a seguir configura um redirecionamento que processa todas as conexões TCP de entrada para sua máquina host (desenvolvimento) em 127.0.0.1:5000 e as transmite para o sistema emulado em 10.0.2.15:6000:
redir add tcp:5000:6000
Para excluir um redirecionamento, use o comando redir del. Para listar todos os redirecionamentos
de uma instância específica, use redir list. Para mais informações sobre esses
e outros comandos do console, consulte Enviar comandos do console do
emulador.
Os números de porta são restringidos pelo ambiente local. Normalmente, isso significa que não é possível usar números de porta do host abaixo de 1024 sem ter privilégios especiais de administrador. Além disso, não será possível configurar um
redirecionamento para uma porta do host que já esteja sendo usada por outro processo na
máquina. Nesse caso, redir gera uma mensagem de erro.
Configurar o redirecionamento pelo adb
A ferramenta Android Debug Bridge (adb) oferece o encaminhamento de portas, uma maneira alternativa de configurar o redirecionamento de rede. Para mais informações, consulte Configurar o encaminhamento de portas na documentação do adb.
No momento, o adb não oferece uma maneira de remover um redirecionamento, a não ser com a interrupção
do servidor adb.
Interconectar instâncias de emulador
Para permitir que uma instância do emulador se comunique com outra, configure o redirecionamento de rede conforme descrito nas etapas a seguir.
Suponha que seu ambiente seja o seguinte:
- A: sua máquina de desenvolvimento.
- B: sua primeira instância de emulador, em execução em A.
- C: sua segunda instância de emulador, também em execução em A.
Se você quiser executar um servidor em B, a que C vai se conectar, configure-o da seguinte maneira:
- Configure o servidor em B, detectando
10.0.2.15:<serverPort>. - No console B, configure um redirecionamento de A:
localhost:<localPort>para B:10.0.2.15:<serverPort>. - Em C, conecte o cliente a
10.0.2.2:<localPort>.
Por exemplo, se você quiser executar um servidor HTTP, selecione <serverPort> como 80
e <localPort> como 8080:
- B detecta em
10.0.2.15:80. - No console B, emita
redir add tcp:8080:80. - C se conecta a
10.0.2.2:8080.