Android联机调试时,解决no permissions的方法

昨天我在Linux系统下进行Android的联机调试时,把手机插上,发现eclipse的DDMS里的devices列表居然是一串“?????”的字符串,换了台机器也是如此。

一直专注在iOS开发上,现在需要开发一个Android+phonegap的应用,困难重重。

问了公司那些专业从事Android开发的员工,也没有解决问题。

于是只有google能帮我了,查了一堆的方法,看了很多的文章。终于在stackoverflow下找到了方案,我采用的是第二种永久的解决方案。我转过来并用中文叙述一下,希望能帮助到遇到类似问题的朋友。

 

原文如下:

原文地址:http://ptspts.blogspot.co.il/2011/10/how-to-fix-adb-no-permissions-error-on.html

在linux系统下进行Android调试时,运行adb devices命令会出现"???????  no permissions"等字样,本博客就是专门解决这个问题的。这个解决方案已经经过测试,并能再Ubuntu Lucid下工作,但也应该可以在其他Ubuntu等linux版本中类似问题。

官方帮助中心有很多起作用和不起作用的答案和建议。这个问题的根本就是在USB调试时,当前用户没有足够的权限去操作USB设备文件。

第一个解决方案如下:

  1.   sudo killall adb    //终端命令,杀掉所有运行的adb服务
  2.   断开设备
  3.   等几分钟后重新插上设备
  4.   sudo adb devices    //终端命令,于是adb取得最高权限

 

 

另外,这里有一个长期的解决方案

1. 创建一个文件android.rules,比如/tmp/android.rules。粘贴下面的内容到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"

2.执行以下命令:

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

3.断开设备,几分钟后重新连接设备

 

最后运行下面命令,就可以发现设别有权限进行访问了

adb devices

 

 

注意的地方:

  • 如果上面永久解决方案不起作用,那么可以尝试用USER="$LOGINNAME"来替代MODE="0666",$LOGINNAME是你的登陆用户名。你可以使用‘-nu‘命令来查看这个用户名。
  • 在Ubuntu Precise版本中,文件名应该改成70-android.rules。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。