首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Debug Bridge (adb)设备-无权限

Android Debug Bridge (adb)设备-无权限
EN

Stack Overflow用户
提问于 2013-01-22 22:17:41
回答 19查看 179.4K关注 0票数 191

我在调试模式下连接HTC Wildfire A3333和我的Fedora Linux 17时遇到问题。Adb说:

代码语言:javascript
复制
./adb devices
List of devices attached 
????????????    no permissions

我的udev规则(第一条规则适用于三星,第二条规则适用于HTC,但不适用):

代码语言:javascript
复制
SUBSYSTEM=="usb",SYSFS{idVendor}=="04e8",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev" 
SUBSYSTEM=="usb",SYSFS{idVendor}=="0bb4",SYMLINK+="android_adb",MODE="0666",GROUP="plugdev"

对于三星设备来说,一切都很好:

代码语言:javascript
复制
 ./adb devices
List of devices attached 
00198a9422618e  device

我已经尝试了在一个类似的线程中给出的所有答案,但没有任何运气:Using HTC wildfire for android development

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2013-01-23 19:36:49

这个问题的原因与系统权限有关(感谢@IsaacCisneros的这个建议)。不知何故,HTC Wildfire (或许还有其他公司)需要从系统中获得比三星设备更多的东西。简单的解决方案是以根用户身份运行Eclipse,但是这对于像Fedora这样的非sudo Linux系统来说并不是很合适。

我已经找到了另一种方法来实现同样的目标,这似乎更友好的用户和更少的安全漏洞,而不是运行整个IDE的超级用户特权。请注意,这仍然只是问题的一种解决方法。系统根目录的使用应该最小化,仅限于管理任务,并且“adb”被设计为使用没有SUID的普通用户帐户。尽管SUID的正确设置是非常安全的,但每增加一次权限都是一个潜在的系统安全漏洞。

1.设置adb二进制文件的所有权(所有者-根,所有者组- 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,尽管您将使用普通用户帐户。您可以作为普通用户运行Eclipse,您的HTC应该会被正确发现。

代码语言:javascript
复制
./adb devices 
List of devices attached 
HT0BPPY15230    device 
票数 107
EN

Stack Overflow用户

发布于 2013-02-24 01:41:24

在Debian Wheezy的领导下,我也遇到了这个问题。我用sudo重新启动了adb守护进程:

代码语言:javascript
复制
sudo ./adb kill-server
sudo ./adb start-server
sudo ./adb devices

一切正常:)

票数 368
EN

Stack Overflow用户

发布于 2013-10-10 17:28:57

我也有类似的问题:

代码语言:javascript
复制
$ adb devices
List of devices attached 
4df15d6e02a55f15    device
????????????    no permissions

调查

如果我运行lsusb,我可以看到我连接了哪些设备,以及在哪里:

代码语言:javascript
复制
$ lsusb
...
Bus 002 Device 050: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone ...
Bus 002 Device 049: ID 18d1:4e42 Google Inc. 

这显示了我的三星Galaxy S3和我的Nexus7 (2012)已连接。

正在检查以下各项的权限:

代码语言:javascript
复制
$ 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

等。什么?这个"plugdev“组合是从哪里来的?

代码语言:javascript
复制
$ 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"

(我已经把这些行换行了)

请注意GROUP="plugdev"行。另请注意,这不适用于其他设备ID:

代码语言:javascript
复制
$ grep -Ri "4e42.*plugdev" .

(不返回任何内容)

修复它

好的。那么修复方法是什么呢?

添加规则

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

代码语言:javascript
复制
ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e42", ENV{ID_GPHOTO2}="1",
  ENV{GPHOTO2_DRIVER}="proprietary", ENV{ID_MEDIA_PLAYER}="1",
  MODE="0664", GROUP="plugdev"

这应该是一行代码,为了提高可读性,我把它包装在这里

重新启动udev

代码语言:javascript
复制
$ sudo udevadm control --reload-rules
$ sudo service udev restart

就这样

拔下/重新插入设备。

试试看

代码语言:javascript
复制
$ adb devices
List of devices attached 
4df15d6e02a55f15    device
015d2109ce67fa0c    device
票数 95
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14460656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档