问题描述
我正在使用Samsung galaxy nexus手机(Android 4.0平台)。
我正在Ubuntu Linux操作系统上开发Android应用程序。我想直接在三星手持设备上运行我的应用程序,因此我执行了以下设置步骤:
-
在我的项目
AndroidManifest.xml
文件中,将android:debuggable="true"
添加到<application>
元素 -
在设备上的设置>已启用安全性未知来源
-
在设备上的设置>开发人员选项启用了USB调试
-
在我的计算机上,创建具有以下内容的
/etc/udev/rules.d/51-android.rules
文件:SUBSYSTEM=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="plugdev"
-
在我的计算机上,运行
chmod a+r /etc/udev/rules.d/51-android.rules
命令
然后,在我的计算机上,打开一个终端并执行adb devices
命令,我得到:
List of devices attached
???????????? no permissions
由于我没有看到设备,只有???????????? no permissions
,所以我运行以下命令:
adb kill-server
adb start-server
adb devices
但是我仍然得到:
List of devices attached
???????????? no permissions
为什么?我想念什么?
最佳方案
对我有用的是再次杀死并启动adb服务器。在Linux上:sudo adb kill-server
然后sudo adb start-server
。然后它将检测出几乎所有开箱即用的设备。
次佳方案
在我终于在这里找到答案之前,对我没有任何帮助:http://ptspts.blogspot.co.il/2011/10/how-to-fix-adb-no-permissions-error-on.html
我在这里复制文本,以防将来消失。
使用以下内容创建一个名为/tmp/android.rules的文件(十六进制供应商编号来自供应商列表页面):
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="413c", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0489", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2116", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2080", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2257", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d4d", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1f53", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04dd", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1bbb", MODE="0666"
运行以下命令:
sudo cp /tmp/android.rules /etc/udev/rules.d/51-android.rules
sudo chmod 644 /etc/udev/rules.d/51-android.rules
sudo chown root. /etc/udev/rules.d/51-android.rules
sudo service udev restart
sudo killall adb
断开手机和计算机之间的USB电缆。
重新连接手机。
运行adb devices
以确认现在它具有访问电话的权限。
请注意,可以在.rules文件中使用USER = “$LOGINNAME”而不是MODE = “0666”,用$ LOGINNAME代替您的登录名,即id -nu打印的内容。
在某些情况下,可能有必要给udev规则文件一个名称,该名称的结尾位置应很接近,例如z51-android.rules
。
第三种方案
输入以下命令:
adb kill-server
sudo ./adb start-server
adb devices
问题是您没有以root用户身份运行adb服务器。
第四种方案
经过以上所有尝试,当我将连接从MTP切换到Camera(PTP)时,没有任何效果。
第五种方案
这个问题有很多不好的答案,从坚持将adb
作为root
运行(不应被吹捧为唯一甚至推荐的解决方案)到解决完全不相关的问题。
这是一次同时考虑所有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
或者,您可以使用我发布到此gist的稍长版本。
至于OP在他的问题中做错的具体事情-在编辑.rules
文件后没有重新加载udev
规则。
OP也没有告诉他手机上有哪个Android版本(又名ROM)。 idVendor
值在软件中设置,因此取决于ROM。因此,他在原始规则中使用的04E8
值仅适用于带有Samsung stock ROM的设备。但这对于此udev
规则而言不是问题-它与具有adb
或fastboot
接口的所有设备匹配,而与它们的VendorID无关。
第六种方案
在Archlinux中,这种情况可能偶尔发生。解决方法:
$ sudo -s
# adb kill-server
# adb start-server
第七种方案
对于使用debian的用户,在Ubuntu下设置设备以创建文件“ /etc/udev/rules.d/51-android.rules”的指南不起作用。我遵循了here的指示。在这里放下相同的以供参考。
以超级用户身份编辑此文件
sudo nano /lib/udev/rules.d/91-permissions.rules
查找与此类似的文字
# usbfs-like devices
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0664″
然后将模式更改为0666,如下所示
# usbfs-like devices
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0666″
这样可以使adb正常工作,但是我们仍然需要设置设备以便可以识别它。我们需要以超级用户身份创建此文件,
sudo nano /lib/udev/rules.d/99-android.rules
然后输入
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, ATTRS{idVendor}==”0bb4″, MODE=”0666″
上一行是针对HTC的,请按照@grebulon的帖子获取完整列表。
保存文件,然后以超级用户身份重新启动udev
sudo /etc/init.d/udev restart
通过USB连接电话,在编译和运行项目时应将其检测到。
第八种方案
我遇到了同样的问题,解决方案与其他伙伴相同:(顺便说一下,您不必植根设备。)
-
键入”su”切换到超级用户。
-
your-path /adb kill-server。
-
your-path /adb start-server。
-
如果未发生错误,则可以在根帐户中看到带有“ your-path /adb设备”的设备列表。
-
退出超级用户。
-
现在,您可以在帐户中执行”adb devices”。
请享用。
第九种方案
我知道这可能会晚一点,但是这是一篇有关如何手动添加Android ADB USB驱动程序的很好的文章。 Manually adding Android ADB USB driver in Ubuntu 14.04 LTS
编辑以添加链接内容
Steps
注意:请确保您已在USB调试模式下连接Android设备
打开终端(CTRL + ALT + T
)并输入命令:lsusb
现在您可能会收到类似的回复:Bus 002 Device 013: ID 283b:1024
注意:参考此Bus 002 Device 008: ID 283b:1024
{idVendor}==”283b”
{idProduct}==”1024″
现在输入以下命令:sudo gedit /etc/udev/rules.d/51-android.rules
这将创建android规则文件(51-android.rules
)或在指定位置(/etc/udev/rules.d
)打开现有的规则文件。
在此文件中添加新行:SUBSYSTEM==”usb”, ATTRS{idVendor}==”283b”, ATTRS{idProduct}==”1024″, MODE=”0666″
注意编辑idVendor
& idProduct
值和您的设备值。保存并关闭。
现在输入以下命令:sudo chmod a+rx /etc/udev/rules.d/51-android.rules
-授予读取/执行权限sudo service udev restart
-重新启动udev
服务
现在我们必须将idVendor
添加到adb_usb.ini
。输入以下命令:cd ~/.android
gedit adb_usb.ini
添加以下值0x283b
这不过是0x(idVendor
值)。因此,将其替换为。尊重您的设备价值保存并关闭文件。
现在输入以下命令:sudo service udev restart
拔出Android设备,然后重新连接。现在输入以下命令:adb kill-server
adb devices
你去!您的设备必须列出。
从Manually adding Android ADB USB driver in Ubuntu 14.04 LTS复制
为我工作。
第十种方案
我的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
,一切正常!