`

adb shell 无法启动 (insufficient permissions for device

 
阅读更多
环境:Ubuntu 10.04 LTS ,Ophone SDK
关键字:insufficient permissions for device

出现如下错误信息:
shily@hh-desktop:~$adb shell
error: insufficient permissions for device
shily@hh-desktop:~$ adb devices
List of devices attached
????????????    no permissions

[请直接阅读下面的更新部分]
不知为何,现在连接到开发机器上的时候出现如上的错误信息,一直提示权限不正确。
暂的解决办法是使用root权限来启动adb server
shily@hh-desktop:~$ sudo -s
[sudo] password for shily:
root@hh-desktop:~# adb kill-server ; adb start-server
* daemon not running. starting it now *
* daemon started successfully *
root@hh-desktop:~# exit
exit
shily@hh-desktop:~$
再次执行adb shell就可以了。

可是这样也不是办法,因为这个错误太频繁了,在开发的过程中,很容易执行adb kill-server,然后再切换到root启动adb start-server太不方便。

这个时候就是setuid起作用的时候了。
转到adb所在的目录
shily@hh-desktop:~$cd ~/sdk/android-sdk_eng.sdk_linux-x86/tools
shily@hh-desktop:~/sdk/android-sdk_eng.sdk_linux-x86/tools$ ls -l adb
-rwxr-xr-x 1 shily shily  341694 2010-05-11 05:46 adb
shily@hh-desktop:~/sdk/android-sdk_eng.sdk_linux-x86/tools$ sudo chown root:root adb
[sudo] password for shily:
shily@hh-desktop:~/sdk/android-sdk_eng.sdk_linux-x86/tools$ ls -l adb
-rwxr-xr-x 1 root root   341694 2010-05-11 05:46 adb
shily@hh-desktop:~/sdk/android-sdk_eng.sdk_linux-x86/tools$ sudo chmod u+s adb
shily@hh-desktop:~/sdk/android-sdk_eng.sdk_linux-x86/tools$ ls -l adb
-rwsr-xr-x 1 root root   341694 2010-05-11 05:46 adb
shily@hh-desktop:~/sdk/android-sdk_eng.sdk_linux-x86/tools$
这样无论哪个用户启动adb 使用的都是root权限,就不会提示权限不足的错误了。

=========================
在使用的过程中发现adb pull下来的文件属主权限为root:root,所以修改起来不方便。但是我不经常下载文件修改,也就忍了。

2010-06-21 重要更新

读sdk帮助文档的时候,发现sdk已经提供了说明。使用这种方式就可以避免adb pull下来的文件权限为root。
详见:docs/guide/developing/device.html

If you're developing on Ubuntu Linux, you need to add a rules file that contains a USB configuration for each type of device you want to use for development. Each device manufacturer uses a different vendor ID. The example rules files below show how to add an entry for a single vendor ID (the HTC vendor ID). In order to support more devices, you will need additional lines of the same format that provide a different value for the SYSFS{idVendor} property. For other IDs, see the table of USB Vendor IDs, below.

    Log in as root and create this file: /etc/udev/rules.d/51-android.rules.

    For Gusty/Hardy, edit the file to read: [注:ubuntu 7.10及以后版本]
    SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

    For Dapper, edit the file to read:  [注:ubuntu 6.06及以前版本]
    SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"
    Now execute:
    chmod a+r /etc/udev/rules.d/51-android.rules

只要按照说明在/etc/udev/rules.d/目录下创建51-android.rules,把其中的0bb4修改为相应的USB,供应商ID信息即可。
比如我的手机是motorola,idVender是22b8
那么这一行就是
SUBSYSTEM=="usb", SYSFS{idVendor}=="22b8", MODE="0666"
不过,你可以写多行,以使用各种设备。比如我就写了所有的,我的文件如下:
#Acer      0502
SUBSYSTEM=="usb", SYSFS{idVendor}=="0502", MODE="0666"
#Dell     413c
SUBSYSTEM=="usb", SYSFS{idVendor}=="413c", MODE="0666"
#Foxconn     0489
SUBSYSTEM=="usb", SYSFS{idVendor}=="0489", MODE="0666"
#Garmin-Asus     091E
SUBSYSTEM=="usb", SYSFS{idVendor}=="091e", MODE="0666"
#HTC     0bb4
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
#Huawei     12d1
SUBSYSTEM=="usb", SYSFS{idVendor}=="12d1", MODE="0666"
#Kyocera     0482
SUBSYSTEM=="usb", SYSFS{idVendor}=="0482", MODE="0666"
#LG     1004
SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", MODE="0666"
#Motorola     22b8
SUBSYSTEM=="usb", SYSFS{idVendor}=="22b8", MODE="0666"
#Nvidia     0955
SUBSYSTEM=="usb", SYSFS{idVendor}=="0955", MODE="0666"
#Pantech     10A9
SUBSYSTEM=="usb", SYSFS{idVendor}=="10A9", MODE="0666"
#Samsung     04e8
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"
#Sharp     04dd
SUBSYSTEM=="usb", SYSFS{idVendor}=="04dd", MODE="0666"
#Sony Ericsson     0fce
SUBSYSTEM=="usb", SYSFS{idVendor}=="0fce", MODE="0666"
#ZTE     19D2
SUBSYSTEM=="usb", SYSFS{idVendor}=="19D2", MODE="0666"

但是我要说明的是,根据上面的这些ID,并不能包括所有的,我手上就有一台设备的USB ID都不在上述之列。
你可以很方便的使用lsusb命令查看自己的USB ID
shily@hh-desktop:~$ lsusb
Bus 002 Device 003: ID 413c:2003 Dell Computer Corp. Keyboard
Bus 002 Device 002: ID 0461:4d22 Primax Electronics, Ltd
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 010: ID 18a1:0002
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
找到上面的id是18a1,在文件中添加我的设备就可以了。
SUBSYSTEM=="usb", SYSFS{idVendor}=="18a1", MODE="0666"

修改/etc/udev/rules.d/51-android.rules不需要重启Linux机器,重新插拔一下设备就可以了。再次运行adb devices就可以看到你的设备已经连接
shily@hh-desktop:~$ adb devices
List of devices attached
0403502001011000    device
而在此之前,你看到的是
shily@hh-desktop:~$ adb devices
List of devices attached
????????????    no permissions

2010-07-28 重要更新
如果你看得到系统启动时的log,也许你会注意下面的这个警告:
udevd : SYSFS{}= will be removed in a future udev version, please use ATTR instead.

直接使用ATTR替换上面的SYSFS即可:
例如:
#ZTE     19D2
SUBSYSTEM=="usb", SYSFS{idVendor}=="19D2", MODE="0666"

变成

#ZTE     19D2
SUBSYSTEM=="usb", ATTR{idVendor}=="19D2", MODE="0666"

2010-09-06 更新
如果你是一个开发人员,而且USB设备很多的话,使用以下方式会很方便:
清空51-android.rules,添加如下一行,一劳永逸(因我需要测试好几种设备,每次都添加一个会很麻烦)。
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
我并不是很清楚具体的含义,只是模仿10-vboxdrv.rules来写的,这个是virtualbox的udev规则文件,因为名字开头数字大文件中记录的规则会覆盖名字开头数字小的文件中的规则,所以你需要尽可能设置的文件名大一些,51已经够用了(我原来想写在10-vboxdrv.rules,让他们用一个文件,但是失败了)


ubuntu12.04 eclipse android 不识别
转自:http://hi.baidu.com/iceliushuai/item/74635bc93ef4520fad092f12

分享到:
评论

相关推荐

    windows adb shell tab键补全

    - 某些命令可能因Android系统的权限限制而无法执行,需要以root权限运行`adb shell`。 总的来说,利用`adb shell`结合Windows CMD的`tab`键补全功能,能够极大地提升Android开发和调试的效率。理解并熟练掌握这一...

    ADBShell操作手册

    ADB Debugging(adb调试命令) 3 adb devices 3 adb forward <local> <remote> 3 adb kill-server 3 无线网(Wireless) 3 adb connect [:] 3 adb usb 4 安装包管理命令(Package Manger) 4 adb install [option] ...

    adb shell可以按tab补全工具

    标题中的“adb shell可以按tab补全工具”指的是在使用ADB(Android Debug Bridge)命令行工具时,可以通过按下Tab键来实现自动补全功能,这极大地提高了开发者输入命令的效率和准确性。 ADB是一个强大的工具,它是...

    adb shellfor windows

    总的来说,adb shell for Windows是Android开发和调试过程中不可或缺的工具,它提供了对Android设备的全面控制,帮助开发者解决各种问题,提升应用的质量和性能。熟练掌握adb shell命令,可以极大地提高工作效率。

    Logcat及adb shell命令的bat脚本实现例子

    在Android开发和调试过程中,`Logcat`和`adb shell`是两个非常重要的工具。`Logcat`用于收集设备或模拟器的日志信息,而`adb shell`则允许开发者通过命令行与Android设备进行交互。本文将深入探讨如何通过`bat`脚...

    adbShell轻量级安装tcpdump

    然而,通过特定的方法,我们可以在不获取root权限的情况下,在adb Shell环境中实现轻量级安装tcpdump。 首先,理解adb Shell的用法是至关重要的。它是adb的一部分,允许开发者在设备的命令行界面执行命令。要打开...

    android执行adb shell命令源码

    首先,`adb shell`命令是通过ADB工具在设备的shell环境中执行命令。在Android应用中,我们通常会用到`Runtime`类或者`Process`类来实现这一功能。以下是一个简单的示例,展示如何在Java代码中执行`adb shell`命令: ...

    adb shell可以按tab补全工具 命令行补全工具

    把adb.rar解压到c盘根目录下,确保解压的2个文件在C:\adb目录下。 ...这时候重新打开命令行 进去点击adb shell进入Android 里面的输入首字母 按tab键 就可以补全对应字符了

    adb工具 ADB SHELL

    在深入理解ADB及其子命令`adb shell`之前,我们先来了解一下ADB的基础知识。 ADB由三个主要部分组成:设备端守护进程(adb daemon)、主机端守护进程(也叫adb服务器)和USB驱动程序。设备端守护进程运行在Android...

    支持tab键自动补全和字体颜色的ADB shell

    5. **即点即用,自动连接安卓设备**:此版本的ADB shell设计得非常人性化,只需点击文件即可启动,而且能够自动识别并连接到已连接的安卓设备,省去了手动配置和连接的步骤。 6. **自制软件图标**:软件图标被定制...

    adb shell 和 iperf全平台工具(Android 、Windows、Linux)

    adb shell 工具 iperf全平台工具(Android 、Windows、Linux)

    adbshell驱动

    "adb shell驱动下载 _adb shell device not found - pc6下载站.url"是一个链接,可能指向一个包含adb和fastboot驱动的下载页面。如果在运行adb命令时出现“device not found”错误,这可能是因为缺少必要的驱动。...

    adb shell android

    "adb shell android"是Android开发者常用的命令行工具,它基于Android Debug Bridge(ADB),用于与Android设备进行通信。ADB是一个强大的工具集,允许开发者调试应用、传输文件、执行设备上的命令以及获取设备状态...

    Python之使用adb shell命令启动应用的方法详解

    ### Python之使用adb shell命令启动应用的方法详解 #### 背景介绍 随着移动设备的普及,越来越多的应用程序被开发出来。为了确保这些应用程序的质量,自动化测试变得尤为重要。Python作为一种强大的脚本语言,因其...

    安卓 adb shell input keyevent 按键大全.txt

    在深入探讨安卓ADB Shell Input Keyevent按键大全之前,我们首先需要理解ADB(Android Debug Bridge)的概念及其作用。ADB是Google开发的一款用于与Android设备进行通信的工具,它提供了丰富的命令行选项来控制和...

    adb shell win7 驱动

    7. **故障排查**:如果在adb shell使用过程中遇到问题,可以尝试重新启动adb服务,或者断开重连设备。如果设备仍然无法识别,检查USB线是否正常,尝试更换USB接口或电脑,以及更新操作系统和ADB版本。 以上就是关于...

    android adb shell

    1. **应用调试**:通过 ADB Shell 启动特定的 Activity 或 Service,检查应用的行为和状态。 2. **性能优化**:使用 `top` 和 `dumpsys` 等命令分析应用的 CPU 和内存使用情况,找出性能瓶颈。 3. **自动化测试**:...

    Python-用busybox加持的功能更加强大的adbshell不需要root

    在标题和描述中提到的"Python-用busybox加持的功能更加强大的adb shell不需要root",是关于如何通过集成BusyBox来增强ADB Shell的功能,而且无需设备具有root权限。 BusyBox是一个开源项目,它集成了许多常见的...

    adb 旧版本,解决adb shell不兼容错误

    这种不兼容性可能导致各种问题,如无法执行adb命令、设备无法识别等,影响到调试和测试流程。 首先,我们需要理解这个错误信息的具体含义。"adb server version (31)"指的是设备或模拟器上运行的ADB服务器的版本号...

Global site tag (gtag.js) - Google Analytics