Можно ли подключиться с виртуальной машины Windows к эмуляторам Android под управлением Mac?
Чтобы подключиться к Android Emulator, работающему на компьютере Mac, из виртуальной машины Windows, выполните следующие действия.
Примечание.
Рекомендуется использовать Android Emulator без встроенного Магазина Google Play.
Запустите эмулятор на компьютере Mac.
Завершите работу
adb
на компьютере Mac:adb kill-server
Обратите внимание, что эмулятор прослушивается на 2 портах TCP в сетевом интерфейсе замыкания на себя:
lsof -iTCP -sTCP:LISTEN -P | grep 'emulator\|qemu' emulator6 94105 macuser 20u IPv4 0xa8dacfb1d4a1b51f 0t0 TCP localhost:5555 (LISTEN) emulator6 94105 macuser 21u IPv4 0xa8dacfb1d845a51f 0t0 TCP localhost:5554 (LISTEN)
Для подключения к
adb
используется порт с нечетным номером. См. также https://developer.android.com/tools/devices/emulator.html#emulatornetworking.Вариант 1. Используйте
nc
для пересылки входящих TCP-пакетов, полученных вне порта 5555 (или любого другого порта, который вам нравится) в нечетный порт интерфейса петли (127.0.0.0.1 5555 в этом примере) и перенаправляйте исходящие пакеты обратно в другой способ:cd /tmp mkfifo backpipe nc -kl 5555 0<backpipe | nc 127.0.0.1 5555 > backpipe
Если команды
nc
продолжают выполняться в окне терминала, пакеты перенаправляются должным образом. Вы можете ввести в окне терминала Control-C, чтобы выйти из командnc
после завершения работы с эмулятором.(Вариант 1 обычно проще, чем вариант 2, особенно если Включен брандмауэр системных параметров > безопасности и конфиденциальности>.)
Вариант 2. Используйте
pfctl
для перенаправления TCP-пакетов из порта5555
(или любого другого порта, который вам нравится) в интерфейсе общей сети на нечетный порт интерфейса петли (127.0.0.1:5555
в этом примере):sed '/rdr-anchor/a rdr pass on vmnet8 inet proto tcp from any to any port 5555 -> 127.0.0.1 port 5555' /etc/pf.conf | sudo pfctl -ef -
Эта команда настраивает перенаправление портов с помощью системной службы
pf packet filter
. Разрывы строк важны. Проследите, чтобы они сохранились при копировании. Кроме того, при использовании Parallels необходимо изменить имя интерфейса vmnet8 на другое.vmnet8
— это имя специального устройства NAT для режима Shared Networking (Общий сетевой интерфейс) в VMWare Fusion. Для Parallels, вероятно, подойдет сетевой интерфейс vnic0.Подключитесь к эмулятору с компьютера Windows:
C:\> adb connect ip-address-of-the-mac:5555
Замените "ip-address-of-the-mac" на IP-адрес компьютера Mac, например тот, который указан
ifconfig vmnet8 | grep 'inet '
. При необходимости замените5555
другой порт, который вам нравится на шаге 4. (Примечание. Один из способов получения доступа кadb
командной строке — с помощью> командной строки Android Android > ADB в Visual Studio.)
Альтернативный способ с использованием ssh
Если вы включили Удаленный вход на компьютере Mac, для подключения к эмулятору можно использовать перенаправление портов с помощью ssh
.
Установите SSH-клиент в Windows. Один из вариантов — установить Git для Windows. Тогда команда
ssh
будет доступна в командной строке Git Bash.Выполните шаги 1-3 выше, чтобы запустить эмулятор, убить
adb
сервер на Компьютере Mac и определить порты эмулятора.Запустите
ssh
в Windows, чтобы настроить двустороннюю переадресацию портов между локальным портом в Windows (в этом примереlocalhost:15555
) и портом эмулятора с нечетным номером в интерфейсе замыкания на себя на компьютере Mac (в этом примере127.0.0.1:5555
):C:\> ssh -L localhost:15555:127.0.0.1:5555 mac-username@ip-address-of-the-mac
Замените
mac-username
именем пользователя компьютера Mac, как указано вwhoami
. Заменитеip-address-of-the-mac
IP-адресом компьютера Mac.Подключитесь к эмулятору через локальный порт в Windows:
C:\> adb connect localhost:15555
(Примечание. Один из простых способов получить доступ к
adb
командной строке — с помощью> командной строки Android > Android ADB в Visual Studio.)
Небольшое предупреждение. Если в качестве локального порта используется порт 5555
, adb
считает, что эмулятор выполняется локально в Windows. Это не создает проблем в Visual Studio, но в Visual Studio для Mac приводит к завершению работы приложения сразу после запуска.
Альтернативный метод, использующий adb -H
, пока не поддерживается.
Теоретически можно было бы использовать встроенные возможности adb
для подключения к серверу adb
, работающему на удаленном компьютере (см. пример https://stackoverflow.com/a/18551325).
Однако расширения IDE Xamarin.Android в настоящее время не предоставляют возможности для настройки этого параметра.
Контактная информация
В этом документе рассматривается текущее поведение по состоянию на март 2016 года. Методика, описанная в этом документе, не является частью стабильного набора тестов для Xamarin, поэтому в будущем ее поддержка может прерваться.
Если вы заметили, что методика больше не работает, или обратили внимание на другие ошибки в документе, вы можете добавить обсуждение в следующую беседу форума: http://forums.xamarin.com/discussion/33702/android-emulator-from-host-device-inside-windows-vm. Спасибо!