linux編譯adb
⑴ Ubuntu下adb的使用及常見問題處理
Ubuntu下adb的使用及常見問題處理
方案一:使用ubuntu系統自帶的安裝包
sudo apt-get install android-tools-adb
或者
sudo apt-get install adb
方案二:使用Android源碼編譯生成的adb文件
Android源碼編譯完成之後,會在編譯過的項目目錄下./out/host/linux-x86/bin/生成adb文件,需要將其拷貝到系統的/usr/bin目錄下,並更改許可權。
sudo cp /home/apuser/code/out/host/linux-x86/bin/adb /usr/bin
sudo chmod a+x /usr/bin/adb
說明:這個adb文件也可以在android-sdk-linux下的platform-tools目錄下找到。
在終端運行 adb help或者adb查看adb是否安裝成功。
adb help
或者
adb
正常情況下,可看到adb的版本信息,以及adb支持的相關指令和說明。
mkdir~/.android
echo 0x1782 > ~/.android/adb_usb.ini
可以查看/home/apuser/.android/adb_usb.ini是否生成成功,且內容為0x1782
這個0x1782是設備的VID號,可以使用lsusb指令查詢自己設備的VID號是多少,如果是調試多個設備,可依次將設備的VID號添加到adb_usb.ini中
備註:展訊為0x1782,MTK為0x0e8d,高通為0x056c
到:/etc/udev/rules.d/51-android.rules命令:
cd /etc/udev/rules.d
sudo gedit/etc/udev/rules.d/51-android.rules
添加
SUBSYSTEM=="usb",SYSFS{idVendor}=="1782", MODE="0666",GROUP="plugdev"
其中 1782 為展訊設備號,也可以通過lsusb 來查看所有 usb 設備。
說明:
1、展訊的設備號是1782,MTK的設備號是0e8d,高通660的設備號是056c,
其他平台的可查找確認後,填寫到這里。
2、如果沒有/etc/udev/rules.d/51-android.rules 文件,需要自己創建一下。
3、修改/etc/udev/rules.d/51-android.rules不需要重啟Linux機器,重新插拔一下設備就可以了。再次運行adb devices就可以看到你的設備已經連接。
在命令窗口執行adb shell; adb devices
可以shell登錄手機,也可以出 log, logcate 具體命令還需要學習。
使用上文的步驟操作之後,大多數系統里adb都可以使用,但在有些版本的adb或者系統中仍會報如下問題:
apuser@ubuntu2:~/adbtools$ adb devices
List of devices attached
faf80ac1 no permissions (user in plugdev group; areyour udev rules wrong?); see [http://developer.android.com/tools/device.html]
可使用一下解決方案,進行解決
解決方案:
setp 1: lsusb 找到你手機的usb 地址
apuser@ ubuntu2:~/adbtools$ lsusb
Bus 002 Device 002: ID 1f75:0621 Innostor Technology Corporation
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 0bda:58db Realtek Semiconctor Corp.
Bus 001 Device 005: ID 8087:0a2b Intel Corp.
Bus 001 Device 004: ID 138a:0097 Validity Sensors, Inc.
Bus 001 Device 003: ID18f8:0f99
Bus 001 Device 014: ID 19d2:ffb0 ZTE WCDMA Technologies MSM
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
他會列出來所有的usb 設備。如果試下找不到,那麼拔掉設備看下,哪了沒有了就是哪個。
setp2: 配置規則文件
apuser@ ubuntu2:~/adbtools$ sudo gedit /etc/udev/rules.d/51-android.rules
[sudo] password for apuser:
之後把這些文本 到編輯器裡面:
ATTR{idProct}=="ffb0",SYMLINK+="android_adb", MODE="0660",GROUP="plugdev", TAG+="uaccess", SYMLINK+="android"
注意:ffb0 是查找到的手機設備的usb 的地址。
Bus 001 Device 014: ID 19d2:ffb0 ZTE WCDMATechnologies MSM
改成你的地址。
如果沒有/etc/udev/rules.d/51-android.rules 文件,麻煩自己創建一下。
setp3: 之後執行命令:
apuser@ ubuntu2:~/adbtools$ sudo usermod -a -G plugdev $(id -u -n)
apuser@ ubuntu2:~/adbtools$ sudo udevadm control --reload-rules
apuser@ ubuntu2:~/adbtools$ sudo service udev restart
apuser@ ubuntu2:~/adbtools$ sudo udevadm trigger
setp4: 之後重啟adb
apuser@ ubuntu2:~/adbtools$ adb kill-server
apuser@ ubuntu2:~/adbtools$ adb start-server
apuser@ ubuntu2:~/adbtools$ adb devices
List of devices attached
faf80ac1 unauthorized
apuser @ ubuntu2:~$adb devices
List of devices attached
???????????? no permissions
提示很明確,就是adb許可權有問題,而且
???????????? no permissions
這樣的提示,說明使用的adb版本較低,最好使用高版本的adb,安裝Ubuntu系統自帶的adb可能會出現這種現象。如果adb版本比較高,就會出現如下提示:
faf80ac1no permissions……
使用adb shell 也會提示許可權error
apuser@ ubuntu2:~$adb shell
error:insufficient permissions for device
根本原因是: adb server 需要以 root 的許可權啟動
臨時方法 如下:
apuser@ubuntu2:~$sudo -s
[sudo]password for apuser:
root@ ubuntu2:~#adb kill-server; adb start-server
* daemon not running. starting it now *
* daemon started successfully *
apuser@ ubuntu2:~# exit
apuser @ ubuntu2:~$
再次執行adb shell就可以了。
該許可權問題,可使用sudo啟動adb來解決,但不是根本解決之道,因為每次都要sudo來提高許可權,太麻煩,而且如果使用的eclpse,或者idle來調試時還是要面對該該問題。
最好按本文第一部分的方法安裝adb。如果按本文第一部分安裝了adb,但還出現改問題,可使用which adb查看,當前使用的adb那個路徑下的adb.以確保使用正確的adb
3、如果需要調試多個設備,以下的添加方法可能更為合適
這個方案對於不出現user in plugdev group; are your udev rules wrong?問題的系統來說是可行,的,如果出現user in plugdev group; are your udev rules wrong?問題,就不用考慮了。
清空51-android.rules,添加如下一行,一勞永逸(需要測試好幾種設備,每次都添加一個會很麻煩)。
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666", GROUP="plugdev"
我並不是很清楚具體的含義,只是模仿10-vboxdrv.rules來寫的,這個是virtualbox的udev規則文件,因為名字開頭數字大文件中記錄的規則會覆蓋名字開頭數字小的文件中的規則,所以你需要盡可能設置的文件名大一些,51已經夠用了(我原來想寫在10-vboxdrv.rules,讓他們用一個文件,但是失敗了)
adb kill-server
sudo udevadmcontrol --reload-rules
sudo service udevrestart
sudo udevadmtrigger
lsusb
可將這些指令寫入一個sh腳本中,配置完規則,或者要檢查USB設備時,直接執行該腳本,以提高效率。
⑵ 甯哥敤鐨刟db鍛戒護
鍦ㄥ鉤鏃剁殑宸ヤ綔涓錛屼細緇忓父鐢ㄥ埌adb鍛戒護錛屽湪榪欓噷紼嶅井鏁寸悊浜嗕竴涓嬨
涓.姒傝
1.浠涔堟槸adb錛
adb鍏ㄧО涓篈ndroid Debug Bridge錛屽氨鏄璧峰埌璋冭瘯妗ョ殑浣滅敤銆傞【鍚嶆濅箟錛宎db灝辨槸涓涓猟ebug宸ュ叿銆
2.adb宸ヤ綔鍘熺悊
涓嶆槸寰堢悊瑙o紵閭e氨鏉ョ湅鐪嬪畠鐨勫伐浣滃師鐞嗗惂銆
涓婂浘鏄涓涓綆鍗曠殑adb宸ヤ綔鍘熺悊鍥俱俛db瀹㈡埛絝鏈嶅姟鍣ㄧ紼嬪簭錛岀敱涓婂浘鍙浠ョ湅鍑哄畠涓昏佷笁涓緇勪歡緇勬垚錛欳lient錛孲erver錛孌aemon銆
錛1錛夊綋浣犲惎鍔ㄤ竴涓猘db Client錛堝㈡埛絝錛夛紝Client棣栧厛浼氶夌『璁ゆ槸鍚﹀凡鏈変竴涓猘db
Server錛堟湇鍔″櫒錛夎繘紼嬪湪榪愯岋紝濡傛灉娌℃湁錛屽垯浼氬惎鍔⊿erver榪涚▼銆傛ゆ椂錛宎db Server灝變細緇戝畾鏈鍦扮殑TCP絝鍙5037錛屽苟鐩戝惉adb
Client鍙戞潵鐨勫懡浠ゃ
錛2錛夋帴鐫錛孲erver灝嗕細鎵鎻忔墍鏈5555鍒5585鑼冨洿鍐呯殑濂囨暟絝鍙f潵瀹氫綅鎵鏈夌殑妯℃嫙鍣ㄦ垨璁懼囷紝騫朵笌涔嬪緩絝嬭繛鎺ャ備竴鏃Server鎵懼埌
浜哸db
daemon錛堝畧鎶ょ▼搴忥級錛屽畠灝嗗緩絝嬩竴涓鍒拌ョ鍙g殑榪炴帴錛岃繖鏍鳳紝鎴戜滑灝卞彲浠ヤ嬌鐢╝db鍛戒護鎺у埗鍜岃塊棶妯℃嫙鍣ㄦ垨璁懼囦簡銆傚湪榪欓噷錛岄渶娉ㄦ剰鐨勬槸浠諱綍妯℃嫙鍣ㄦ垨璁懼囧疄渚嬩細鍙栧緱涓や釜榪炵畫鐨勭鍙o細涓涓鍋舵暟絝鍙g敤鏉ョ浉搴旀帶鍒跺彴鐨勮繛鎺ワ紝鍜屼竴涓濂囨暟絝鍙g敤鏉ュ搷搴攁db榪炴帴銆
3.adb鐨勪綔鐢
鍊熷姪adb宸ュ叿錛屾垜浠鍙浠ョ$悊璁懼囨垨鎵嬫満妯℃嫙鍣ㄧ殑鐘舵侊紝榪樺彲浠ヨ繘琛屽緢澶氭墜鏈烘搷浣滐紝濡傚畨瑁呰蔣浠躲佺郴緇熷崌綰с佽繍琛宻hell鍛戒護絳夌瓑銆傜畝鑰岃█涔嬶紝adb灝辨槸榪炴帴Android鎵嬫満鍜孭C絝鐨勬ˉ姊侊紝鍙浠ヨ╃敤鎴峰湪鐢佃剳涓婂規墜鏈鴻繘琛屽叏闈㈢殑鎿嶄綔銆
浜.甯哥敤鍛戒護
榪欎釜閮ㄥ垎涓昏佷粙緇峚db鐨勪嬌鐢ㄦ柟娉曞拰涓浜涘父鐢ㄧ殑鍛戒護銆
璁劇疆adb鐜澧冿細灝哸ndroid sdk宸ヤ綔鐩褰曟坊鍔犲埌緋葷粺鐜澧冨彉閲涓錛屽垯鍙浣跨敤adb鍛戒護浜嗐
1. adb devices
鏌ョ湅褰撳墠榪炴帴鐨勮懼囷紙榪炴帴璁$畻鏈虹殑Android璁懼囨垨鑰呮ā鎷熷櫒錛夈
2.adb install
adb install <apk鏂囦歡璺寰>錛屽皢鎸囧畾鐨刟pk瀹夎呭埌璁懼囦笂錛屽畨瑁呯殑apk鍖呬細鏀懼湪/data/app鐩褰曚笅銆
鍑犱釜鍙傛暟錛
-r 寮哄埗瀹夎
-d錛堢湡鏈猴紝澶氫釜璁懼囦腑鍙鏈変竴涓鐪熸満鏃墮傜敤錛
-e錛堟ā鎷熷櫒錛屽氫釜璁懼囦腑鍙鏈変竴涓妯℃嫙鍣ㄦ椂閫傜敤錛
-s錛堟寚瀹氳懼囷紝鍚庢帴搴忓垪鍙鳳級
adb 鈥搒 44a188f9 install 鈥搑 test.apk錛堝叾涓44a188f9鍗沖簭鍒楀彿錛岄氳繃adb devices鍙鑾峰彇錛
3.adb uninstall
adb uninstall <apk鍖呭悕>
adb uninstall 鈥搆 <apk鍖呭悕>
-k鍙傛暟涓哄嵏杞借蔣浠舵椂淇濈暀閰嶇疆鍜岀紦瀛樻枃浠
4.adb reboot
閲嶅惎android璁懼
5.adb shell
閫氳繃adb shell 鍛戒護錛屽氨鍙浠ヨ繘鍏ヨ懼囨垨鑰呮ā鎷熷櫒鐨剆hell鐜澧冧簡錛屽湪榪欎釜Linux shell涓錛屾垜浠灝卞彲浠ユ墽琛屽悇縐峀inux鍛戒護浜嗐
濡傛灉鍙鎯蟲墽琛屼竴鏉shell鍛戒護錛屽氨鍙浠ラ噰鐢錛歛db shell [shell_command]
鍦ㄥ疄闄呬嬌鐢ㄤ腑錛岀粡甯鎬笌grep鎴杅indstr涓璧蜂嬌鐢錛岃搗鍒拌繃婊や綔鐢錛屾煡鐪嬭嚜宸遍渶瑕佺殑鍏抽敭淇℃伅銆
6.adb shell su
鍓嶆彁鎵嬫満宸茬粡root銆傝幏鍙朼db shell鐨root鏉冮檺銆
浣跨敤su鎻愭潈錛岀敤鎴鍛戒護鎻愮ず絎鏈$鍙樻垚#錛屽傛灉鎵嬫満娌℃湁root錛屼細鎻愮ずsu:permission denied銆
7.adb shell ps/top
鏌ョ湅褰撳墠緇堢涓鐨勮繘紼嬩俊鎮錛屽俻id絳夈
8.adb shell am/pm
am鍏ㄧО涓篴ctivity manager錛屽彲浣跨敤am鍛戒護妯℃嫙鍚勭嶇郴緇熺殑琛屼負錛屽傚幓鍚鍔ㄤ竴涓猘ctivity錛屽己鍒跺仠姝㈣繘紼嬶紝鍙戦佸箍鎾榪涚▼錛屼慨鏀硅懼囧睆騫曞睘鎬х瓑銆
濡傦細adb shell am start <apk鍖呭悕>/<activityName>:鍚鍔ㄤ竴涓猘ctivity銆
pm鍏ㄧО涓簆ackage manager錛屽埄鐢╬m鍛戒護鍙妯℃嫙android琛屼負鎴栨煡璇㈣懼囦笂鐨勫簲鐢ㄧ瓑銆
濡傦細adb shell pm list packages
鍒楀嚭褰撳墠璁懼囨墍鏈夊凡瀹夎呯殑紼嬪簭鐨勫寘鍚嶃
璇存槑錛
綆¢亾絎︹渱鈥濓細鍙浠ユ妸鏍囧噯鐨勮緭鍏ユ祦涓庢爣鍑嗙殑杈撳嚭嫻佽繘琛屽悎騫訛紝鎴栬呮妸鏌愪釜鍛戒護鐨勬爣鍑嗚緭鍑烘祦浣滀負鍙︿竴涓鍛戒護鐨勬爣鍑嗚緭鍏ユ祦銆
exit閫鍑簊hell銆
鐢變簬grep涓簂inux鍛戒護錛岃繍琛屽崟鏉adb shell 鏃跺苟娌℃湁榪涘叆linux
shell鐜澧冿紝騫朵笉鑳界敤grep絳夊叾浠杔inux鍛戒護錛屽彧鑳界敤window cmd鐨勫懡浠ゃ傚湪榪欓噷鍙浠ョ敤findstr鏉ヤ唬鏇縢rep錛屼嬌鐢ㄦ柟娉曚負
findstr/grep [keyword]
鏇磋︾粏鐨勫唴瀹瑰彲鏌ョ湅 鍙傝冩枃鐚3 鍜 鍙傝冩枃鐚4 銆
瀵逛簬甯哥敤鐨刲inux鍛戒護鍜屽父鐢ㄧ殑windows 鎺у埗鍙板懡浠わ紝浠ュ悗鍐嶄綔鎬葷粨銆
9.adb pull 鍜 adb push
adb pull <璁懼囦腑鐨勬枃浠惰礬寰> <鏈鍦拌礬寰>:浠庢ā鎷熷櫒鎴栬懼囦腑澶嶅埗鏂囦歡鍒版湰鍦般
adb push <鏈鍦版枃浠惰礬寰> <璁懼囦腑鐨勮礬寰>:灝嗘湰鍦版枃浠舵垨鐩褰曞嶅埗鍒版ā鎷熷櫒鎴栬懼囥
榪欓噷榪樻秹鍙婂埌涓涓鏉冮檺鐨勯棶棰橈紝鍦ㄥ悗緇鐨勫崥鏂囦腑鍐嶄綔浠嬬粛銆
10.adb shell mpsys
Android鎻愪緵鐨刣umpsys宸ュ叿鐢ㄤ簬鏌ョ湅鎰熷叴瓚g殑緋葷粺鏈嶅姟淇℃伅涓庣姸鎬併
鍙傝冧笅琛錛
11.adb shell monkey
璺憁onkey鏄痑ndroid鑷鍔ㄥ寲嫻嬭瘯鐨勪竴縐嶆墜孌碉紝鎵璋搈onkey嫻嬭瘯灝辨槸妯℃嫙鐢ㄦ埛鐨勬寜閿杈撳叆錛岃Е鎽稿睆杈撳叆錛屾墜鍔胯緭鍏ョ瓑銆傚綋Monkey紼嬪簭鍦ㄦā鎷熷櫒鎴栬懼囪繍琛岀殑鏃跺欙紝濡傛灉鐢ㄦ埛姣斿傜偣鍑伙紝瑙︽懜錛屾墜鍔挎垨涓浜涚郴緇熺駭鍒鐨勪簨浠剁殑鏃跺欙紝瀹冨氨浼氫駭鐢熼殢鏈鴻剦鍐詫紝鎵浠ュ彲浠ョ敤Monkey鐨勯殢鏈洪噸澶嶇殑鏂規硶瀵筧pk浣鍘嬪姏嫻嬭瘯錛屾潵嫻嬭瘯android
app鐨勭ǔ瀹氭с
濡備笅涓烘祴璇鑵捐鏂伴椈apk鐨勪竴涓綆鍗曞疄渚嬶細
璇存槑錛氱涓涓-s鎸囧畾璁懼囷紝濡傛灉鍙榪炴帴浜嗕竴鍙拌懼囷紝鍙涓嶇敤璇ュ弬鏁般
-p <apk鍖呭悕>鍙鍏佽哥郴緇熷惎鍔ㄦ寚瀹氱殑app錛屽傛灉涓嶆寚瀹氾紝灝嗗厑璁哥郴緇熷惎鍔ㄨ懼囦腑鐨勬墍鏈塧pp錛屼篃鍙鎸囧畾澶氫釜鍖呫
--throttle <姣縐掓暟> 鎸囧畾鐢ㄦ埛鎿嶄綔錛堜簨浠訛級闂寸殑鏃跺歡銆
--ignore-crashes 鎸囧畾褰搴旂敤紼嬪簭宕╂簝鏃訛紝Monkey渚濈劧鍙戦佷簨浠訛紝鐩村埌浜嬩歡璁℃暟瀹屾垚銆
--ignore-timeouts 褰撳簲鐢ㄧ▼搴忓彂鐢烝NR閿欒鏃訛紝Monkey渚濈劧浼氬彂閫佷簨浠訛紝鐩村埌浜嬩歡璁℃暟瀹屾垚銆
絎2涓-s錛岀敤浜庢寚瀹氫吉闅忔満鏁扮敓鎴愬櫒鐨剆eed鍊礆紝濡傛灉seed鐩稿悓錛屽垯涓ゆMonkey嫻嬭瘯鎵浜х敓鐨勪簨浠跺簭鍒椾篃鐩稿悓鐨勩
-v 鐢ㄤ簬鎸囧畾鍙嶉堜俊鎮綰у埆錛屾誨叡鍒嗕負level 0銆乴evel 1銆乴evel 2涓変釜綰у埆錛岀駭鍒瓚婇珮錛岃緭鍑虹殑鏃ュ織瓚婅︾粏銆
鏈鍚庣殑鏁板瓧錛堣繖閲屾槸500錛夛細琛ㄧずMonkey紼嬪簭妯℃嫙500嬈¢殢鏈虹敤鎴鋒搷浣滀簨浠躲
>杈撳嚭嫻嬭瘯緇撴灉鍒癉:\monkeylog.txt
鏇磋︾粏鐨勫弬鏁板彲鏌ョ湅 鍙傝冩枃鐚5 銆
閮ㄥ垎嫻嬭瘯緇撴灉濡備笅錛
瀵逛簬嫻嬭瘯緇撴灉鐨勫垎鏋愶紝閫氳繃鎼滅儲鍏抽敭璇嶆潵瀹氫綅閿欒錛屼富瑕佸寘鎷浠ヤ笅鍥涗釜鏂歸潰錛
1錛堿NR錛圓pplication Not
Response錛:紼嬪簭鏃犲搷搴旓紝涓鑸涓葷嚎紼嬭秴榪5縐掓病澶勭悊灝變細鍑虹幇ANR閿欒銆傞氳繃鎼滅儲ANR鍏抽敭璇嶆潵瀹氫綅鍏抽敭鐨勪簨浠朵俊鎮銆傞櫎浜嗗煎嚭鏃ュ織澶栵紝榪樺彲浠ュ皢/data/anr/鐩褰曚笅鐨則race.txt鏂囦歡瀵煎嚭錛岀敤鏉ュ畾浣嶅垎鏋愰棶棰樸備嬌鐢>adb
pull /data/anr/trace.txt d:\ 灝唗race.txt鏂囦歡瀵煎嚭鍒癲鐩樸
2錛塅orceClosed鎴栧叾浠栧紓甯擱鍑轟俊鎮錛氶氳繃鎼滅儲Fatal鍏抽敭璇嶆潵瀹氫綅銆
3錛夊穿婧冮棶棰橈細閫氳繃鎼滅儲Exception鍏抽敭璇嶆潵瀹氫綅銆
4錛夊彂鐢熷紓甯稿悗錛岄氳繃鎼滅儲Crash鍏抽敭璇嶆潵瀹氫綅鍒拌︾粏鐨勫爢鏍堜俊鎮銆
12.kill
kill鐢ㄦ潵涓姝涓涓榪涚▼銆
姣斿傛垜浠鍦ㄨ窇monkey鐨勬椂鍊欙紝鎬庝箞寮哄埗鍏抽棴monkey鍛錛屽彲浠ョ敤kill <monkey榪涚▼PID>
璇存槑錛氬彟寮鍚涓涓猚md錛屾壘鍒癿onkey鐨刾id鍙鳳紝鐒跺悗鏉鎺夊嵆鍙銆
鍙傝冩枃鐚錛
1.Android璋冭瘯妗ワ細 http://www.iteye.com/topic/260042
2.Android鎬ц兘鍒嗘瀽宸ュ叿mpsys鐨勪嬌鐢錛 http://www.open-open.com/lib/view/open1405061994872.html
3.adb shell 涓鐨刟m pm鍛戒護錛 http://www.android100.org/html/201312/09/4957.html
4.adb shell 鍚鍔ㄥ簲鐢ㄧ▼搴忕殑鏂規硶錛 http://blog.chinaunix.net/uid-26997997-id-3350449.html
5.Monkey鍘嬪姏嫻嬭瘯璇﹁В錛 http://blog.csdn.net/huangbiao86/article/details/8490743
⑶ linux下怎麼樣啟動adb命令
同 Windows 。不過 Linux 默認不搜索當前目錄。所以需要用相對地址 ./ 來讓 Linux 搜索當前目錄裡面的 adb 。
⑷ linux下關於adb命令的一些知識
Android Debug Bridge,一般簡稱為adb,主要存放在sdk安裝目錄下的platform-tools文件夾中,它是一個非常強大的命令行工具,通過這個工具你能夠與你的android設備進行交互。同時這是一個包含了以下三部分的cs模式的程序:
1) adb client
從圖中,我們知道client是運行在PC端的,每當我們發起一個adb命令的時候,就會開啟一個client程序。當然,當我們開啟DDMS或者ADT的時候,也會自動創建client。
當我們開啟一個client的時候,它首先會去檢測後台是否已經有一個server程序在運行著,否則會開啟一個adb-server進程。
所有的client都是通過5037埠與adb-server進行通信的。
2)adb daemon(adbd)
從圖中,我們知道daemon是作為一個後台進程運行在模擬器/真實Android設備中的。
daemon使用埠的范圍是5554-5585,每個模擬器/設備連接到PC端時,總會開啟這么一個後台進程,並且為其分配了兩個連續的埠,比如:
Emulator 1, console: 5554
Emulator 1, adb: 5555
也正因為每個設備都分一組兩個埠,也已adb連接手機的最大數量為16。
說回埠的作用,在這兩個埠中,其中偶數埠是用於server 與設備進行交互的,可以讓server直接從設備中讀取數據,而奇數埠是用來與設備的adbd進行連接通信的。
2) adb server
從圖中,我們同樣可以知道,server也是作為一個後台的程序運行在PC端的,他負責管理client進程以及adb daemon之間的通信。
當一個server開啟的時候,他會自動綁定並且監聽5037埠,接收client通過該埠發送過來的命令。同時server還會對5555-5585間的奇數埠進行掃描,進行對已連接設備的定位。
1.2 常用的adb命令
首先我們先來介紹一下,adb命令的使用格式吧:
adb [-d|-e|-s ]
adb是必須的,接下來方括弧[]裡面的內容不是必須的,最後才是我們需要執行的命令操作,例如 adb -s emulator-5554 install UCBrowser.apk (這是安裝UC瀏覽器的意思)
下面先介紹下,前面幾個參數的含義吧:
-d: 讓唯一連接到該PC端的真實安卓設備執行命令,如果發現USB中連接有多部設備,將會報錯
-e: 讓唯一連接到該PC端的模擬器執行命令,如果發現開啟了多個模擬器,將會報錯
-s:通過設備的序列號進行指定設備執行命令
如果設備只連接有一個設備或者一個模擬器的時候,可以不用聲明這三個參數,adb默認會讓這部唯一連接到的設備進行命令執行。
ok,下面開始講解常用的命令吧:
1) 查看當前PC端連接有多少設備:
adb devices
終端中的執行結果為:
從上圖中,我們看到了設備有的兩種狀態,其實執行該命令,可能返回的狀態有三種:
I. device 設備已經成功連接到了adb-server
II. offline 設備並沒有連接到adb或者沒有響應
III. no device 並沒有設備/模擬器連接
2) 查看adb的版本
adbversion
終端中的執行結果為:
3) 給設備進行軟體的安裝
adb -s install
eg:
adb -s 99eb07a9 install D://Test.apk
終端中的執行結果為:
除了上面這種方法,我們還有另外一個命令:
adb -s shell pm install [options]
其中[options]中最常用的選項是-r,代表著本次安裝是重新安裝,會保留用戶數據。
4) 卸載設備中已經安裝的軟體
adb -s uninstall
eg:
adb -s 99eb07a9 uninstall cn.uc.test
終端中的執行結果為:
除了上面這種方法,我們還有另外一個命令:
adb -s uninstall [options]
這里的options是-k,加上該參數表明卸載軟體後依舊保留用戶數據
5) 將數據從設備復制到PC中
adb -s pull
eg:
adb -s 99eb07a9 pull /sdcard/stericson-ls D://
終端的執行結果:
在D://盤中我們也可以發現stericson-ls文件
6) 講數據從PC端復制到設備中
adb -s push
eg:
adb -s 99eb07a9 push d://stericson-ls /sdcard/
終端的執行結果:
7) 獲取連接到的手機的序列號
adb get-serialno
終端的執行結果:
8)獲取設備的連接狀態
adb -s get-state
eg:
adb -s 99eb07a9 get-stat
終端的執行結果:
9) 等待設備連接成功
adb wait-for-device
該命令將會阻塞一直到默認連接的那部機器狀態變為device,也就是連接成功。
10) adb-server 的開啟與關閉
adb kill-server
adb start-server
終端的執行結果:
有時候我們開啟server會失敗,這是因為我們裝了的手機助手,豌豆莢或者其他軟體自帶有自己的adb,導致埠沖突開啟失敗。主要關掉那些軟體並且殺掉那些軟體自帶的adb進程重來即可。
1.2 手機執行Shell命令
眾所周知,Android的內核本身就是Linux,所以Android本身也支持Linux命令,但是因為是手機系統,所以進行了一定的刪減,部分命令不支持,而不支持的部分,我們可以通過安裝busybox這個軟體進行
填補。
下面我們講解下如何在手機中執行Shell命令:
1) 每次都加上adb shell來進行命令的發送與執行
adb shell
2) 先通過adb shell進入手機Shell執行狀態,然後直接輸入Linux命令,如圖:
1.3 Activity Manager 常用命令與參數說明
一般情況下,我們最常用它來進行app的開啟,並且傳遞一定的參數過去,比如:
adb shell am start -a android.intent.action.VIEW -n cn.uc.test/.MainActivity -d
在這里就不做太過詳細和重復的說明了
1.4 Package Manager 常用命令與參數說明
1) 使一個apk處於禁用狀態,相當於卸載了:
disable
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
eg:
adb shell su disable com.UCMobile/.main.UCMobile
終端執行結果:
同時我們在手機上發現,UC瀏覽器的圖標不見了
2) 讓一個apk從禁用狀態恢復過來
enable
其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile
eg:
adb shell su enable com.UCMobile/.main.UCMobile
終端執行結果:
同時我們從手機上發現,UC瀏覽器的圖標又回來啦。
3) 查看一個apk所在的路徑
pm path
eg:
adb shell pm path com.UCMobile
終端執行結果:
4) 查看手機中裝的所有的包
pm list packages
再次不做過多的說明
1.5其他常用的adb命令
1) 屏幕錄像
例如,屏幕開始錄像並且儲存到/sdcard中,同時名字為demo.mp4
adb shell screenrecord /sdcard/demo.mp4
2) 關閉設備請求,開啟設備
adb shell stop
adb shell start
3)設備關機以及重啟
adb reboot
adb shutdown
⑸ 濡備綍浣緼DB鍦↙inux涓嬫敮鎸丄ndroid璁懼囩殑udev瑙勫垯閰嶇疆
銆銆1.Connect Andriod device to your Linux ***.
銆銆2.Use "lsusb".
Use lsusb to check the Android device ID in usb subsystem, like below (do not care "$"):
$ lsusb
Bus 001 Device 002: ID 0fce:6156 Sony Ericsson Mobile
Number "0fce" is the Andriod device ID in use subsystem.
銆銆3.Update adb tool.
Turn to Android sdk folder "tools", typein below words:
$./android adb update
it's neccesary step to create ~/.android/adb_usb.ini.
銆銆4. Edit adb_usb.ini .
Edit ~/.android/adb_usb.ini. Add usb subsystem ID to adb_usb.ini, like below:
銆銆0x0fec
銆銆5.Create udev rule file.
Create a new file named "sony-android.rules" in /etc/udev/rules.d folder.
銆銆Add below content to "sony-android.rules"
SUBSYSTEM=="usb", SYSFS{idVendor}=="0fec", MODE="0666"
idVendor USB Vendor IDs, reference:
銆銆chmod rule file:
銆銆sudo chmod a+rx /etc/udev/rules.d/sony-android.rules
銆銆6.Restart udev service.
Do as below to restart udev service:
$ sudo service udev restart
銆銆7.Restart adb service.
Do as below to restart adb service.
$ adb kill-server
$ adb start-server
銆銆8.Try "adb devices".
銆銆Plug out Adnroid device, then, Plug in again, use "adb devices" to check your Andriod device.