我在 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 daemon
在5037
上运行,这是默认设置)。来宾计算机使用相同的端口运行脚本,并将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?,即使在该页面上尝试了多个答案之后,我也无法解决问题。
答案 0 :(得分:7)
经过大量研究,我发现this。我没有寻找设置adb
端口转发的方法,而是尝试查看是否有一种通过Hyper-V设置USB直通的方法。
如果可以选择使用RDP(通过“ Hyper-V管理器”直接连接也可以):
在主机上
按Win + R键入gpedit.msc,然后按Enter
转到“计算机配置”>“管理模板”>“ Windows组件”>“远程桌面服务”>“远程桌面连接客户端”>“ RemoteFX USB设备重定向”
选择那里唯一的GPO并启用它,并将访问权限更改为“管理员和用户”
在VM上:
按Win + R键入gpedit.msc,然后按Enter键
转到“计算机配置”>“管理模板”>“ Windows组件”>“远程桌面服务”>“远程桌面会话主机”>“设备和资源重定向”
选择GPO“不允许支持的即插即用设备重定向”并将其禁用
重新启动两台计算机...
根据此评论,您可能需要强制更新组策略:
我必须强制更新组策略(gpupdate)使其生效。仅关闭并重新启动主机和虚拟机是不够的。谢谢
最终,执行完这些步骤(我运行gpupdate
并重新启动了两台计算机)后,我可以选择列出设备的另一选择,即“其他受支持的RemoteFX USB设备”,这是我的物理设备。勾选复选框后,VM便检测到了该设备,而无需进行端口转发。
这可能会导致安全风险,允许通过这种方式通过,但是我的VM不是公开的。仅可通过我的房东访问。 如果有人可以对安全隐患发表评论,以告知自己和这篇文章中可能遇到的其他人,我将不胜感激。