Ubuntu adb shell 出現 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,所以修改起來不方便。但是我不經常下載文件修改,也就忍了。

// ====最終解決辦法==============================================================
http://developer.android.com/guide/developing/device.html

在ubuntu系統下開發的話,添加下面這一句到/etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
(之前的寫法是:SYSFS{idVendor}=="0bb4" 現在已經改爲ATTR{idVendor}=="0bb4")
對應不同的設備需要不同的idVendor,開發手冊上列出了一些設備的idVendor,不過仍然有些沒有列出來的設備,這時可使用lsusb得到
將設備通過usb連接到pc上,執行
ray@ray-desktop:/etc/udev/rules.d$ lsusb
Bus 004 Device 001: ID 0000:0000  
Bus 005 Device 001: ID 0000:0000  
Bus 003 Device 001: ID 0000:0000  
Bus 002 Device 001: ID 0000:0000  
Bus 001 Device 005: ID 0502:3389 Acer, Inc.
Bus 001 Device 002: ID 0bda:0151 Realtek Semiconductor Corp.
Bus 001 Device 001: ID 0000:0000  

那麼要連接這一臺設備就要在51-android.rules中添加一行:
SUBSYSTEM=="usb", ATTR{idVendor}=="0502", MODE="0666", GROUP="plugdev"

修改/etc/udev/rules.d/51-android.rules不需要重啓Linux機器,重新插拔一下設備就可以了。再次運行adb devices就可以看到你的設備已經連接

// ====終極解決辦法==============================================================
如果你是一個開發人員,而且USB設備很多的話,使用以下方式會很方便:
清空51-android.rules,添加如下一行,一勞永逸(因我需要測試好幾種設備,每次都添加一個會很麻煩)。
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"
我並不是很清楚具體的含義,只是模仿10-vboxdrv.rules來寫的,這個是virtualbox的udev規則文件,因爲名字開頭數字大文件中記錄的規則會覆蓋名字開頭數字小的文件中的規則,所以你需要儘可能設置的文件名大一些,51已經夠用了(我原來想寫在10-vboxdrv.rules,讓他們用一個文件,但是失敗了)

=================================================================================
另外,在通過USB調試之前,不要忘記啓動設備的usb偵錯。
然後在項目的AndroidManifest.xml文件中的<application>下添加 android:debuggable="true"。項目發佈的時候要記得去掉。
對於windows和Mac OS X開發環境,在開發手冊上還有如下的說明:
#If you're developing on Windows, you need to install a USB driver for adb. For an installation guide and links to OEM drivers, see the OEM USB Drivers document.
#If you're developing on Mac OS X, it just works. Skip this step.
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章