在虚拟机开发环境中对物理设备进行 USB 调试

USB debugging on physical device within a virtual machine development environment

我在 Hyper-V 虚拟机 (Windows 10) 中设置了一个开发环境。使用 Visual Studio 2019 作为我的 IDE 和 Xamarin(一个 monodroid 项目)。 根据我的阅读,由于 Hyper-V 设计者做出的决定,我的物理设备无法 "passthrough"。 我也尝试过使用变通方法,不幸的是,该设备没有在来宾计算机中显示(即使在 Device Manager 中)。

我最初无法看到设备(在 IDE 内),但是,经过一些研究和工作,我设法让设备显示出来。我在Guest上使用this到"trick"adb运行ning来查看设备(连接到我的物理机)。 主机 运行 在端口 6037 上使用 IP 192.168.1.13 的脚本(adb daemon 运行 在 5037 上,这是默认设置)。来宾机器 运行s 脚本,remotehost 设置为主机 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 在来宾中 运行ning,因此物理设备不会在localhost:29301。我假设如果我能让 IDE 连接到 192.168.0.13:29301(主机 IP),它会找到设备,因为它是连接的地方。

当我运行adb devices时,Host和Guest都显示物理设备,并且在尝试运行调试器后,运行ning 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: 查了很多才问这里。我知道这个存在:How can I connect to Android with ADB over TCP? 即使在该页面上尝试了多个答案后,我也无法解决我的问题。

经过大量研究,我遇到了 this。我没有寻找设置 adb 端口转发的方法,而是尝试查看是否有通过 Hyper-V 设置 USB 直通的方法。

如果可以选择使用 RDP(通过 "Hyper-V Manager" 直接连接也可以):

On host machine

  1. Press Win+R type gpedit.msc and hit enter

  2. Go to Computer configuration > Administrative templates > Windows Components > Remote Desktop Services > Remote Desktop Connection Client > RemoteFX USB Device Redirection

  3. Select the only GPO there and Enable it and change the access rights to "Administrators and Users"

On VM:

  1. Press Win+R type gpedit.msc and hit enter

  2. Go to Computer configuration > Administrative templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Device and Resource Redirection

  3. Select GPO "Do not allow supported Plug and Play device redirection" and disable it

Reboot both machines...

您可能需要根据以下评论强制更新组策略:

I had to force update group policy (gpupdate) for it to take effect. Just shutting down and restarting both host and vm wasn't enough. Thanks

最终,在执行了这些步骤后(我 运行 gpupdate 并重新启动了两台机器),我有一个额外的列表设备选项,"Other supported RemoteFX USB devices",其中是我的身体设备。选中复选框后,VM 检测到设备,无需端口转发。

这可能会导致允许这样的直通的安全风险,但是,我的 VM 不是 public。只能通过我的主机访问。 如果安全部门的人可以对可能的安全风险发表评论,以告知我自己和遇到此问题的潜在其他人,我将不胜感激 post。