Ubuntu adb 找不到设备的解决方法

本文介绍了解决Android设备通过USB连接到PC时出现ADB无权限问题的方法。包括查找设备ID、配置udev规则文件以及重启ADB服务等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:http://blog.youkuaiyun.com/lincyang/article/details/9093239

附加参考:http://developer.android.com/tools/device.html#setting-up


附加Tip::

1.多插拔几次usb线

2.如果不是usb2.0接口,换成usb2.0接口不容易出问题

3.确定线是带usb的线而不是只能充电的线

问题描述与背景:

新来个测试手机,连接PC后adb devices下无设备。或者是如下的no permissions:

$ adb devices
List of devices attached 
????????????    no permissions

已经在手机端打开USB调试(Android4.0,设置—开发人员选项--选中USB调试),USB连接没有问题,可以打开手机的存储设备。

下面是解决的方法,主要参考网络。

1、lsusb找到设备ID

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. lsusb  
  2. Bus 001 Device 013: ID 1ebf:7028  

1ebf是idVendor,7028是idProduct

2、注册到udev的rules文件:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. vim  /etc/udev/rules.d/51-android.rules  
  2. 添加这个ID:1ebf,如下:  
  3. SUBSYSTEM=="usb", ATTR{idVendor}=="1ebf", MODE="0666"  
  4. 保存文件并运行:  
  5. sudo chmod a+rx /etc/udev/rules.d/51-android.rules  
  6. sudo /etc/init.d/udev restart  
  7. 运行结果如下:  
  8. Rather than invoking init scripts through /etc/init.d, use the service(8)  
  9. utility, e.g. service udev restart  
  10. Since the script you are attempting to invoke has been converted to an  
  11. Upstart job, you may also use the stop(8) and then start(8) utilities,  
  12. e.g. stop udev ; start udev. The restart(8) utility is also available.  
  13. udev stop/waiting  
  14. udev start/running, process 14636  

如果想添加的更详细,也可以这样:SUBSYSTEM=="usb", ATTRS{idVendor}=="1ebf", ATTRS{idProduct}=="7028",MODE="0666"

3、启动adb的服务

    这个网上的经验是在adb工具的目录下执行,我是按照做的,成功。
[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. cd ~/program/Android/sdk/platform-tools  
  2. sudo ./adb  kill-server  
  3. sudo ./adb  start-server  
这样就可以了,请尝试调试的乐趣吧。
Tips:

查看当前使用的adb:which adb


后记

家里的Fedora14也遇到这个问题,adb shell时报错为error: insufficient permissions for device。

也会用同样的办法解决,只是两个系统略有些区别而已。

在Fedora中用sudo来编辑51-android.rules文件竟然没有权限被拒绝了,只好直接用root来做了。命令如下所示。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. [root@localhost etc]# vim udev/rules.d/51-android.rules  
  2. [root@localhost etc]# chmod a+rx udev/rules.d/51-android.rules   
  3. [root@localhost etc]# ./init.d/udev-post restart  
  4. Usage: ./init.d/udev-post {start|stop|reload}  
  5. [root@localhost etc]# udevadm control --reload-rule  
  6. [root@localhost etc]# ./init.d/udev-post reload  
  7. Retrigger failed udev events                               [  OK  ]  


后记2

如果上述都已经做完,那么直接运行adb devices还是有问题。

只需要重新拔掉你设备的usb,重新连接就可以了!

后记3

来此source.android.com详尽的usb列表:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. # adb protocol on passion (Nexus One)  
  2. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"  
  3. # fastboot protocol on passion (Nexus One)  
  4. SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"  
  5. # adb protocol on crespo/crespo4g (Nexus S)  
  6. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"  
  7. # fastboot protocol on crespo/crespo4g (Nexus S)  
  8. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"  
  9. # adb protocol on stingray/wingray (Xoom)  
  10. SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"  
  11. # fastboot protocol on stingray/wingray (Xoom)  
  12. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"  
  13. # adb protocol on maguro/toro (Galaxy Nexus)  
  14. SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"  
  15. # fastboot protocol on maguro/toro (Galaxy Nexus)  
  16. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"  
  17. # adb protocol on panda (PandaBoard)  
  18. SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"  
  19. # adb protocol on panda (PandaBoard ES)  
  20. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username>"  
  21. # fastboot protocol on panda (PandaBoard)  
  22. SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"  
  23. # usbboot protocol on panda (PandaBoard)  
  24. SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"  
  25. # usbboot protocol on panda (PandaBoard ES)  
  26. SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"  
  27. # adb protocol on grouper/tilapia (Nexus 7)  
  28. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"  
  29. # fastboot protocol on grouper/tilapia (Nexus 7)  
  30. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"  
  31. # adb protocol on manta (Nexus 10)  
  32. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"  
  33. # fastboot protocol on manta (Nexus 10)  
  34. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"  

后记4:

51-android.rules是个随便起的名字,改为android.rules也是可以的!

如果仍有问题,请继续参考后记2.


### 解决方案 在 Ubuntu 系统中使用 ADB Shell 时遇到无法设备的问题,通常是由驱动程序配置不正确或权限不足引起的。以下是可能的原因以及解决方案: #### 可能原因及对应解决方法 1. **USB 驱动未正确安装** 如果 USB 设备未被识别,则可能是由于缺少必要的 udev 规则文件所致。可以通过创建自定义的udev规则来解决问题[^2]。 创建一个新的 udev 文件 `/etc/udev/rules.d/51-android.rules` 并添加以下内容: ```bash SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", MODE="0666", GROUP="plugdev" ``` 将 `xxxx` 替换为您的 Android 设备厂商 ID (可通过命令 `lsusb` 查)。之后重新加载 udev 规则并重启服务: ```bash sudo service udev reload ``` 2. **ADB 权限问题** 默认情况下,某些 Linux 发行版可能会阻止非特权用户访问 USB 设备。可以尝试通过更改目录权限的方式解决此问题: ```bash sudo chmod -R 777 /dev/bus/usb/ ``` 此外,在运行 ADB 命令之前,请确保已启动 ADB 服务器: ```bash adb kill-server && adb start-server ``` 3. **目标平台版本兼容性** 若您正在构建特定的目标环境(如 Android 1.5),而当前使用的 SDK 或 NDK 版本较新,则可能导致不兼容的情况发生。建议验证所选工具链是否支持该版本的操作系统[^1]。 4. **调试模式启用状态** 确认连接到计算机上的手机已经打开了开发者选项中的“USB 调试”。如果尚未开启,请进入设置菜单手动激活它。 5. **网络共享方式下的虚拟机部署场景处理** 对于那些利用 VirtualBox 或 VMware 运行 guest OS 的情况来说,还需要额外注意主机与客户操作系统之间的端口映射关系调整[^3]。 以上措施应该能够有效缓解大多数关于不到安卓物理装置的情形;但如果依旧存在困难的话,则需进一步排查具体错误日志信息以便定位根本源头所在。 ```python import os os.system('adb devices') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值