Android 学习之 - ubuntu 使用 Android 真机调试

我们在开发 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 001Device 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 就可以使用真机调试程序了。:)


参考资料


问题

  1. /etc/udev/rules/51-android.rules 这个文件有什么用?
  2. SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev" 这句是什么意思?为什么加上就可以了?
  3. adb kill-serveradb devices 这两个命令是什么意思?