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

时间:2020-03-24 11:01:10

标签: android windows xamarin virtual-machine usb-debugging

我在 Hyper-V 虚拟机(Windows 10)中设置了开发环境。使用Visual Studio 2019作为我的Xamarin IDE(monodroid项目)。 根据我所阅读的内容,由于Hyper-V设计人员的决定,我的物理设备无法“通过”。 我也尝试过使用变通办法,但不幸的是,该设备未在来宾计算机中显示(甚至没有显示在Device Manager中)。

最初,我无法在IDE中看到该设备,但是,经过一些研究和工作,我设法使该设备显示出来。我使用this来“欺骗”在Guest虚拟机上运行的adb来查看设备(已连接到我的物理机)。 主机在端口192.168.1.13上以IP 6037运行脚本(adb daemon5037上运行,这是默认设置)。来宾计算机使用相同的端口运行脚本,并将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在Guest内部运行,因此物理设备将不在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和网络不太熟悉,因此任何对此事有更多经验的人都可以了解我的处境。

如何使调试器(在Guest内部)连接到我的物理设备?

PS:在这里问之前,我已经搜索了很多东西。我知道这个存在:How can I connect to Android with ADB over TCP?,即使在该页面上尝试了多个答案之后,我也无法解决问题。

1 个答案:

答案 0 :(得分:7)

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

如果可以选择使用RDP(通过“ Hyper-V管理器”直接连接也可以):

在主机上

  1. 按Win + R键入gpedit.msc,然后按Enter

  2. 转到“计算机配置”>“管理模板”>“ Windows组件”>“远程桌面服务”>“远程桌面连接客户端”>“ RemoteFX USB设备重定向”

  3. 选择那里唯一的GPO并启用它,并将访问权限更改为“管理员和用户”

在VM上:

  1. 按Win + R键入gpedit.msc,然后按Enter键

  2. 转到“计算机配置”>“管理模板”>“ Windows组件”>“远程桌面服务”>“远程桌面会话主机”>“设备和资源重定向”

  3. 选择GPO“不允许支持的即插即用设备重定向”并将其禁用

重新启动两台计算机...

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

我必须强制更新组策略(gpupdate)使其生效。仅关闭并重新启动主机和虚拟机是不够的。谢谢

最终,执行完这些步骤(我运行gpupdate并重新启动了两台计算机)后,我可以选择列出设备的另一选择,即“其他受支持的RemoteFX USB设备”,这是我的物理设备。勾选复选框后,VM便检测到了该设备,而无需进行端口转发。

这可能会导致安全风险,允许通过这种方式通过,但是我的VM不是公开的。仅可通过我的房东访问。 如果有人可以对安全隐患发表评论,以告知自己和这篇文章中可能遇到的其他人,我将不胜感激。