Взаимосвязь экземпляров эмулятора

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

Эмуляторы Android версии 36.5 и выше

В эмуляторах Android версии 36.5 и более поздних версиях используется упрощенная сетевая модель, которая подключает экземпляры через общую сеть Wi-Fi.

Благодаря такой сетевой архитектуре несколько эмуляторов отображаются как отдельные устройства в одной виртуальной сети Wi-Fi. Это позволяет им автоматически обнаруживать друг друга и обмениваться данными, используя стандартные протоколы Wi-Fi.

Эмуляторы могут находить друг друга в виртуальной сети, используя такие технологии, как обнаружение сетевых служб (NSD) и Wi-Fi Direct .

Поскольку эмуляторы находятся в одной сети Wi-Fi, вы также можете узнать конкретный IP-адрес эмулятора и подключиться к нему напрямую из другого экземпляра эмулятора. Чтобы получить IP-адрес виртуального интерфейса Wi-Fi ( wlan0 ), выполните следующую команду на вашем хост-компьютере:

adb shell ip addr show wlan0

Эмулятор Android до версии 36.5

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

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

Настроить перенаправление сети можно двумя способами:

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

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

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

Сначала определите номер консольного порта целевого экземпляра эмулятора. Например, номер консольного порта первого запущенного экземпляра эмулятора — 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 .

Экземпляры эмулятора межсоединений

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

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

  • 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 :

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