解决 ADB 设备权限问题:no permissions (missing udev rules?)
问题描述
在 Linux 系统(Ubuntu/Debian 等)中使用 adb devices 命令查看已连接的 Android 设备时,终端输出如下错误信息:
bash
List of devices attached
0003001B0BA0020DB no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html]
这表明设备已被系统识别,但 ADB 没有足够的权限访问设备,导致无法正常进行调试操作。
问题原因
这个问题的核心原因是 Linux 系统的设备权限管理:
- Android 设备连接电脑后,会被识别为一个 USB 设备
- Linux 系统默认对 USB 设备有严格的权限控制
- 当前用户缺少访问该 Android 设备的权限,即使已加入
plugdev组也可能因为缺少具体的 udev 规则而无法访问
解决方案:配置 udev 规则授予权限
前置条件
- 已安装 ADB 工具(可通过
adb --version验证) - 已将用户加入
plugdev组(若未加入,执行sudo usermod -aG plugdev $USER,需重启生效) - Android 设备已开启开发者选项和 USB 调试模式
解决步骤(共 5 步)
步骤 1:查看设备的 Vendor ID 和 Product ID
首先需要获取连接设备的 USB 识别信息,执行以下命令:
bash
lsusb
终端会输出类似如下的设备列表,找到对应 Android 设备的条目(通常包含 "Android"、"Google"、"Huawei" 等品牌标识):
Bus 001 Device 010: ID 18d1:4ee7 Google Inc. Nexus 5
重点记录 ID 后面的两个数值:
- Vendor ID(厂商 ID):
18d1(示例值,你的设备可能不同) - Product ID(产品 ID):
4ee7(示例值,你的设备可能不同)
步骤 2:创建 udev 规则文件
在 /etc/udev/rules.d/ 目录下创建一个新的规则文件,文件名建议以 51-android.rules 命名(数字前缀确保规则优先加载):
bash
sudo touch /etc/udev/rules.d/51-android.rules
步骤 3:编辑 udev 规则文件
使用文本编辑器打开规则文件(以 vim 为例,也可使用 nano):
bash
sudo vim /etc/udev/rules.d/51-android.rules
在文件中添加以下内容(请将 Vendor ID 替换为你步骤 1 中获取的实际值):
bash
# 允许 plugdev 组用户访问 Android 设备
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee7", MODE="0666", GROUP="plugdev"
SUBSYSTEM=="usb":指定规则应用于 USB 设备ATTR{idVendor}=="18d1":匹配你的设备厂商 ID(必须替换为实际值)ATTR{idProduct}=="4ee7":匹配你的设备产品 ID(可选,不写则匹配该厂商所有设备)MODE="0666":授予读写权限(666 表示所有用户可读写)GROUP="plugdev":将设备归属到 plugdev 组
如果需要支持多个设备,可在文件中添加多行规则,每行对应一个设备的 Vendor ID 和 Product ID。
步骤 4:设置规则文件权限并重启 udev 服务
保存文件后,设置规则文件的正确权限(否则 udev 无法识别):
bash
sudo chmod a+r /etc/udev/rules.d/51-android.rules
重启 udev 服务使规则生效:
bash
sudo udevadm control --reload-rules
sudo udevadm trigger
步骤 5:重启 ADB 服务并验证
最后重启 ADB 服务,重新连接设备并验证:
bash
# 杀死当前 ADB 进程
adb kill-server
# 以管理员权限启动 ADB(仅首次需要)
sudo adb start-server
# 查看设备列表
adb devices
如果配置成功,终端会显示设备状态为 device:
bash
List of devices attached
0003001B0BA0020DB device
常见问题排查
- 规则文件权限错误 :确保执行了
chmod a+r命令,否则 udev 无法读取规则 - 用户未加入 plugdev 组 :执行
groups $USER查看当前用户组,若没有 plugdev,执行sudo usermod -aG plugdev $USER后重启电脑 - Vendor ID 填写错误 :重新执行
lsusb确认设备的 Vendor ID,规则中必须完全匹配(区分大小写) - ADB 服务未重启:修改规则后必须重启 ADB 服务,否则权限不会生效
总结
解决 ADB 设备权限问题的核心是 通过 udev 规则授予用户访问 USB 设备的权限,关键步骤如下:
- 用
lsusb获取设备的 Vendor ID(厂商 ID) - 在
/etc/udev/rules.d/下创建规则文件,配置设备权限 - 重启 udev 服务和 ADB 服务,验证设备连接状态
- 确保用户已加入 plugdev 组,规则文件权限正确
按照以上步骤操作后,即可正常使用 ADB 工具调试 Android 设备,无需每次都使用 sudo 权限运行 ADB 命令。