Настройка сети эмулятора Android

Эмулятор предоставляет универсальные сетевые возможности, которые можно использовать для настройки сложных сред моделирования и тестирования для вашего приложения. На этой странице представлена ​​сетевая архитектура и возможности эмулятора.

Сетевое адресное пространство

Каждый экземпляр эмулятора работает за виртуальным маршрутизатором или службой брандмауэра, которая изолирует его от сетевых интерфейсов и настроек вашей машины разработки, а также от Интернета. Эмулируемое устройство не может обнаружить вашу машину разработки или другие экземпляры эмулятора в сети. Он обнаруживает только то, что подключен через Ethernet к маршрутизатору или брандмауэру.

Виртуальный маршрутизатор для каждого экземпляра управляет сетевым адресным пространством 10.0.2/24. Все адреса, управляемые маршрутизатором, имеют вид 10.0.2. xx , где xx — число. Адреса в этом пространстве предварительно назначаются эмулятором или маршрутизатором следующим образом:

Сетевой адрес Описание
10.0.2.1 Адрес маршрутизатора или шлюза
10.0.2.2 Специальный псевдоним для интерфейса обратной связи вашего хоста (127.0.0.1 на вашей машине разработки)
10.0.2.3 Первый DNS-сервер
10.0.2.4/10.0.2.5/10.0.2.6 Дополнительные второй, третий и четвертый DNS-серверы
10.0.2.15 Сеть эмулируемого устройства при подключении через Ethernet
10.0.2.16 Эмулируемая сеть устройства при подключении через Wi-Fi
127.0.0.1 Интерфейс обратной связи эмулируемого устройства

Одни и те же назначения адресов используются всеми работающими экземплярами эмулятора. Это означает, что если на вашем компьютере одновременно работают два экземпляра, каждый из них будет иметь свой собственный маршрутизатор, а за ним каждый будет иметь IP-адрес 10.0.2.15. Экземпляры изолированы маршрутизатором и не могут обнаружить друг друга в одной сети. Информацию о том, как разрешить экземплярам эмулятора обмениваться данными через TCP/UDP, см. в разделе о соединении экземпляров эмулятора .

Адрес 127.0.0.1 на вашей машине разработки соответствует интерфейсу обратной связи эмулятора. Для доступа к службам, работающим на шлейфовом интерфейсе вашей машины разработки, используйте вместо этого специальный адрес 10.0.2.2.

Предварительно выделенные адреса эмулируемого устройства специфичны для эмулятора Android и, вероятно, будут сильно отличаться на реальных устройствах (которые также могут быть преобразованы в сетевые адреса, особенно за маршрутизатором или брандмауэром).

Ограничения локальной сети

Приложения Android, работающие на эмуляторе, могут подключаться к сети, доступной на вашей рабочей станции. Однако приложения подключаются через эмулятор, а не напрямую к оборудованию, и эмулятор действует как обычное приложение на вашей рабочей станции. Это может вызвать некоторые ограничения:

  • Связь с эмулируемым устройством может быть заблокирована программой брандмауэра, запущенной на вашем компьютере.
  • Связь с эмулируемым устройством может быть заблокирована другим (физическим) брандмауэром или маршрутизатором, к которому подключен ваш компьютер.

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

В зависимости от среды эмулятор может не поддерживать другие протоколы (например, ICMP, используемый для проверки связи). В настоящее время эмулятор не поддерживает IGMP или многоадресную рассылку.

Использовать сетевое перенаправление

Чтобы связаться с экземпляром эмулятора за его виртуальным маршрутизатором, настройте перенаправление сети на виртуальном маршрутизаторе. Затем клиенты могут подключиться к указанному гостевому порту на маршрутизаторе, в то время как маршрутизатор направляет трафик к этому порту и обратно на хост-порт эмулируемого устройства.

Чтобы настроить перенаправление сети, создайте сопоставление хостовых и гостевых портов и адресов на экземпляре эмулятора. Существует два способа настроить перенаправление сети: с помощью команд консоли эмулятора и с помощью инструмента Android Debug Bridge ( adb ), как описано в следующих разделах.

Настройте перенаправление через консоль эмулятора

Каждый экземпляр эмулятора предоставляет консоль управления, к которой вы можете подключиться и вводить команды, специфичные для этого экземпляра. Используйте консольную команду redir , чтобы настроить перенаправление, необходимое для экземпляра эмулятора.

Сначала определите номер консольного порта для целевого экземпляра эмулятора. Например, номер консольного порта для первого запущенного экземпляра эмулятора — 5554. Далее подключитесь к консоли целевого экземпляра эмулятора, указав номер его консольного порта следующим образом:

telnet localhost 5554

После подключения вы должны пройти аутентификацию, прежде чем сможете настроить перенаправление. Дополнительные сведения о том, как это сделать, см. в разделе Запуск и остановка сеанса консоли . После аутентификации используйте команду redir для работы с перенаправлением.

Чтобы добавить перенаправление, используйте:

redir add <protocol>:<host-port>:<guest-port>

Где <protocol> — это tcp или udp , а <host-port> и <guest-port> устанавливают соответствие между вашим компьютером и эмулируемой системой.

Например, следующая команда устанавливает перенаправление, которое обрабатывает все входящие TCP-соединения с вашим хостом (компьютером разработки) по адресу 127.0.0.1:5000 и передает их в эмулируемую систему по адресу 10.0.2.15:6000:

redir add tcp:5000:6000

Чтобы удалить перенаправление, используйте команду redir del . Чтобы просмотреть все перенаправления для конкретного экземпляра, используйте redir list . Дополнительные сведения об этих и других консольных командах см. в разделе Отправка консольных команд эмулятора .

Обратите внимание, что номера портов ограничены вашей локальной средой. Обычно это означает, что вы не можете использовать номера портов хоста ниже 1024 без специальных прав администратора. Кроме того, вы не сможете настроить перенаправление для порта хоста, который уже используется другим процессом на вашем компьютере. В этом случае redir генерирует сообщение об ошибке.

Настроить перенаправление через adb

Инструмент Android Debug Bridge ( adb ) обеспечивает перенаправление портов — альтернативный способ настройки перенаправления сети. Дополнительную информацию см. в разделе «Настройка переадресации портов» в документации adb .

Обратите внимание, что adb в настоящее время не предлагает способа удалить перенаправление, кроме как остановить сервер adb .

Настройка параметров DNS эмулятора

При запуске эмулятор считывает список DNS-серверов, которые в данный момент использует ваша система. Затем он сохраняет в этом списке IP-адреса до четырех серверов и при необходимости устанавливает для них псевдонимы на эмулируемых адресах 10.0.2.3, 10.0.2.4, 10.0.2.5 и 10.0.2.6.

В Linux и macOS эмулятор получает адреса DNS-серверов, анализируя файл /etc/resolv.conf . В Windows эмулятор получает адреса, вызывая API GetNetworkParams() . Обратите внимание: обычно это означает, что эмулятор игнорирует содержимое вашего файла «hosts» ( /etc/hosts в Linux/macOS, %WINDOWS%/system32/HOSTS в Windows).

При запуске эмулятора из командной строки вы можете использовать опцию -dns-server <serverList> , чтобы вручную указать адреса используемых DNS-серверов, где <serverList> — это список имен серверов или IP-адресов, разделенных запятыми. Эта опция может оказаться полезной, если вы столкнулись с проблемами разрешения DNS в эмулируемой сети (например, сообщение «Ошибка неизвестного хоста», которое появляется при использовании веб-браузера).

Используйте эмулятор с прокси

Во многих корпоративных сетях сетевые администраторы отказываются от прямого подключения к Интернету. Вместо этого интернет-соединения должны проходить через определенный прокси-сервер. Чтобы получить доступ к Интернету в сети с требованием прокси-сервера, эмулятор должен знать, что прокси-сервер существует и что ему необходимо подключиться к нему.

Из-за особенностей HTTP прямое соединение с веб-сервером и соединение через прокси-сервер приводят к различным запросам GET. Эмулятор прозрачно перезаписывает запросы GET от виртуального устройства перед взаимодействием с прокси, поэтому он работает.

Если вашему эмулятору необходим доступ к Интернету через прокси-сервер, вы можете настроить собственный HTTP-прокси на экране расширенных элементов управления эмулятора:

  1. Открыв эмулятор, нажмите «Еще».
  2. Нажмите «Настройки» и «Прокси» .
  3. Определите настройки HTTP-прокси.

Альтернативно вы можете настроить прокси-сервер из командной строки с помощью параметра -http-proxy <proxy> при запуске эмулятора. В этом случае укажите информацию о прокси в <proxy> в одном из следующих форматов:

http://<machineName>:<port>

или

http://<username>:<password>@<machineName>:<port>

Параметр -http-proxy заставляет эмулятор использовать указанный прокси-сервер HTTP или HTTPS для всех исходящих TCP-соединений. Перенаправление для UDP не поддерживается.

Альтернативно вы можете определить переменную среды http_proxy со значением, которое вы хотите использовать для <proxy> . В этом случае вам не нужно указывать значение <proxy> в команде -http-proxy — эмулятор проверяет значение переменной среды http_proxy при запуске и автоматически использует ее значение, если оно определено.

Вы можете использовать опцию -debug-proxy для диагностики проблем с подключением прокси.

Соединение экземпляров эмулятора

Чтобы один экземпляр эмулятора мог взаимодействовать с другим, настройте перенаправление сети, как описано ниже.

Предположим, что ваша среда представлена ​​следующим образом:

  • A — ваша машина разработки.
  • B — ваш первый экземпляр эмулятора, работающий на A.
  • C — ваш второй экземпляр эмулятора, также работающий на A.

Если вы хотите запустить сервер на B, к которому будет подключаться C, настройте его следующим образом:

  1. Настройте сервер на B, прослушивающий 10.0.2.15:<serverPort>.
  2. На консоли B настройте перенаправление с A:localhost:<localPort> на B:10.0.2.15:<serverPort>.
  3. На C дайте клиенту подключиться к 10.0.2.2:<localPort>.

Например, если вы хотите запустить HTTP-сервер, выберите <serverPort> значение 80 и <localPort> значение 8080:

  • Б слушает 10.0.2.15:80.
  • На консоли B введите redir add tcp:8080:80.
  • C подключается к 10.0.2.2:8080.

Отправьте голосовой вызов или SMS на другой экземпляр эмулятора.

Эмулятор автоматически пересылает симулированные голосовые вызовы и SMS-сообщения из одного экземпляра в другой. Чтобы отправить голосовой вызов или SMS, используйте приложение для набора номера или приложение SMS соответственно из одного из эмуляторов.

Чтобы инициировать имитацию голосового вызова на другой экземпляр эмулятора:

  1. Запустите приложение дозвона на исходном экземпляре эмулятора.
  2. В качестве номера для набора введите номер консольного порта целевого экземпляра.

    Вы можете определить номер консольного порта целевого экземпляра, проверив заголовок его окна, если он работает в отдельном окне, но не в окне инструмента. Номер консольного порта указывается как «Эмулятор Android (<порт>)».

    Альтернативно, команда adb devices печатает список запущенных виртуальных устройств и номера их консольных портов. Дополнительную информацию см. в разделе Запрос устройств .

  3. Нажмите кнопку набора номера. В целевом экземпляре эмулятора появится новый входящий вызов.

Чтобы отправить SMS-сообщение на другой экземпляр эмулятора:

  1. Запустите приложение SMS, если оно доступно.
  2. Укажите номер консольного порта целевого экземпляра эмулятора в качестве адреса SMS.
  3. Введите текст сообщения.
  4. Отправьте сообщение. Сообщение доставляется в целевой экземпляр эмулятора.
  5. Вы также можете подключиться к консоли эмулятора, чтобы имитировать входящий голосовой вызов или SMS. Дополнительные сведения см. в разделах Эмуляция телефонии и Эмуляция SMS .