Android Debug Bridge(adb)设备 - 没有权限

Kri*_*her 187 linux debugging android adb

我在调试模式下将HTC Wildfire A3333与我的Fedora Linux连接时遇到问题.Adb说:

./adb devices
List of devices attached 
????????????    no permissions
Run Code Online (Sandbox Code Playgroud)

我的udev规则(三星的第一条规则很好,HTC的第二规则不是):

SUBSYSTEM=="usb",SYSFS{idVendor}=="04e8",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev" 
SUBSYSTEM=="usb",SYSFS{idVendor}=="0bb4",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)

对于三星设备一切都没问题:

 ./adb devices
List of devices attached 
00198a9422618e  device
Run Code Online (Sandbox Code Playgroud)

我一直在尝试用一个简单的线程给出的所有答案,不过运气:使用HTC野火进行android开发

Leo*_*eon 352

我自己在Debian Wheezy下遇到了这个问题.我用sudo重新启动了adb守护进程:

sudo ./adb kill-server
sudo ./adb start-server
sudo ./adb devices
Run Code Online (Sandbox Code Playgroud)

一切正常:)

  • 这是错误的答案。 (5认同)
  • 默认情况下,adb root访问权限让我感到困扰,特别是因为所有设备都不需要以root身份使用adb.为了简化操作,您可以创建一个bash脚本并使用sudo运行它 (4认同)
  • 谢谢,这指向了我正确的方向.想指出在我的系统上以root身份运行start-server就足够了.然后我以普通用户身份运行adb,它显示我的Ouya. (3认同)
  • 使用`sudo`你无论如何都以root身份运行`adb`(拥有超级用户权限)...... (2认同)

Kri*_*her 106

该问题的原因与系统权限有关(感谢@ IsaacCisneros提供此建议).不知何故,HTC Wildfire(以及其他人)需要的系统比三星设备更多.简单的解决方案是以root身份运行Eclipse,但对于像Fedora这样的非sudo Linux系统来说,这并不是很舒服.

我找到了另一种实现相同目标的方法,它似乎更加用户友好,并且安全性较低,然后以超级用户权限运行整个IDE.请注意,这仍然只是问题的解决方法.系统根使用率应仅最小化为管理任务,"adb"旨在与没有SUID的普通用户帐户一起使用.尽管SUID的正确设置非常安全,但每次增加权限都是潜在的系统安全漏洞.

1.设置adb二进制文件的所有权(所有者 - root,所有者组 - user_group):

chown root:user_group adb

2.使用SUID设置权限:

chmod 4550 adb

这应该会产生与此类似的东西(ls -llh):

-r-sr-x---. 1 root user_name 1.2M Jan 8 11:42 adb

之后,您将能够将adb作为root,event运行,尽管您将使用普通用户帐户.您可以作为普通用户运行Eclipse,并且应该正确发现HTC.

./adb devices 
List of devices attached 
HT0BPPY15230    device 
Run Code Online (Sandbox Code Playgroud)

  • 对不起,没有涉及魔法权限.除非有人告诉我_允许我们谈论,否则我不会相信. - 请参阅我的答案,了解如何真正调试问题.(然后你可以撤消这个"不安全"的suid hack.) (4认同)
  • 这是不正确的.没有设备要求ADB以root身份运行.相反,udev规则不正确. (3认同)

Rog*_*mbe 90

我有一个类似的问题:

$ adb devices
List of devices attached 
4df15d6e02a55f15    device
????????????    no permissions
Run Code Online (Sandbox Code Playgroud)

调查

如果我跑lsusb,我可以看到我连接的设备,以及:

$ lsusb
...
Bus 002 Device 050: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone ...
Bus 002 Device 049: ID 18d1:4e42 Google Inc. 
Run Code Online (Sandbox Code Playgroud)

这显示我的三星Galaxy S3和我的Nexus 7(2012)连接.

检查这些权限:

$ ls -l /dev/bus/usb/002/{049,050}
crw-rw-r--  1 root root    189, 176 Oct 10 10:09 /dev/bus/usb/002/049
crw-rw-r--+ 1 root plugdev 189, 177 Oct 10 10:12 /dev/bus/usb/002/050
Run Code Online (Sandbox Code Playgroud)

等待.什么?那个"plugdev"组来自哪里?

$ cd /lib/udev/rules.d/
$ grep -R "6860.*plugdev" .
./40-libgphoto2-2.rules:ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="6860", \
  ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
  ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"
./40-libgphoto2-2.rules:ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", \
  ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", \
  ENV{ID_MEDIA_PLAYER}="1", MODE="0664", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)

(我已经包裹了那些线)

注意这些GROUP="plugdev"线条.另请注意,这不适用于其他设备ID:

$ grep -Ri "4e42.*plugdev" .
Run Code Online (Sandbox Code Playgroud)

(没有返回)

解决它

好.那么修复是什么?

添加规则

创建/etc/udev/rules.d/99-adb.rules包含以下行的文件:

ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e42", ENV{ID_GPHOTO2}="1",
  ENV{GPHOTO2_DRIVER}="proprietary", ENV{ID_MEDIA_PLAYER}="1",
  MODE="0664", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)

这应该是一行,为了便于阅读,我把它包装在这里

重启udev

$ sudo udevadm control --reload-rules
$ sudo service udev restart
Run Code Online (Sandbox Code Playgroud)

而已

拔下/重新插入您的设备.

试试吧

$ adb devices
List of devices attached 
4df15d6e02a55f15    device
015d2109ce67fa0c    device
Run Code Online (Sandbox Code Playgroud)


Mic*_*ant 36

你的udev规则似乎错了.我用过这个并且它有效:

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)

(ATTR而不是SYSFS)

  • 这是真正的解决方案. (5认同)
  • +1因为这是谷歌建议的官方解决方案:http://developer.android.com/tools/device.html (4认同)

Cha*_*han 24

在ubuntu 12.04下,eclipse juno.我面临同样的问题.这就是我在易于博客上发现的

解决方案与Leon相同

sudo -s
adb kill-server
adb start-server
adb devices
Run Code Online (Sandbox Code Playgroud)


Bre*_*ust 23

斯蒂芬的答案有效(使用sudo adb kill-server),但这是暂时的.每次重启后都必须重新发布.

对于永久解决方案,必须修改udev配置:

Witrant的答案是正确的想法(从官方Android文档中复制).但它只是一个模板.如果这不适用于您的设备,则需要为您的设备填写正确的设备ID.

lsusb

Bus 001 Device 002: ID 05c6:9025 Qualcomm, Inc.
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
...
Run Code Online (Sandbox Code Playgroud)

在列表中找到您的Android设备.

然后使用ID的前半部分(4位数)作为idVendor(后半部分是idProduct,但没有必要让adb工作).

sudo vi /etc/udev/rules.d/51-android.rules 并为每个唯一的idVendor添加一条规则:

SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)

就这么简单.您不需要在某些答案中给出的所有其他字段.保存文件.

然后重启.这种变化是永久性的.(Roger显示了一种重启udev的方法,如果你不想重启).

  • 也为我工作过.谢谢.不需要完全重启 - 如上所述只需重新加载规则并重新启动udev (2认同)

Rob*_*mer 22

... 到目前为止,OP自己的答案是错误的,没有"特殊的系统权限". - "无权限"问题归结为......没有权限.

不幸的是,它不容易调试,因为adb使它成为它试图访问的设备的秘密!在Linux上,它尝试打开手机的"USB串行转换器"设备,例如/ dev/bus/usb/001/115(您的总线编号和设备地址会有所不同).这有时会链接并使用/ dev/android_adb.

lsusb将有助于找到公交车号码和设备地址.请注意,如果重新插入,设备地址将会发生变化,如果端口对使用的速度感到困惑(例如,一个物理端口最终在一个逻辑总线上或另一个逻辑总线上),则可能会发生总线编号.

lsusb-line看起来类似于:Bus 001 Device 115:ID 4321:fedc bla bla bla

lsusb -v 如果"bla bla bla"没有足够暗示(有时它既不包含制造商,也不包含手机型号),可能会帮助您找到设备.

一旦您了解该设备,请亲自检查ls -a /dev/bus/usb/001/115相关用户真正可以访问的设备!然后检查它是否有效chmod并修复你的udev设置.

PS1:/ dev/android_adb只能指向一个设备,因此请确保它能够满足您的需求.

PS2:与这个问题无关,但不太为人所知:adb有一个固定的供应商ID清单.这个列表可以从〜/ .android/adb_usb.ini扩展,它应该包含0x4321(如果我们按照上面的示例lsusb行). - 此处不需要,因为如果不知道供应商ID,您甚至不会获得"无权限".


Nut*_*ose 16

从手机上更改USB模式对我来说是个窍门.(我将其设置为文件传输)


Mik*_*keW 8

我会在这里附上此附言,以便在我之前的解释中不会丢失.

只需将USB连接类型从Camera(PTP)更改为Media device(MTP),我就可以可靠地生成并解决无权限问题.摄像头模式允许调试; 媒体模式导致ADB中的无权限响应.

经过一段时间的反思,这个推理似乎很明显.调试器可以在介质服务器模式下访问设备上的不安全内容.

===========

在您接受调试设备上的RSA加密警告之前,设备是不允许的.在连接后的某个时刻,设备将要求接受调试连接.它是一种最小的安全协议,可确保您可以在初始滑动锁定之外访问设备.我相信,需要启用开发者模式.

"无权限"标志实际上是adb将设备识别为有效调试目标的良好第一指示符.请注意,它不会列出您的其他USB设备.

以下和相关页面的详细信息.

http://developer.android.com/tools/device.html


小智 7

与Pipo S1S升级到4.2.2股票6月4日相同的问题.

$ adb devices
List of devices attached  
????????????    no permissions
Run Code Online (Sandbox Code Playgroud)

所有上述建议虽然有效,可以让您的USB设备得到认可,但并不能解决问题.(在Mint 15上运行的Android Debug Bridge版本1.0.31.)

更新android sdk工具等重置~/.android/adb_usb.ini.

要识别Pipo VendorID 0x2207,请执行以下步骤

添加到行 /etc/udev/rules.d/51-android.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="0x2207", MODE="0666", GROUP="plugdev"
Run Code Online (Sandbox Code Playgroud)

添加行到~/.android/adb_usb.ini:

0x2207
Run Code Online (Sandbox Code Playgroud)

然后删除adbkey文件

rm -f ~/.android/adbkey ~/.android/adbkey.pub
Run Code Online (Sandbox Code Playgroud)

并重新连接您的设备以使用正确的adb连接重建密钥文件.有些设备会要求重新授权.

sudo adb kill-server
sudo adb start-server   
adb devices
Run Code Online (Sandbox Code Playgroud)