我使用的是三星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

为什么?我错过了什么?


当前回答

重启udev时,关闭adb服务器,启动adb服务器,进入android sdk安装路径,在sudo上完成所有操作。然后运行adb设备即可解决权限问题。

其他回答

仅适用于Ubuntu/ Debian用户: 为了让ubuntu的USB调试工作正常进行,需要做一些具体的事情: 这里描述: https://developer.android.com/studio/run/device 下面是提到的两个步骤。在终端运行这两个命令:

sudo usermod -aG plugdev $LOGNAME
sudo apt-get install android-sdk-platform-tools-common

输入如下命令:

# cd to adb for sudo
cd `which adb | sed -e "s/adb//"`
adb kill-server
sudo ./adb start-server
./adb devices

This happens when you are not running adb server as root.  

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

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

请不要按照解决方案建议使用sudo (sudo adb start-server)!这运行adb作为根(管理员),它不应该像那样运行!!这是一个糟糕的解决方案!

任何以root身份运行的东西都可以在系统中做任何事情,如果它创建或修改一个文件,可以将其权限更改为仅供root使用。再次,不要!

正确的做法是设置你的系统,让用户有权限,看看我写的这个指南如何正确地做到这一点。

关于这个问题,有很多糟糕的答案,从坚持以根方式运行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。