设置开发设备(????????????无权限)

Lee*_*fin 274 linux ubuntu android adb fastboot

我正在使用三星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" 
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在我的计算机上,运行该chmod a+r /etc/udev/rules.d/51-android.rules命令

然后,在我的计算机上,我打开了一个终端并执行了adb devices命令,我得到了:

List of devices attached 
????????????    no permissions
Run Code Online (Sandbox Code Playgroud)

由于我没有看到我的设备,只能???????????? no permissions运行以下命令:

 adb kill-server
 adb start-server
 adb devices
Run Code Online (Sandbox Code Playgroud)

但我仍然得到:

List of devices attached 
????????????    no permissions
Run Code Online (Sandbox Code Playgroud)

为什么?我错过了什么?

War*_*ith 443

对我有用的是再次杀死并启动adb服务器.在linux上:sudo adb kill-server然后sudo adb start-server.然后它将检测几乎所有开箱即用的设备.

  • 如果您的udev权限设置正确,则不需要以root身份运行adb.请参阅下面的grebulons答案,或参考android文档:http://developer.android.com/tools/device.html (8认同)
  • 确保你的adb得到+ x` -rwxrwxr-x 1 martin martin 156K 2011-11-09 15:40 adb`.尝试直接移动到目录并通过"sudo ./adb devices"启动.如果你可以在没有sudo的情况下运行它,你应该可以用sudo运行它......我不确定你的问题是什么...... (7认同)
  • 命令是:`adb kill-server``sudo adb start-server`来检查:`adb devices` (6认同)
  • 一个重要的建议是断开USB电缆,所以你重置adb,连接电缆,它的工作原理.在我的情况下,当我连接电缆的过程中,它对我不起作用. (4认同)

gre*_*lon 342

没有为我工作,直到我终于找到了答案在这里: 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"
Run Code Online (Sandbox Code Playgroud)

运行以下命令:

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
Run Code Online (Sandbox Code Playgroud)

断开手机和计算机之间的USB电缆.

重新连接手机.

运行adb devices以确认现在它有权访问手机.

请注意,可以使用, USER="$LOGINNAME"而不是, MODE="0666".rules文件中替换$LOGINNAME您的登录名,即id -nu打印什么.

在某些情况下,可能需要为udev规则文件提供一个靠近末尾排序的名称,例如z51-android.rules.

  • 注意:对于Ubuntu Precise,根据这篇文章,文件名为"70-android.rules":http://esausilva.com/2010/05/13/setting-up-adbusb-drivers-for-android-devices-in- Linux的ubuntu的/.同样值得让我们知道你必须重新启动`udev`并杀死所有adb进程.像魅力一样工作! (7认同)
  • 这很有效但是,正如@luciana在另一个答案中指出的那样,如果重新启动服务器还不够,你可能需要调用`sudo udevadm control --reload-rules`来刷新udev规则. (4认同)
  • 这应该被标记为正确的答案,因为sudo-ing adb不应该是Linux的要求 (4认同)

ian*_*her 76

输入以下命令:

adb kill-server sudo ./adb start-server adb devices

问题是您没有以root身份运行adb服务器.

  • 虽然这个想法与接受的答案相同,但由于提供的例子,这个想法只对我有所帮助.谢谢 (4认同)
  • adb不应该以root身份运行.如果需要,则系统配置错误.不要在所有事情面前抛出"sudo",它具有巨大的安全隐患. (2认同)

Sab*_*med 52

尝试以上所有,没有工作..当我从MTP切换到相机(PTP)时终于工作了.

  • 对于那些想知道如何做的人......系统设置>存储>右上键:USB计算机连接>连接选择摄像机(PTP)而不是媒体设备(MTP) (3认同)
  • 伙计,我正在寻找两个小时的解决方案,这对ubuntu 16.04有用,谢谢 (3认同)

Ale*_* P. 30

有很多张贴到这个问题,从坚持跑坏的答案adbroot(这不应该被吹捧为唯一的,甚至推荐的解决方案),以解决完全无关的问题.

这里是一个最短和最普遍的食谱采取的所有权限的关怀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
Run Code Online (Sandbox Code Playgroud)

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

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

OP也没有告诉他手机上有哪个Android版本(又称ROM).该idVendor值在软件中设置,因此取决于ROM.因此,04E8他在原始规则中使用的价值仅适用于具有三星股票ROM的设备.但这不是此udev规则的问题- 它与所有设备匹配adbfastboot接口,无论其VendorID如何.


小智 16

在Archlinux中偶尔会发生这种情况.修复:

$ sudo -s
# adb kill-server
# adb start-server
Run Code Online (Sandbox Code Playgroud)


jag*_*aga 8

对于使用debian的用户,在Ubuntu下设置设备以创建文件"/etc/udev/rules.d/51-android.rules"的指南不起作用.我按照这里的指示.在此处放下相同内容以供参考.

以超级用户身份编辑此文件

sudo nano /lib/udev/rules.d/91-permissions.rules
Run Code Online (Sandbox Code Playgroud)

找到与此类似的文字

# usbfs-like devices 
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0664?
Run Code Online (Sandbox Code Playgroud)

然后将模式更改为0666,如下所示

# usbfs-like devices 
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0666?
Run Code Online (Sandbox Code Playgroud)

这允许adb工作,但是我们仍然需要设置设备以便识别它.我们需要以超级用户身份创建此文件,

sudo nano /lib/udev/rules.d/99-android.rules
Run Code Online (Sandbox Code Playgroud)

并输入

SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, ATTRS{idVendor}==”0bb4?, MODE=”0666?
Run Code Online (Sandbox Code Playgroud)

以上行是针对HTC的,请关注@ grebulon的帖子以获取完整列表.

保存文件,然后以超级用户身份重新启动udev

sudo /etc/init.d/udev restart
Run Code Online (Sandbox Code Playgroud)

通过USB连接手机,编译和运行项目时应检测到它.


小智 5

我有同样的问题,解决方案是同伴:(顺便说一下,你不必根设备.)

  1. 输入"su"切换到超级用户.
  2. your-path/adb kill-server.
  3. your-path/adb start-server.
  4. 如果没有发生错误,您可以在root帐户中看到带有"your-path/adb devices"的设备列表.
  5. 退出超级用户.
  6. 现在,您可以在帐户中执行"adb设备".

请享用.