Отладка по USB на физическом устройстве в среде разработки виртуальных машин - PullRequest
1 голос
/ 24 марта 2020

У меня есть среда разработки, настроенная на виртуальной машине Hyper-V (Windows 10). Использование Visual Studio 2019 в качестве моей IDE с Xamarin (проект monodroid). Мое физическое устройство не может «пройти» из-за решений, принятых дизайнерами Hyper-V, из того, что я прочитал. Я также пытался использовать обходные пути, к сожалению, устройство не отображается (даже в Device Manager) на гостевой машине.

Сначала я не смог увидеть устройство (в среде IDE), однако после некоторых исследований и работы мне удалось показать устройство. Я использовал this , чтобы «обмануть» adb, запущенный на гостевой системе, чтобы увидеть устройство (которое подключено к моей физической машине). Хост-машина запускает сценарий с IP 192.168.1.13 на порту 6037 (adb daemon работает на 5037, по умолчанию). Гостевой компьютер запускает сценарий с remotehost, установленным на Host IP, с тем же портом. Я считаю, что эта конфигурация в порядке, согласно документации.

К сожалению, несмотря на то, что я могу развернуть на своем устройстве, отладчик не может подключиться, и я получаю Cannot start debugging: Cannot connect to 127.0.0.1:29300: No connection could be made because the target machine actively refused it 127.0.0.1:29301 Couldn't connect debugger. You can see more details in Xamarin Diagnostic output and the full exception on logs.

Из того, что я понял, отладчик пытается подключиться к localhost, и, поскольку IDE работает в гостевой системе, физическое устройство не будет иметь localhost:29301. Я предполагаю, что если я смогу подключить IDE к 192.168.0.13:29301 (IP-адрес хоста), он найдет устройство, учитывая, где оно подключено.

Когда я запускаю adb devices, и хост, и Гость показывает физическое устройство, и после попытки запустить отладчик, работающий adb forward --list, правила пересылки таковы:

V4QBB18807150883 tcp: 29300 tcp: 29300
V4QBB18807150883 tcp: 29301 tcp : 29301

Я также вижу в Xamarin Diagnostics, что setprop "debug.mono.extra" "debug=127.0.0.1:29302:29303,timeout=1585047190,loglevel=0,server=y" выполняется. Я предполагаю, что манипулирование этим принесло бы мне некоторую радость, но я не знаю как.

Я не слишком знаком с adb и сетью, поэтому любой, кто имеет больше опыта в этом вопросе, мог бы пролить свет в моей ситуации.

Как я могу заставить отладчик (в гостевой системе) подключиться к моему физическому устройству?

PS: я много искал, прежде чем спрашивать здесь. Я знаю, что это существует: Как я могу подключиться к Android с помощью ADB через TCP? , и даже после многократного ответа на этой странице, я не смог решить свою проблему.

1 Ответ

1 голос
/ 25 марта 2020

После значительных исследований я обнаружил это . Вместо того, чтобы искать способ настройки переадресации порта adb, я попытался выяснить, есть ли способ настроить сквозное подключение USB через Hyper-V.

При использовании RDP это опция (прямое подключение через «Диспетчер Hyper-V» также работает):

На хост-машине

  1. Нажмите Win + R, введите gpedit.ms c и нажмите Enter

  2. Go в Конфигурация компьютера> Административные шаблоны> Windows Компоненты> Службы удаленного рабочего стола> Клиент подключения к удаленному рабочему столу> RemoteFX USB Device Redirection

  3. Выберите там только GPO и включите его и измените права доступа на «Администраторы и пользователи»

На ВМ:

  1. Нажмите Win + R, наберите gpedit.ms c и нажмите Enter

  2. Go в Конфигурация компьютера> Административные шаблоны> Windows Компоненты> Службы удаленных рабочих столов> Узел сеансов удаленных рабочих столов> Перенаправление устройств и ресурсов

  3. Выберите объект групповой политики «Не разрешать перенаправление поддерживаемых устройств Plug and Play» и отключите его

Перезагрузите обе машины ...

* 10 43 * Возможно, вам потребуется принудительное обновление групповой политики, согласно этому комментарию:

Мне пришлось принудительно обновить групповую политику (gpupdate), чтобы она вступила в силу. Просто выключить и перезапустить хост и vm было недостаточно. Спасибо

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...