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(媒體傳輸協議),它是微軟公司提出的一套媒體文件傳輸協議。Android從3.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權限,就不會提示權限不足的錯誤了。