解决 Ubuntu使用 ADB 设备权限问题:no permissions (missing udev rules?)

解决 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 系统的设备权限管理

  1. Android 设备连接电脑后,会被识别为一个 USB 设备
  2. Linux 系统默认对 USB 设备有严格的权限控制
  3. 当前用户缺少访问该 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

常见问题排查

  1. 规则文件权限错误 :确保执行了 chmod a+r 命令,否则 udev 无法读取规则
  2. 用户未加入 plugdev 组 :执行 groups $USER 查看当前用户组,若没有 plugdev,执行 sudo usermod -aG plugdev $USER 后重启电脑
  3. Vendor ID 填写错误 :重新执行 lsusb 确认设备的 Vendor ID,规则中必须完全匹配(区分大小写)
  4. ADB 服务未重启:修改规则后必须重启 ADB 服务,否则权限不会生效

总结

解决 ADB 设备权限问题的核心是 通过 udev 规则授予用户访问 USB 设备的权限,关键步骤如下:

  1. lsusb 获取设备的 Vendor ID(厂商 ID)
  2. /etc/udev/rules.d/ 下创建规则文件,配置设备权限
  3. 重启 udev 服务和 ADB 服务,验证设备连接状态
  4. 确保用户已加入 plugdev 组,规则文件权限正确

按照以上步骤操作后,即可正常使用 ADB 工具调试 Android 设备,无需每次都使用 sudo 权限运行 ADB 命令。

相关推荐
小毛驴8501 分钟前
Linux curl 命令用法
linux·运维·chrome
李斯啦果7 分钟前
【Linux】Linux目录配置
linux·运维·服务器
AI+程序员在路上9 分钟前
linux下线程中pthread_detach与pthread_join区别
linux·运维·服务器
代码游侠9 分钟前
C语言核心概念复习——C语言基础阶段
linux·开发语言·c++·学习
logocode_li10 分钟前
说透 Linux Shell:命令与语法的底层执行逻辑
linux·运维·ssh
CHENKONG_CK16 分钟前
晨控CK-LR08-E00与汇川H5U系列PLC配置MODBUSTCP通讯连接手册
linux·服务器·网络
LongQ30ZZ24 分钟前
Linux-基础IO
linux
来鸟 鸣间30 分钟前
Linux下3个so库之间的关系
linux·运维
AI_567838 分钟前
SQL性能优化全景指南:从量子执行计划到自适应索引的终极实践
数据库·人工智能·学习·adb
释怀不想释怀1 小时前
Linux文件上传(rz)和下载(sz)压缩(tar.gz)和解压(zip)
linux·运维·服务器