我使用的是三星galaxy nexus手机(Android 4.0平台)。

我正在开发Ubuntu linux操作系统上的Android应用程序。我想直接在三星手机设备上运行我的应用程序,所以我执行了以下设置步骤:

在我的项目AndroidManifest.xml文件中,添加android:debuggable="true"到<application>元素 在设备的“设置”中,>安全启用未知源 在设备上,在设置>开发人员选项中启用了USB调试 在我的电脑上,创建了/etc/udev/rules.d/51-android.rules文件,内容如下: 子系统=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="插件开发" 在我的电脑上,执行chmod a+r /etc/udev/rules.d/51-android.rules命令

然后,在我的电脑上,我打开一个终端,执行adb设备命令,我得到:

List of devices attached 
????????????    no permissions

因为我没有看到我的设备,但只有????????????没有权限,然后运行以下命令:

 adb kill-server
 adb start-server
 adb devices

但我还是有:

List of devices attached 
????????????    no permissions

为什么?我错过了什么?


当前回答

你不应该像其他答案建议的那样以root用户运行adb服务器。相反,如果你正在使用Arch Linux,请执行以下操作:

使用Pacman软件安装android-udev包 重新加载udev规则: # udevadm control——重新加载规则 将自己加入adbusers组,然后注销并登录: # usermod -aG adbusers $LOGNAME

来源:https://wiki.archlinux.org/index.php/android Configuring_adb

其他回答

没有拔掉

所有提供的答案都假设您能够拔下并重新连接USB线。在这种情况下,这是不可能的(例如,当你是远程的),你可以做下面的事情,基本上做建议的udev规则将在重新插入:

lsusb

找到你关心的设备,例如:

Bus 003 Device 005: ID 18d1:4ee4 Google Inc. Nexus

记下它所在的公交车号码,然后执行,例如003路公交车:

sudo chmod a+w /dev/bus/usb/003/*

显然,这可能比您想要的更宽松(可能有更多的设备连接,而不仅仅是这一个),但您可以理解。

在Archlinux中,这种情况偶尔会发生。解决办法:

$ sudo -s
# adb kill-server
# adb start-server

我尝试了上述的一些解决方案:

重启adb服务器 修改51-android.rules 把我自己加入adbusers组

它成功过一次。设备要求我授权PC,之后,一切正常。

问题是当我尝试在电脑重启后连接设备时,又出现了同样的问题。 为了克服现在这个问题,我不得不手动撤销设置->开发人员选项->USB调试授权,然后设备再次要求我授权PC,因此最终工作了。

还有一次,前面提到的撤销USB调试授权的解决方案不起作用,为了触发设备的身份验证,我不得不手动禁用/启用 设置->开发人员选项->USB调试

我使用的是ubuntu 20.04LTS。

我的Galaxy S3也遇到了同样的问题。 我的问题是idVendor值04E8不是正确的。 要找到正确的,请将智能手机连接到计算机,并在终端中运行lsusb。它会像这样列出你的智能手机:

Bus 002 Device 010: ID 18d1:d002 Google Inc.

所以正确的idVendor值是18d1。/etc/udev/rules.d/51-android.rules中的行必须是:

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

然后我运行sudo udevadm control—reload-rules,一切都工作了!

关于这个问题,有很多糟糕的答案,从坚持以根方式运行adb(不应该被吹捧为唯一的解决方案,甚至不应该被推荐)到解决完全不相关的问题。

下面是一个最简单、最通用的方法,可以同时处理所有adb和fastboot设备的权限:

echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:ff420?:*", MODE="0666"' | sudo tee /etc/udev/rules.d/99-android.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --verbose --action=add --subsystem-match=usb

或者你可以使用我发布的这个要点稍长的版本。

至于OP在他的问题中做错的具体事情——在编辑.rules文件后没有重新加载udev规则。

此外,OP也没有告诉他的手机上有哪个Android版本(又名ROM)。idVendor值是在软件中设置的,因此它取决于ROM。所以他在最初的规则中使用的04E8的值只适用于带有三星库存ROM的设备。但这对这个udev规则来说不是问题——它匹配所有具有adb或fastboot接口的设备,而不管它们的VendorID。