为什么我的 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:~$
无论具体平台如何,在虚拟化环境中使用
adb
的简单方法是在主机上作为远程系统运行 adb server
并在来宾系统内运行 adb
客户端。请参阅我对另一个问题的回答。
虽然可以完全在客户系统内部运行服务器和客户端,但要可靠地做到这一点通常需要将整个 USB 控制器传递到客户系统中。
我做了一个解决方法来解决我的问题。它并不完美,但它有效。
禁用 USB 桥接到 VirtualBox 机器
在主机上安装平台工具并运行
adb devices
在设备屏幕上授权您的计算机
在虚拟机中建立一个tcp隧道,将本地端口5037重定向到主机5037端口:
ssh -L 5037:10.0.2.2:5037 localhost -N -f
我不会将此标记为正确答案,因为我的来宾 ADB 仍然看不到我的设备
当我将设备 USB 更改为仅充电模式时,它起作用了。
出现该问题的最可能原因是,当请求将设备重定向到虚拟机时,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 设备。