adb devices命令无法正常工作

87
我正在运行Ubuntu 10.10 64位。我已经安装了ia32-libs和Android Debug Bridge版本1.0.26。
我的问题如下:
  1. adb devices >>> ???????????? 没有权限
  2. sudo adb devices >>>> sudo: adb: 找不到命令
  3. adb shell >>> 错误:设备权限不足
我猜这些都是相关的。以下是相关信息。
$ echo $PATH
/home/me/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/android-sdk-linux_x86/tools:/opt/android-sdk-linux_x86/platform-tools

$ which adb
/opt/android-sdk-linux_x86/platform-tools/adb

$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
????????????    no permissions

$ sudo adb devices
sudo: adb: command not found

$ adb shell
error: insufficient permissions for device

我使用运行CM6.1的已root Moto Droid和运行基于CM7的ROM的已root G-Tab得到了相同的结果。

我查看了以下相关帖子:

我尝试了大部分(不是全部)建议,但无法解决我的问题。我没有尝试的那些方法似乎不合适。如果您能提供一些更多的提示,我将不胜感激,并继续排除故障。

我没有尝试的一件事是编辑/etc/udev/rules.d/70-android.rules。那可能是问题吗?我看不出那会导致“sudo:adb:command not found”。也许我的问题并非都相关。无论如何,现在我认为我需要其他人的意见,因为我不认为我有路径问题或其他帖子中讨论的常见问题。

编辑:问题已解决,感谢EboMike和RivieraKid。这实际上是两个不同的问题:

  1. Item #2 above (sudo: adb: command not found) was solved by making a symlink as follows:

    $ sudo ln -s /opt/android-sdk-linux_x86/platform-tools/adb /usr/local/sbin/adb
    

    That allowed me to then do as EboMike suggested and use this solution. Doing that was required for my Moto Droid. (Running adb as sudo was not required for my Viewsonic G-Tablet, however.)

  2. My other two items were resolved by implementing the udev rule as RivieraKid suggested (from this link).


可能是Ubuntu:Android设备调试的重复问题。 - EboMike
项目#1 真的帮了我很多,不确定关于项目#2。 - Francisco Quintero
可能是为开发设置设备(??????无权限)的重复问题。 - Ciro Santilli OurBigBook.com
9个回答

87

我没有尝试的一件事是编辑/ etc / udev / rules.d / 70-android.rules。那有可能是问题所在吗?

你为什么不试一试呢?回答这个问题 - 是的!udev规则告诉Ubuntu您的设备是什么,并允许用户空间工具因此访问它。

如果您没有正确遵循 说明,您将无法使用adb。

然而,请记住,您没有说明您正在使用的Ubuntu版本,但我在10.10中遇到了问题 - 如果需要,让我知道是否需要发布我的规则文件内容。

不必担心通过sudo运行adb,您不需要它。 udev规则中的MODE="0666"允许您以任何用户身份访问设备。


编辑:

别忘了重新加载规则:

sudo udevadm control --reload-rules

编辑 #2:

正如 @Jesse Glick 正确指出的那样,如果 adb 已经在守护进程模式下运行,你还需要重新启动它才能使此方法生效:

sudo adb kill-server

我在这里使用了sudo,因为这将确保adb被杀死,并且这是官方支持的停止服务器的方法。下次使用adb时,它将自动重新启动,但这次使用正确的环境。


1
感谢您提供的链接。我不确定为什么错过了这些官方指南,以为人们只是通过一些变通方法来实现。我找到了我的Viewsonic GTablet的供应商代码,并添加了udev规则,现在它可以正常工作了!谢谢。 - MountainX
1
由于某些原因,我无法让Motorola Droid在adb设备中显示。现在我可以让GTab和模拟器出现,但不能让Droid出现。 - MountainX
1
如果之前adb守护进程正在运行,您需要重新启动它。 - Jesse Glick
大家好,有没有人能想到其他的阻止因素?我正在使用GT-I9305,并遵循以下规则:SUBSYSTEM=="usb",ATTR{idVendor}=="04e8",MODE="0666",GROUP="plugdev"。我已经按照这里的所有步骤进行了操作,确保我的用户在plugdev组中,重启了adb、udev并重新连接了设备...但在Ubuntu 14.04 64位系统中仍然没有权限。 - tomasb
顺带一提,我需要使用已启动 ClockworkMod 的手机,因为它的触摸屏不起作用,另一台三星手机完全正常,但启用了调试功能,现在我正在尝试使用 setprop persist.service.adb.enable 1 在损坏设备外启用 USB 调试......有什么建议吗? - tomasb
显示剩余12条评论

22
您需要以root身份重新启动adb服务器。请参见这里的相关内容。

希望你能看到这个。 (我不知道如何格式化注释以包括换行符。)adb在我的root用户的路径中。 我在原始帖子中粘贴了which adb命令。 路径为/opt/android-sdk-linux_x86/platform-tools/adb。 $ sudo -s root@desktop:# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/opt/android-sdk-linux_x86/tools:/opt/android-sdk-linux_x86/platform-tools - MountainX
1
这是一个奇怪的事情。我在以root身份运行或使用sudo运行时,从“which adb”获取到不同的结果。以下是输出: $ sudo which adb - MountainX
在以 root 权限运行 adb 时,请指定完整路径。 - EboMike
现在我一直从我的#1中看到了这个问题:$ sudo adb设备 连接的设备列表 ????????????没有权限 - MountainX
嘿,EboMike和RivieraKid,我需要将你们两个的回答都选为答案。不过我不确定是否可以选择两个答案。感谢你们的帮助! - MountainX
显示剩余5条评论

13
在我的 Gentoo/Funtoo Linux 系统上,我遇到了类似的问题: 我总是得不到正确的设备描述和权限不足的提示:
# sudo ./adb devices
List of devices attached 
????????????    no permissions
# ./adb usb
error: insufficient permissions for device

对我来说,谷歌的howto非常有帮助。在我的情况下,我需要添加udev规则:

# cat /etc/udev/rules.d/51-android.rules 
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev" 

并设置文件系统权限

# chmod a+r /etc/udev/rules.d/51-android.rules

重新插拔智能手机后,成功访问了手机,并出现在Eclipse的Android设备选择器中:

# sudo ./adb devices
List of devices attached 
3XXXXXXXXXXXXXC device
# sudo ./adb usb
restarting in USB mode

您还需要检查用户是否属于plugdev组。


3
每个我看到的回答都显示SUBSYSTEM=="usb"。然而,我的(或许是古老的)udev需要将其更改为DRIVER=="usb"。终于,我可以作为非root用户运行adb服务器...耶。
看一下udevmonitor --env的输出,然后查看输出。
udevinfo -a -p <DEVICE_PATH_AS_REPORTED_BY-udevmonitor>

如果您的计算机上不存在 udevmonitorudevinfo,请改用 udevadm monitorudevadm info -a -p ... - ash

2

以root身份重新启动adb服务器对我有用。请参考:

derek@zoe:~/Downloads$ adb sideload angler-ota-mtc20f-5a1e93e9.zip 
loading: 'angler-ota-mtc20f-5a1e93e9.zip'
error: insufficient permissions for device
derek@zoe:~/Downloads$ adb devices
List of devices attached
XXXXXXXXXXXXXXXX    no permissions

derek@zoe:~/Downloads$ adb kill-server
derek@zoe:~/Downloads$ sudo adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
derek@zoe:~/Downloads$ adb devices
List of devices attached
XXXXXXXXXXXXXXXX    sideload

我也是:Linux Mint Serena 18.1和HTC Sensation。新手警告:我已经折腾了两天,所以东西几乎肯定出了问题。 - Aethelbald

2
请注意,像IntelliJ IDEA这样的集成开发环境往往会启动它们自己的adb服务器。
即使手动杀死服务器并使用sudo运行新实例,在IDE自己杀死服务器之前都无法解决问题。

1

http://rootzwiki.com/topic/258-udev-rules-for-any-device-no-more-starting-adb-with-sudo/ - RzR

0

我的HTC One m7正在运行最新的Cyanogenmod 11。

手机通过USB连接并共享我的数据连接。

然后我得到了这个惊喜:

cinder@ultrabook:~/temp/htc_m7/2015-11-11$ adb shell
error: insufficient permissions for device

cinder@ultrabook:~/temp/htc_m7/2015-11-11$ adb devices
List of devices attached
????????????    no permissions

解决方案:在手机上关闭网络共享。
cinder@ultrabook:~/temp/htc_m7/2015-11-11$ adb devices
List of devices attached
HT36AW908858    device

-3

我刚遇到了同样的情况,恢复出厂设置对我很有效。


这肯定是一条注释吧? - Matthew Taylor
我的错。我想说的是,重置设备并清除数据对我很有效。 - Andrii Krokhin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接