Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы подключиться к 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-macIP-адресом компьютера 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. Спасибо!