【问题标题】:USB debugging on physical device within a virtual machine development environment虚拟机开发环境中物理设备上的 USB 调试
【发布时间】:2020-07-04 20:52:24
【问题描述】:

我在 Hyper-V 虚拟机 (Windows 10) 中设置了开发环境。使用 Visual Studio 2019 作为我的 Xamarin IDE(monodroid 项目)。 根据我的阅读,由于 Hyper-V 设计人员做出的决定,我的物理设备无法“通过”。 我也尝试过使用变通方法,不幸的是,设备没有出现在 Guest 机器中(即使在 Device Manager 中)。

我最初无法看到设备(在 IDE 中),但是,经过一些研究和工作,我设法让设备显示出来。我使用this 来“欺骗”在来宾上运行的adb 以查看设备(连接到我的物理机)。 主机使用 IP 192.168.1.13 在端口 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 在来宾中运行,物理设备不会位于 localhost:29301。我假设如果我可以让 IDE 连接到 192.168.0.13:29301(主机 IP),它会找到设备,因为它是连接的位置。

当我运行adb devices时,Host和Guest都显示物理设备,在尝试运行调试器后,运行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" 被执行。我认为操纵它会给我一些快乐,但是,我不知道如何。

我对@9​​87654340@ 和网络不太熟悉,所以任何对此问题有更多经验的人都可以对我的情况有所了解。

如何让调试器(在来宾中)连接到我的物理设备?

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

【问题讨论】:

  • @AlexP。谢谢你的评论。我相信adbportforward.jar 实用程序基本上可以按照您的回答在内部建议。如果我的假设有误,请纠正我

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


【解决方案1】:

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

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

在主机上

  1. 按 Win+R 输入 gpedit.msc 并回车

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

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

在虚拟机上:

  1. 按 Win+R 输入 gpedit.msc 并回车

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

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

重启两台机器...

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

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

最终,在执行了这些步骤之后(我运行了gpupdate 并重新启动了两台机器),我在列出的设备中多了一个选项,“其他支持的 RemoteFX USB 设备”,这就是我的物理设备。勾选复选框后,VM 检测到设备,无需端口转发。

这可能会导致安全风险,允许这样的直通,但是,我的 VM 不是公共的。只能通过我的主机访问。 如果安全人员能够评论可能的安全风险,我将不胜感激,只是为了通知我自己和遇到此帖子的潜在其他人。

【讨论】:

  • 完全如 user959631 所述。执行组策略更新,然后执行 gpupdate。然后使用 remotefx usb 的连接选项进行连接。对于通过 hyper-v 直接连接,您可能需要执行 windows-r 命令 "vmconnect /edit"
  • 即使您通过 RDP 连接到远程 PC,此解决方案也有效。
猜你喜欢
  • 2010-09-28
  • 2018-04-19
  • 2019-12-15
  • 2014-01-03
  • 2011-04-05
  • 2013-01-16
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多