26

我正在尝试在 virtualbox 上的 Windows 7 虚拟机中使用适用于 android 的 mono(又名 monodroid),但我遇到了与手机的 adb 连接问题。当我运行“adb devices”来列出存在的设备时,它显示没有问题,但是当我尝试运行“adb install”、logcat 或 push 时它会挂起。目前virtualbox中有一个适用于此的错误,但我希望比我更有知识的人有一个解决方法。

https://www.virtualbox.org/ticket/6620

如果 Xamarin 发布了他们产品的 linux 端口或者我熟悉 Java,那么这将是一个问题,但我认为这些问题略有不同。

4

6 回答 6

32

Brian,您可能会考虑的一种解决方法是让您的 VM 主机也成为 ADB 主机。然后,您可以通过 TCP/IP 将您的 VM 客户端连接到它。这是该设置的总体思路:

  1. 在主机上安装 Android SDK。您应该只需要包含adb.
  2. 不要让您的 VM 客户端拥有 Android 设备的所有权,因此请禁用您拥有的任何 VirtualBox USB 过滤器规则,然后分离和重新连接设备也不会受到伤害。
  3. 从您的 VM 客户端,运行adb kill-server. 让它成为一个tskill adb确定的。如果您有任何正在运行的 Eclipse 实例,您需要先关闭这些实例,因为它实际上会adb在后台启动。不要跳过这一步。
  4. 从主机,执行adb devices. 如果一切顺利(并且应该),您将看到您的设备已列出。它应该看起来像这样(请注意端口号,并为损坏感到抱歉):

    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    List of devices attached
    015d2994ed200409    device
    

此时,您的主机应该在端口 5037 上运行 ADB 服务器。您可以通过运行从 VM 客户端检查这一点telnet 10.0.2.2 5037,其中10.0.2.2是 VirtualBox 主机的默认 IP,并且5037是上面提到的默认 ADB 端口。

  1. 现在您必须将端口从您的主机转发到您的 VM 客户端,或者将 ADB 直接连接到您的主机 IP:port。如果您像我一样,您会发现 ADBHOST 和 ANDROID_ADB_SERVER_PORT 变量的文档记录很差,而且很容易搞砸。出于这个原因,考虑从 VM 客户端进行简单的端口转发ssh(可能通过 Cygwin):

    autossh -nNL5037:localhost:5037 -oExitOnForwardFailure=yes 10.0.2.2
    
  2. 最后,adb devices从您的 VM 客户端运行。如果您看到“守护程序未运行”,则意味着您的端口转发被搞砸了。否则,您应该会看到您的设备并能够整天登录。值得注意的一点是,您的 VM 客户端上不会adb运行守护程序,当然,除非您实际使用调试桥接器。

我使用了类似的机制来调试通过网络连接到远程机器的设备,并且效果很好。

于 2012-09-24T01:33:35.920 回答
15

不确定自问题发布以来 VirtualBox 发生了什么变化,但从 VirtualBox 菜单Devices -> USB -> DeviceName中选择 USB 设备可以无缝工作。我正在使用 VirtualBox 5.1.2 r108956。

于 2017-03-18T11:18:48.600 回答
7

我也遇到了在 VM 上运行 ADB 的问题。我有一个 Windows 10 主机和一个 Ubuntu 14.04 客户端。该autossh方法对我不起作用。我从另一个StackOverflow 问题中找到了一个更简单的解决方案。它要求您的 PC 和您的设备都在同一个 WiFi 网络上。

  1. 在您的 VM 客户端上运行以下命令:adb tcpip 5555

    设备将与 VM 断开连接,因为 ADB 现在处于 TCP 模式而不是 USB。

  2. 对于下一部分,您需要设备的 IP 地址。要找到它,只需运行adb shell ip -f inet addr show wlan0

  3. 现在您可以连接到您的设备了。在您的 VM 客户端上,运行:

    adb connect <Device IP>:5555

从这里开始,我所有的 adb shell、logcat 和 monkey 会话都可以不间断地运行!

于 2019-01-25T01:43:25.513 回答
6

我在这里为与我的设置类似的人发布此信息:

  • 主机操作系统:OSX (10.15.4 Catalina)
  • 客户端操作系统:Windows 10 企业版(v1903 build 18362.752)
  • VirtualBox v6.1.4
  • 安卓工作室 v3.6.2

要允许客户端操作系统 (Windows) 中的 Android Studio 通过 USB 连接到 Android 手机(使用 adb):

  1. 更新到最新版本的 VirtualBox(当前为 6.1.4)
  2. 从这里安装 VirtualBox 扩展包
  3. 关闭VM,转到设置 > 端口 > USB 并确保 USB 3.0 (xHCI) 控制器已启用,然后单击“确定”
  4. 主机操作系统(即 OSX)打开一个终端并启动adb并通过运行确认手机已连接adb devices
  5. 启动 VM,然后从 VirtualBox 菜单中选择 Devices > USB > [YOUR PHONE] 将主机操作系统 USB 端口连接到 VM
  6. 在客户端操作系统 (Windows) 上打开终端并运行adb devices以确认 adb 服务器正在运行并且可以找到您的手机。您可能需要将 Android 平台工具添加到您的 PATH(我的路径是 C:\Users\Username\AppData\Local\Android\Sdk\platform-tools)。这一步可能是可选的——我怀疑 Android Studio 可能会adb自行启动。
  7. 在客户端操作系统 (Windows) 中启动 Android Studio,然后转到文件 > 设置 > 外观和行为 > 系统设置 > Android SDK > SDK 工具并确保已安装 Google USB 驱动程序(请参见此处的屏幕截图

完成这些操作后,Android Studio 能够检测到我的手机并使用该设备运行/调试应用程序。

希望这可以帮助!

于 2020-04-07T21:40:23.260 回答
3

我遇到了同样的问题,这让我搜索了大约 2 个小时。我尝试了几种方法,包括上述所有解决方案,但都没有奏效

我的情况

我的主机是archlinux,来宾是windows 8.1我在windows中运行flash builder但是usb调试不起作用而且我连接的设备是nexus 5所以我按照这些步骤

  1. 从 virtualbox 菜单 Machine-->settings-->usb 启用 USB 控制器并启用 USB 2.0 (EHCI) 控制器然后添加您的设备(单击右侧的 + 按钮)然后启动您的虚拟机
  2. 现在你应该从这里下载最新的 google usb 驱动并解压
  3. 转到控制面板设备管理器右键单击您的设备转到驱动程序选项卡并单击更新驱动程序应该有两个选项一个自动搜索...另一个浏览我的计算机选择第二个并提供提取的文件路径(检查包含子文件夹选项)在此之后,您的设备应被 Windows 识别,并且您的 android 设备中将显示一条消息,允许访问您的设备

在我的情况下,我也应该将驱动程序复制到 flashbuilder android 驱动程序路径,但对于您的情况,这可能不是必需的

于 2014-04-10T19:03:22.723 回答
2

我对 VirtualBox 5.0.14 有同样的问题,Stephen Niedzielski 提供的解决方案对我不起作用。如果有人仍然感兴趣,可以尝试这个解决方案。

我的环境是:

  • 主机操作系统:Mac OS 10.11
  • VirtualBox 中的客户操作系统:Ubuntu 14.04
  • 设备:运行 Cyanomodgen 12.1 的 Galaxy S5

在主机操作系统中启动一个 wifi 热点并在那里连接 android 设备,或者在路由器中连接两者。在 virtualbox 中,将访客操作系统的网络模式设置为“桥接适配器”,然后选择 Wifi 适配器的名称。这样主机操作系统和安卓设备就在同一个网络中。

然后,在 android 设备中激活“开发者模式”并启用由 Cyanomodgen 提供的“ADB over network”。(对于具有原始版本的 android 的设备,如果可能,谷歌如何通过网络使用 ADV)在主机操作系统中运行“adb kill-server”并确保没有 ADB 实例正在运行。然后运行命令'adb connect 192.168.2.12',android设备的ip。

恭喜 :) 现在您可以将 ADB 与 android 设备一起使用来获取 logcat 或拉取和推送文件。

于 2016-03-16T11:33:22.767 回答