Блог хеллоуворлдщика

Как открыть локальный сайт в Android Emulator

21.02.2026 android, docker, dns

Шел 2026 год, а в сети до сих пор нет ни одного простого способа как при работе с Android Emulator получить доступ к локально развернутому API или WEB -интерфейсу по локальному доменному имени (например, my-awesome-api.test:8080), а не по IP хост-машины внутри локальной сети.

Возможно есть, но я не нашел.

К моему большому удивлению, не описывается один из самых простых способов сделать доступным локальный доменный адрес внутри Android Emulator - через локальный DNS-сервер. C первого взгляда может показаться, что это сложно, но это не так. Я лично считаю, что этот способ намного проще, чем способ с изменением /etc/hosts из под root через adb в эмуляторе, или через всякие тунели. Более того, вариант с локальным DNS-сервером работать будет Google Play образами Android, что иногда критически важно.

В первую очередь нам нужно добыть IP-адрес внутри нашей локальной сети. Для этого достаточно посмотреть его в информации о текущем подключении к сети. Как правило, этот IP-адрес будет совпадать с адресом полученным через команду ifconfig | grep "inet " (или ip addr | grep "inet "). У меня это 192.168.0.4.

Теперь воспользуемся Docker образом с DNS сервером dnsmasq - dockurr/dnsmasq. Запуск данного DNS сервера с использованием Docker (да даже и без него) проще простого. Нужно всего-лишь указать пары домен-IP для их разрешения. Достигается это за счет обычного конфигурационного файла. Возьмем наш ранее упомянутый домен my-awesome-api.test и укажем на какой IP нужно отправлять запросы в файле конфигурации ~/dnsmasq/dnsmasq.d/dnsmasq.conf.

# ~/dnsmasq/dnsmasq.d/dnsmasq.conf

address=/my-awesome-api.test/192.168.0.4

Путь файла конфигурации выбран для примера, вы можете поместить его куда вам удобно, но лучше, чтобы он лежал в отдельной директории dnsmasq.d/.

В конфигурации файла я указал, что запросы с my-awesome-api.test следует отправлять на мой ранее указанный локальный адрес внутри сети. Чаще всего оно так и будет. При этом можно также указать и любой другой, если, к примеру, запускаете Android Emulator на одной машине, а API находится на другой, или вообще в глобальной сети интернет.

И вот мы подошли к самому главному. Запустим наш локальный DNS сервер.

docker run -it --rm --name dnsmasq -p 53:53/udp -p 53:53/tcp -v ~/dnsmasq/dnsmasq.d:/etc/dnsmasq.d dockurr/dnsmasq

В случае успешного запуска не должно быть никаких ошибок, процесс не должен автоматически завершиться, а вывод будет примерно следующим:

dnsmasq: started, version 2.92 cachesize 150
dnsmasq: compile time options: IPv6 GNU-getopt no-DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset no-nftset auth DNSSEC loop-detect inotify dumpfile
dnsmasq: using nameserver 1.0.0.1#53
dnsmasq: using nameserver 1.1.1.1#53
dnsmasq: read /etc/hosts - 9 names

После этого запускаем нужный Android Emulator с нашим DNS сервером и наслаждаемся работой с локальными доменами.

emulator -avd PhoneEmulatorName -dns-server 192.168.0.4

В целом можно прописать данный DNS в настройках телефона, но командой просто удобней.