如何设置 udev 规则以使用 Android Studio 调试物理 android 设备?

How do I set up udev rules for debugging a physical android device with Android Studio?

过去我从来不需要设置它,但我今天将 Android Studio 更新到 2.3.1 版并在单击调试时出现此错误:

05/03 17:19:19: Launching app
$ adb push app-debug.apk {path on my computer}
com.android.ddmlib.AdbCommandRejectedException: insufficient permissions for device: verify udev rules.
See [http://developer.android.com/tools/device.html] for more information.
Error while Installing APK

我去了他们指定的页面,他们告诉我在那里制作文件 /etc/udev/rules.d/51-android.rules

所以我做了,添加了这一行:

SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666", GROUP="plugdev"

对于我的(华为)Nexus 6P。

我还按照他们的说明将 debug 部分添加到 build.grade

但是,我仍然遇到同样的错误。我尝试用我自己的 linux 用户组代替 plugdev,但这也没有解决问题。有什么建议么?

您可能没有添加正确的 ATTR{idVendor} 属性。为此,请执行以下操作:

$ sudo adb devices
List of devices attached
adb server is out of date.  killing...
* daemon started successfully *
XXXXyyyy    device
  1. 在 运行 adb devices 之后你会看到上面的输出。

  2. 复制 device 输出的前 4 个字节(因此,XXXX)。将 /etc/udev/rules.d/51-android.rules 中的那些替换为 ATTR{idVendor}=="XXXX" 并重新启动 udev.

正如下面的评论所指出的那样,上述方法可能不起作用;另一种选择是使用 lsusb 或 tail dmesg.

be aware that it might report different IDs, depending on the current USB mode of the device.

因此重要的是启用 USB 调试首先 ...

然后使用lsusb来获取供应商和产品ID ...

Bus 001 Device 070: ID 18d1:4ee7 Google Inc.

罪魁祸首可能是供应商 ID,其中 12d1 是华为 - 18d1 是 Google。

...无论 lsusb 输出到 udev 规则:

# angler (Nexus 6P)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee7", MODE="0600", OWNER="yourusername"

然后 运行:

sudo udevadm control --reload-rules