在平時的工作中印衔,會經(jīng)常用到adb命令紊选,在這里稍微整理了一下啼止。
一.概要
1.什么是adb道逗?
adb全稱為Android Debug Bridge,就是起到調(diào)試橋的作用献烦。顧名思義滓窍,adb就是一個debug工具。
2.adb工作原理
不是很理解巩那?那就來看看它的工作原理吧吏夯。
上圖是一個簡單的adb工作原理圖。adb客戶端服務(wù)器端程序即横,由上圖可以看出它主要三個組件組成:Client噪生,Server,Daemon东囚。
(1)當你啟動一個adb Client(客戶端)跺嗽,Client首先會選確認是否已有一個adb
Server(服務(wù)器)進程在運行,如果沒有舔庶,則會啟動Server進程抛蚁。此時,adb Server就會綁定本地的TCP端口5037惕橙,并監(jiān)聽adb
Client發(fā)來的命令瞧甩。
(2)接著,Server將會掃描所有5555到5585范圍內(nèi)的奇數(shù)端口來定位所有的模擬器或設(shè)備弥鹦,并與之建立連接肚逸。一旦Server找到
了adb
daemon(守護程序),它將建立一個到該端口的連接彬坏,這樣朦促,我們就可以使用adb命令控制和訪問模擬器或設(shè)備了。在這里栓始,需注意的是任何模擬器或設(shè)備實例會取得兩個連續(xù)的端口:一個偶數(shù)端口用來相應(yīng)控制臺的連接务冕,和一個奇數(shù)端口用來響應(yīng)adb連接。
3.adb的作用
借助adb工具幻赚,我們可以管理設(shè)備或手機模擬器的狀態(tài)禀忆,還可以進行很多手機操作,如安裝軟件落恼、系統(tǒng)升級箩退、運行shell命令等等。簡而言之佳谦,adb就是連接Android手機和PC端的橋梁戴涝,可以讓用戶在電腦上對手機進行全面的操作。
二.常用命令
這個部分主要介紹adb的使用方法和一些常用的命令。
設(shè)置adb環(huán)境:將android sdk工作目錄添加到系統(tǒng)環(huán)境變量中啥刻,則可使用adb命令了奸鸯。
1. adb devices
查看當前連接的設(shè)備(連接計算機的Android設(shè)備或者模擬器)。
2.adb install
adb install <apk文件路徑>郑什,將指定的apk安裝到設(shè)備上府喳,安裝的apk包會放在/data/app目錄下。
幾個參數(shù):
-r 強制安裝
-d(真機蘑拯,多個設(shè)備中只有一個真機時適用)
-e(模擬器,多個設(shè)備中只有一個模擬器時適用)
-s(指定設(shè)備兜粘,后接序列號)
adb –s 44a188f9 install –r test.apk(其中44a188f9即序列號申窘,通過adb devices可獲取)
3.adb uninstall
adb uninstall <apk包名>
adb uninstall –k <apk包名>
-k參數(shù)為卸載軟件時保留配置和緩存文件
4.adb reboot
重啟android設(shè)備
5.adb shell
通過adb shell 命令孔轴,就可以進入設(shè)備或者模擬器的shell環(huán)境了剃法,在這個Linux shell中,我們就可以執(zhí)行各種Linux命令了路鹰。
如果只想執(zhí)行一條shell命令贷洲,就可以采用:adb shell [shell_command]
在實際使用中,經(jīng)常與grep或findstr一起使用晋柱,起到過濾作用优构,查看自己需要的關(guān)鍵信息。
6.adb shell su
前提手機已經(jīng)root雁竞。獲取adb shell的root權(quán)限钦椭。
使用su提權(quán),用戶命令提示符有$變成#碑诉,如果手機沒有root彪腔,會提示su:permission denied。
7.adb shell ps/top
查看當前終端中的進程信息进栽,如pid等德挣。
8.adb shell am/pm
am全稱為activity manager,可使用am命令模擬各種系統(tǒng)的行為快毛,如去啟動一個activity格嗅,強制停止進程,發(fā)送廣播進程祸泪,修改設(shè)備屏幕屬性等吗浩。
如:adb shell am start <apk包名>/<activityName>:啟動一個activity。
pm全稱為package manager没隘,利用pm命令可模擬android行為或查詢設(shè)備上的應(yīng)用等懂扼。
如:adb shell pm list packages
列出當前設(shè)備所有已安裝的程序的包名。
說明:
管道符“|”:可以把標準的輸入流與標準的輸出流進行合并,或者把某個命令的標準輸出流作為另一個命令的標準輸入流阀湿。
exit退出shell赶熟。
由于grep為linux命令,運行單條adb shell 時并沒有進入linux
shell環(huán)境陷嘴,并不能用grep等其他linux命令映砖,只能用window cmd的命令。在這里可以用findstr來代替grep灾挨,使用方法為
findstr/grep [keyword]
對于常用的linux命令和常用的windows 控制臺命令,以后再作總結(jié)劳澄。
9.adb pull 和 adb push
adb pull <設(shè)備中的文件路徑> <本地路徑>:從模擬器或設(shè)備中復(fù)制文件到本地地技。
adb push <本地文件路徑> <設(shè)備中的路徑>:將本地文件或目錄復(fù)制到模擬器或設(shè)備。
這里還涉及到一個權(quán)限的問題秒拔,在后續(xù)的博文中再作介紹莫矗。
10.adb shell dumpsys
Android提供的dumpsys工具用于查看感興趣的系統(tǒng)服務(wù)信息與狀態(tài)。
參考下表:
11.adb shell monkey
跑monkey是android自動化測試的一種手段砂缩,所謂monkey測試就是模擬用戶的按鍵輸入作谚,觸摸屏輸入,手勢輸入等庵芭。當Monkey程序在模擬器或設(shè)備運行的時候妹懒,如果用戶比如點擊,觸摸喳挑,手勢或一些系統(tǒng)級別的事件的時候彬伦,它就會產(chǎn)生隨機脈沖,所以可以用Monkey的隨機重復(fù)的方法對apk作壓力測試伊诵,來測試android
app的穩(wěn)定性单绑。
如下為測試騰訊新聞apk的一個簡單實例:
說明:第一個-s指定設(shè)備,如果只連接了一臺設(shè)備曹宴,可不用該參數(shù)搂橙。
-p <apk包名>只允許系統(tǒng)啟動指定的app,如果不指定笛坦,將允許系統(tǒng)啟動設(shè)備中的所有app区转,也可指定多個包。
--throttle <毫秒數(shù)> 指定用戶操作(事件)間的時延版扩。
--ignore-crashes 指定當應(yīng)用程序崩潰時废离,Monkey依然發(fā)送事件,直到事件計數(shù)完成礁芦。
--ignore-timeouts 當應(yīng)用程序發(fā)生ANR錯誤時蜻韭,Monkey依然會發(fā)送事件悼尾,直到事件計數(shù)完成。
第2個-s肖方,用于指定偽隨機數(shù)生成器的seed值闺魏,如果seed相同,則兩次Monkey測試所產(chǎn)生的事件序列也相同的俯画。
-v 用于指定反饋信息級別析桥,總共分為level 0、level 1艰垂、level 2三個級別泡仗,級別越高,輸出的日志越詳細材泄。
最后的數(shù)字(這里是500):表示Monkey程序模擬500次隨機用戶操作事件沮焕。
>輸出測試結(jié)果到D:\monkeylog.txt
更詳細的參數(shù)可查看參考文獻5。
部分測試結(jié)果如下:
對于測試結(jié)果的分析拉宗,通過搜索關(guān)鍵詞來定位錯誤,主要包括以下四個方面:
1)ANR(Application Not
Response):程序無響應(yīng)辣辫,一般主線程超過5秒沒處理就會出現(xiàn)ANR錯誤旦事。通過搜索ANR關(guān)鍵詞來定位關(guān)鍵的事件信息。除了導(dǎo)出日志外急灭,還可以將/data/anr/目錄下的trace.txt文件導(dǎo)出姐浮,用來定位分析問題。使用>adb
pull /data/anr/trace.txt d:\ 將trace.txt文件導(dǎo)出到d盤葬馋。
2)ForceClosed或其他異常退出信息:通過搜索Fatal關(guān)鍵詞來定位卖鲤。
3)崩潰問題:通過搜索Exception關(guān)鍵詞來定位。
4)發(fā)生異常后畴嘶,通過搜索Crash關(guān)鍵詞來定位到詳細的堆棧信息蛋逾。
?12.kill
kill用來中止一個進程。
比如我們在跑monkey的時候窗悯,怎么強制關(guān)閉monkey呢区匣,可以用kill <monkey進程PID>
說明:另開啟一個cmd,找到monkey的pid號蒋院,然后殺掉即可亏钩。
參考文獻:
1.Android調(diào)試橋:http://www.iteye.com/topic/260042
2.Android性能分析工具dumpsys的使用:http://www.open-open.com/lib/view/open1405061994872.html
3.adb shell 中的am pm命令:http://www.android100.org/html/201312/09/4957.html
4.adb shell 啟動應(yīng)用程序的方法:http://blog.chinaunix.net/uid-26997997-id-3350449.html
5.Monkey壓力測試詳解:http://blog.csdn.net/huangbiao86/article/details/8490743