ADB e o emulador Android falham atrás de uma VPN: três caminhos
A descoberta de ADB, a placa de rede virtual do emulador e o resolvedor do host falham separadamente atrás de uma VPN. Teste cada caminho em ordem antes de culpar o túnel.
Você conecta a VPN do escritório e o Android Studio perde o emulador em execução, o adb start-server trava e um telefone físico no Wi-Fi cai da lista de dispositivos. Parece que um túnel bloqueia um produto. Na prática, três caminhos distintos falham de três maneiras: a descoberta de dispositivos do adb, a rede virtual do emulador e o resolvedor do host. O túnel normalmente possui apenas o último, e muitas vezes só uma parte dele.
Três sockets, três donos
O servidor adb escuta na porta 5037 do host e fala com os dispositivos por USB ou TCP, com mDNS para descoberta em rede. O emulador roda atrás do seu próprio roteador virtual: o convidado é 10.0.2.15, o gateway é 10.0.2.2 e o servidor DNS é 10.0.2.3, e o processo do emulador traduz tudo em sockets do host. O resolvedor do host é onde o cliente VPN instala DNS e domínios de busca.
Essa separação explica por que uma correção parece funcionar para uma ferramenta e não para outra. Um cliente que muda o resolvedor do host deixa o processo do emulador com o estado de resolvedor lido na inicialização. Um cliente que filtra multicast quebra a descoberta sem tocar no DNS. Um cliente que filtra adaptadores virtuais nega o emulador enquanto o navegador do host continua funcionando. Cada sintoma tem uma causa diferente, então identifique o caminho que falha antes de mudar qualquer configuração.
Comece pelo que o adb consegue ver
Execute adb devices antes de tocar na VPN. Uma lista vazia é um problema de transporte, não de roteamento, e nenhum ajuste do túnel conserta um dispositivo que o servidor nunca enumerou. Reinicie o servidor de forma limpa: primeiro adb kill-server e depois adb start-server, e leia a saída para ver qual porta ele ocupou. Se a própria inicialização travar, a descoberta mDNS é o suspeito habitual numa rede que filtra multicast; a solução documentada é iniciar o servidor com a descoberta desativada:
ADB_MDNS_OPENSCREEN=0 adb start-server
adb devicesPara um dispositivo físico, o USB é o caminho mais curto. Se precisar de TCP, coloque o dispositivo em modo de escuta com adb tcpip 5555 e conecte ao endereço e à porta do dispositivo, adb connect 192.0.2.10:5555. A porta 5037 é a porta do servidor do host, não a porta em que um dispositivo escuta.
Teste o emulador por dentro
O emulador responde ao DNS a partir de 10.0.2.3, e esse resolvedor é alimentado pelo processo do host. Quando o cliente VPN muda o resolvedor do host, o emulador pode herdá-lo; quando o cliente filtra o processo do emulador ou a lista de adaptadores muda depois da inicialização, não pode. Separe os dois com um alvo numérico e um nome do mesmo shell. adb shell ping -c 2 10.0.2.2 demonstra que a rede virtual alcança o lado do host. Uma consulta de nome depois mostra se a resolução cruzou a fronteira.
Depois execute a mesma consulta no host. O host resolve e o emulador não significa que a quebra está entre o resolvedor do host e a rede virtual do emulador, não no túnel. Os dois falharem significa que o resolvedor do host é o lugar a olhar. Reiniciar o emulador depois de conectar a VPN vale uma tentativa, porque alguns clientes instalam um estado de resolvedor que um processo de emulador em execução não captura.
Verifique o resolvedor do host e os filtros do cliente
Um cliente de túnel completo substitui o resolvedor do host pelo seu, e um cliente split-DNS adiciona domínios de busca e encaminhadores condicionais. Nomes internos costumam depender dessa configuração split-DNS, então veja o que o host usa enquanto está conectado: o endereço do resolvedor, o domínio de busca e se a zona interna é encaminhada ao DNS corporativo. Um resolvedor que responde a nomes públicos mas não a internos é uma questão de política, não um túnel quebrado.
Alguns clientes corporativos também bloqueiam o tráfego de adaptadores virtuais. Para um driver de filtro, o emulador parece um adaptador virtual, então o host pode funcionar perfeitamente enquanto a política nega o emulador. Essa política não é visível da estação de trabalho, e adivinhar configurações de proxy não a revelará. Se o host resolve e o emulador fica bloqueado independentemente do resolvedor, a escalada correta é para a equipe que possui a política do cliente.
Ordem das verificações e o que cada resultado significa
Trabalhe de cima para baixo e pare na primeira linha que falhar. Cada resultado aponta para um dono diferente, e nenhum deles se resolve reinstalando o Android Studio.
| Result | Likely owner | Next check |
|---|---|---|
| adb devices is empty with USB attached | USB, driver or adb server | cable, authorization prompt, adb kill-server |
| adb start-server hangs | mDNS discovery | ADB_MDNS_OPENSCREEN=0 |
| Emulator reaches 10.0.2.2, names fail | Host resolver to emulator boundary | host lookup of the same name |
| Host resolves, emulator still fails | Emulator process or client filter | restart emulator, ask IT about virtual adapters |
| Both fail for internal names only | Split DNS or search domain | resolver and zone configuration |
Apenas as duas últimas linhas são perguntas de VPN no sentido habitual, e só a última trata do conteúdo do DNS. A documentação do adb cobre a porta do servidor e as variáveis de ambiente citadas aqui, o suficiente para manter o lado do transporte honesto enquanto você testa o resto.