我们在开发 Android app 时,调试是必不可少的,但原生模拟器的速度实在不敢恭维,最好是能连接真机调试。
连接真机后,我们使用 $ adb devices 查看已连接的设备,显示:
syawlaus@ubuntu:~$ adb devices
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
那么我们需要做一些设置。
首先设备打开开发者模式,并允许 USB 调试。
然后连接设备到电脑,在终端输入:
$ lsusb
这个命令的作用是,列出系统 USB 总线信息,以及全部连接到电脑的 USB 设备的信息。
终端会显示:

可以看到,lsusb 列出了我使用的 Nexus 4 设备,ID 18d1:4ee2 表示:
- 18d1 –
usb_device_descriptor.idVendor,设备供应商 ID - 4ee2 –
usb_device_descriptor.idProduct,具体的设备 ID
其它的信息,如 Bus 001 和 Device 002 等,详见 lsusb命令 - Linux命令大全。
接下来,在终端进入 /etc/udev/rules.d/ 目录,新建 51-android.rules 文件并加上以下内容:
# Google Nexus 4 18d1:4ee2
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
/etc/udev/rules/51-android.rules 这个文件的作用是,The rule specifies that a matching USB device should be created with permissions 0660, with group plugdev, and a symlink conveniently pointing to it.
保存并关闭文件,然后修改文件权限:
$ chmod a+r /etc/udev/rules.d/51-android.rules
其中 chmod 的参数:
a– 对全部用户有效r– 只读
最后重启 USB 和 adb 服务:
$ service udev restart
$ adb kill-server
再输入:
$ adb devices
如果列出设备,则说明连接成功。那么我们在 Android Studio 就可以使用真机调试程序了。:)

参考资料
- Linux下搭建Android开发环境及Android真机调试
- lsusb命令 - Linux命令大全
- Using Hardware Devices
- Linux udev 的原理、功能、使用和维护
- 使用 udev 高效、动态地管理 Linux 设备文件
- Android Debug Bridge
问题
/etc/udev/rules/51-android.rules这个文件有什么用?SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"这句是什么意思?为什么加上就可以了?adb kill-server、adb devices这两个命令是什么意思?