Ubuntu 下 adb 連接手機調試android程序失敗 終極解決方法


Ubuntu 下 adb 連接手機調試

      今code完畢,發現手機連接突然出現問題,logcat無輸出,adb devices後發現手機連接有問題。

      手機連接狀態:手機端,android系統,已打開debug模式,並且狀態欄顯示“已連接USB”調試;

                                   電腦端,Ubuntu系統,adb devices,無連接信息

      首先想到Window上很多adb連接錯誤是應爲端口被佔問題,所以查看端口情況:

      

changxing@changxing-ThinkPad-T410:~/Client$ ps -aux | grep adb
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
root      6978  0.0  0.0   4684   940 pts/0    T    20:25   0:00 adb logcat -v process
root      6979  0.0  0.0  31316  1372 pts/0    Tl   20:25   0:00 adb -P 5037 fork-server server
root      7052  0.0  0.0   4548   952 pts/0    T    20:26   0:00 adb tcpip
root      7063  0.0  0.0   4548   952 pts/0    T    20:27   0:00 adb get-state
1000      7337  0.0  0.0  13612   940 pts/0    S+   20:33   0:00 grep adb

root      6978  0.0  0.0   4684   940 pts/0    T    20:25   0:00 adb logcat -v process

     ps命令解析:

 1)ps -a 顯示現行終端機下的所有程序,包括其他用戶的程序。

  2)ps -A 顯示所有程序。

  3)ps -c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數或常駐服務的標示。

  4)ps -e 此參數的效果和指定"A"參數相同。

  5)ps -e 列出程序時,顯示每個程序所使用的環境變量。

  6)ps -f 用ASCII字符顯示樹狀結構,表達程序間的相互關係。

  7)ps -H 顯示樹狀結構,表示程序間的相互關係。

  8)ps -N 顯示所有的程序,除了執行ps指令終端機下的程序之外。

  9)ps -s 採用程序信號的格式顯示程序狀況。

  10)ps - S 列出程序時,包括已中斷的子程序資料。

  11)ps -t<終端機編號>

  指定終端機編號,並列出屬於該終端機的程序的狀況。

  12)ps -u username

  以用戶爲主的格式來顯示程序狀況。

  13)ps x

  顯示所有程序,不以終端機來區分。

  最常用的方法是ps -aux,然後再利用一個管道符號導向到grep去查找特定的進程,然後再對特定的進程進行操作。


      

# 查看哪些進程打開了指定端口port(對於守護進程必須以root用戶執行才能查看到)
lsof -i:port

# 查看哪些進程打開了指定端口port,最後一列是進程ID(此方法對於守護進程作用不大)
netstat -nap|grep port

# 查看端口號對應的系統服務名稱
cat /etc/services

# 啓動|停止|重啓系統服務
sudo /etc/init.d/service start|stop|restart 

        發現有多個logcat程序運行,所以殺掉指定進程。殺完重新連接手機,發現問題還是沒有解決,重新分析google,發現MTP連接PC的相關文章:

(MTP相關知識:MTP的全稱是Media Transfer Protocol(媒體傳輸協議),它是微軟公司提出的一套媒體文件傳輸協議。Android3.0開始支持MTP

在Ubuntu掛載使用MTP設備步驟如下:

1.將MTP設備連接至PC機

2.如果是第一次使用MTP設備需要安裝以下軟件,否則可以跳過此步驟:

1 $ sudo apt-get install mtpfs libfuse-dev libmad0-dev

3.掛載MTP設備

1 $ sudo mtpfs -o allow_other /media/mtp
)


相關步驟:

sudo gedit  /etc/udev/rules.d/50-android.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="0010", MODE="4666", OWNER="alex"

1234和0010分別是VID和PID,OWNER填用戶名。

二依次運行命令

adb kill-server

adb start-server

adb devices

三重新插入手機查看連接情況。

四還不行的話,編輯~/.android下的adb_usb.ini文件

idVendor加進去

如:

# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x1234 


五真的還不行,就同時重啓電腦和手機,這個時候我的手機已經和電腦連接正常,adb logcat 成功輸出!


補充的有些手機權限問題,總是提示:

                                 error: insufficient permissions for device


解決方面(加權限):

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權限,就不會提示權限不足的錯誤了。



  







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