在Ubuntu开发环境中使用adb(Android Debug Bridge)连接Android设备或开发板时,经常遇到权限不足的提示,这是Linux系统USB设备访问控制的常见问题。本文将综合Android官方文档社区实践,提供一套完整、可靠的解决方案。

博主博客

一、问题现象

当您连接设备并运行adb devices时,可能会看到如下错误信息:

$ adb devices
List of devices attached
4a093191        no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html]

或者尝试进入adb shell时:

$ adb shell
adb: insufficient permissions for device: missing udev rules? user is in the plugdev group
See [http://developer.android.com/tools/device.html] for more information

这表明当前Linux系统没有为您的Android设备授予足够的USB访问权限。

二、问题原因

在Linux系统(如Ubuntu)中,访问USB设备需要相应的权限。adb要正常与设备通信,必须满足两个核心条件:

  1. 用户属于特定用户组:执行adb命令的用户需要属于plugdev组。
  2. 系统存在udev规则:需要为Android设备创建udev规则,告知系统当接入此类USB设备时,应将其所属组设为plugdev并赋予适当的权限。

三、解决方法

您可以按照以下步骤,从官方推荐到手动配置,系统地解决此问题。

步骤1:确保当前用户在plugdev组中

首先,检查您的用户是否已经属于plugdev组。

# 查看当前用户所属的组
$ id

在输出结果中查找是否存在plugdev。例如:46(plugdev)

  • 如果已经存在,请继续步骤2。
  • 如果不存在,需要将当前用户添加到plugdev组:
    $ sudo usermod -aG plugdev $LOGNAME
    
    重要:组变更在重新登录后才能生效。请注销当前用户重启系统,然后再次使用id命令确认。

步骤2:配置udev规则

这是解决问题的关键。有两种方法可以实现,推荐优先使用方法A。

方法 A:安装社区维护的规则包(官方推荐)
Ubuntu提供了一个包含常见Android设备udev规则的软件包,这是最简单、最安全的方法。

$ sudo apt-get install android-sdk-platform-tools-common

安装完成后,重新插拔您的设备。

方法 B:手动创建udev规则文件
如果方法A执行后问题依旧,或者您想了解其原理,可以手动创建规则文件。

  1. 使用sudo权限创建并编辑规则文件:
    $ sudo vim /etc/udev/rules.d/51-android.rules
    
  2. 在文件中添加以下内容:
    SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev", SYMLINK+="android%n"
    
    这条规则的含义是:对于所有USB子系统设备,将其用户组设置为plugdev,权限设置为0660(即属组内用户可读写),并创建一个以android开头的符号链接。
  3. 保存并退出编辑器。然后,重新加载udev规则并触发生效:
    $ sudo udevadm control --reload-rules
    $ sudo udevadm trigger
    
    或者,为了确保万无一失,也可以直接重新插拔USB线

步骤3:验证结果

完成上述任一方法后,再次运行adb命令验证。

# 重启adb服务器(可选,确保状态刷新)
$ adb kill-server
$ adb start-server

# 查看设备列表
$ adb devices

如果一切正常,您应该看到设备的状态变为device,而不再是no permissions

List of devices attached
4a093191        device

此时,运行adb shell也应能成功进入设备终端。

四、进阶内容:使用无线调试

对于Android 11及更高版本的设备,官方还提供了无线调试方式,可以有效规避USB连接带来的驱动和权限问题。您可以通过Android Studio的“Pair Devices Using Wi-Fi”功能,或使用adb pair命令行工具进行配对连接。具体步骤请参考官方文档的“使用 WLAN 连接到设备”部分。

参考文献