虚拟机上的 adb 设备未列出设备

问题描述 投票:0回答:4

为什么我的 Android 手机没有被

adb devices
列出?

我按照https://developer.android.com/studio/run/device中描述的说明进行操作,但 ADB 仍然找不到我的设备。 我的用户已经是

plugdev
组的成员。我也尝试过终止并重新启动
adb
服务器。

我在 VirtualBox 机器上运行 Debian Stretch。 Debian 可以看到我的设备,但

adb
看不到。

eduardo@debian:~$ lsusb

Bus 001 Device 002: ID 1004:633e LG Electronics, Inc. GZ Android Phone [MTP mode]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub    
Bus 002 Device 002: ID 8oee:0021 VirtualBox USB Tablet    
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

eduardo@debian:~$ ls -l /etc/udev/rules.d/51-android.rules

-rw-r-r- 1 root root 4611 Sep 5 15:25 /etc/udev/rules.d/51-android.rules

eduardo@debian:~$ grep 1004 /etc/udev/rules.d/51-android.rules

SUBSYSTEM=="usb", ATTRfidVendor1=="1004", MODE="0666", GROUP="p1ugdev"

eduardo@debian:~$ adb devices

List of devices attached

eduardo@debian:~$
android linux adb virtualbox
4个回答
1
投票

无论具体平台如何,在虚拟化环境中使用

adb
的简单方法是在主机上作为远程系统运行
adb server
并在来宾系统内运行
adb
客户端。请参阅我对另一个问题的回答

虽然可以完全在客户系统内部运行服务器和客户端,但要可靠地做到这一点通常需要将整个 USB 控制器传递到客户系统中。


0
投票

我做了一个解决方法来解决我的问题。它并不完美,但它有效。

  1. 禁用 USB 桥接到 VirtualBox 机器

  2. 在主机上安装平台工具并运行

    adb devices

  3. 在设备屏幕上授权您的计算机

  4. 在虚拟机中建立一个tcp隧道,将本地端口5037重定向到主机5037端口:

    ssh -L 5037:10.0.2.2:5037 localhost -N -f

我不会将此标记为正确答案,因为我的来宾 ADB 仍然看不到我的设备


0
投票

当我将设备 USB 更改为仅充电模式时,它起作用了。

参考:https://askubuntu.com/a/632668


-1
投票

出现该问题的最可能原因是,当请求将设备重定向到虚拟机时,MTP 设备仍在使用。您没有指定您的主机操作系统,因此我将描述在 Linux 主机上验证这一点的步骤。

只需键入

lsof /dev/libmtp-{number}
(其中
{number}
是分配给设备的内核编号)即可列出具有设备文件打开文件描述符的进程。如果您有多个设备,您可以通过
cat /sys/bus/usb/devices/{number}/product
找到设备的名称。输出应显示设备正在使用中的指示(例如,在 gnome 环境中为
gvfsd-mtp
)。 (如果没有列出进程,那么您的问题似乎是一个错误,可能有多种原因。)

解决方案是删除该设备的所有用途。这可以通过简单地使用

kill {PID}
终止进程来完成,其中
{PID}
是从上一个
lsof
命令的输出中获取的进程 ID。 注意:仅在自己负责的情况下终止进程。但如果是 gvfsd-mtp(gnome 环境),您可以使用
gio mount -u /run/user/1000/gvfs/mtp\:host\={manufacturer}_{product}_{serial}
卸载 MTP 设备。

© www.soinside.com 2019 - 2024. All rights reserved.