当前位置: 首页>>技术教程>>正文


android – 设置设备进行开发(????????????没有权限)

, , , ,

问题描述

我正在使用Samsung galaxy nexus手机(Android 4.0平台)。

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

  1. 在我的项目AndroidManifest.xml文件中,将android:debuggable="true"添加到<application>元素

  2. 在设备上的设置>已启用安全性未知来源

  3. 在设备上的设置>开发人员选项启用了USB调试

  4. 在我的计算机上,创建具有以下内容的/etc/udev/rules.d/51-android.rules文件:

    SUBSYSTEM=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="plugdev" 
    
  5. 在我的计算机上,运行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运行(不应被吹捧为唯一甚至推荐的解决方案)到解决完全不相关的问题。

这是一次同时考虑所有adbfastboot设备的权限的最短和最通用的方法:

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规则而言不是问题-它与具有adbfastboot接口的所有设备匹配,而与它们的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连接电话,在编译和运行项目时应将其检测到。

第八种方案

我遇到了同样的问题,解决方案与其他伙伴相同:(顺便说一下,您不必植根设备。)

  1. 键入”su”切换到超级用户。

  2. your-path /adb kill-server。

  3. your-path /adb start-server。

  4. 如果未发生错误,则可以在根帐户中看到带有“ your-path /adb设备”的设备列表。

  5. 退出超级用户。

  6. 现在,您可以在帐户中执行”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也有同样的问题。我的问题是idVendor04E8不是正确的值。要找到合适的手机,请将您的智能手机连接到计算机,然后在终端中运行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,一切正常!

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9892.html,未经允许,请勿转载。