常用的adb命令
在平時的工作中,會經常用到adb命令,在這里稍微整理了一下。那標題也許改為“我常用的adb命令”也許更確切一些。anyway,進入正題。
一.概要
1.什么是adb?
adb全稱為Android Debug Bridge,就是起到調試橋的作用。通過adb我們可以在Eclipse中方便通過DDMS來調試Andriod程序,說白了就是debug工具。adb的工作方式比較特殊,采用監聽Socket TCP 5554等端口的方式讓IDE和Qemu通訊,默認情況下adb會daemon相關的網絡端口,所以當我們運行Eclipse時adb進程就會自動運行。
2.adb工作原理
不是很理解?那就來看看它的工作原理吧。
上圖是一個簡單的adb工作原理圖。adb本身是一個客戶端服務器應用程序,由三個組件組成:Client,Server,Daemon。
當你啟動一個adb Client(客戶端),客戶端首先確認是否已有一個adb Server(服務器)進程在運行。如果沒有,則啟動服務進程。當服務器運行, adb服務器就會綁定本地的TCP端口5037并監聽adb客戶端發來的命令。
接著服務器將所有運行中的模擬器或設備實例建立連接。它通過掃描所有5555到5585范圍內的奇數端口來定位所有的模擬器或設備。一旦服務器找到 了adb daemon(守護程序),它將建立一個到該端口的連接。請注意任何模擬器或設備實例會取得兩個連續的端口:一個偶數端口用來相應控制臺的連接,和一個奇數端口用來響應adb連接。
一旦服務器與模擬器/設備實例建立連接,就可以使用adb命令控制和訪問該實例。
3.adb的作用
借助adb工具,我們可以管理設備或手機模擬器的狀態,還可以進行很多手機操作,如安裝軟件、系統升級、運行shell命令等等。簡而言之,adb就是連接Android手機和PC端的橋梁,可以讓用戶在電腦上對手機進行全面的操作。
二.常用命令
這個部分當然是介紹adb到底怎么用了。
1. adb devices
查看當前連接的設備(連接計算機的Android設備或者模擬器)。
2.adb install
adb install <apk文件路徑>,將指定的apk安裝到設備上,安裝的apk包會放在/data/app目錄下。
幾個參數:
-r 強制安裝
-d(真機,多個設備中只有一個真機時適用)
-e(模擬器,多個設備中只有一個模擬器時適用)
-s(指定設備,后接序列號)
adb –s 44a188f9 install –r test.apk(其中44a188f9即序列號,通過adb devices可獲取)
3.adb uninstall
adb uninstall <apk包名>
adb uninstall –k <apk包名>
-k參數為卸載軟件時保留配置和緩存文件
4.adb reboot
重啟設備
5.adb shell
通過adb shell 命令,就可以進入設備或者模擬器的shell環境了,在這個Linux shell中,我們就可以執行各種Linux命令了。
如果只想執行一條shell命令,就可以采用:adb shell [shell_command]
使用時常與grep或findstr一起使用,起到過濾作用。
6.adb shell su
前提手機已經root。獲取adb shell的root權限。
用su提權,用戶命令提示符有$變成#,如果手機沒有root,會提示su:permission denied。
7.adb shell ps/top
查看當前終端中的進程信息,如pid等
8.adb shell am/pm
am全稱為activity manager,使用am模擬各種系統的行為,如去啟動一個activity,強制停止進程,發送廣播進程,修改設備屏幕屬性等。
如:adb shell am start <apk包名>/<activityName>:啟動一個activity。
pm全稱為package manager,利用pm命令可模擬android行為或查詢設備上的應用等。
如:adb shell pm list packages
列出當前設備所有已安裝的程序的包名。
說明:
管道符“|”:可以把標準的輸入流與標準的輸出流進行合并,或者把某個命令的標準輸出流作為另一個命令的標準輸入流。exit退出shell。
由于grep為linux命令,運行單條adb shell 時并沒有進入linux shell環境,并不能用grep等其他linux命令,只能用window cmd的命令。
在這里可以用findstr來代替grep,使用 findstr [keyword]
對于常用的linux命令和常用的windows 控制臺命令,再另作介紹。
9.adb pull 和 adb push
adb pull <remote> <local>:從模擬器或設備中復制文件到本地。
adb push <local> <remote>:將本地文件或目錄復制到模擬器或設備。
10.adb shell dumpsys
Android提供的dumpsys工具用于查看感興趣的系統服務信息與狀態。
參考下表:
11.adb shell monkey
跑monkey是android自動化測試的一種手段,monkey測試本身很簡單,就是模擬用戶的按鍵輸入,觸摸屏輸入,手勢輸入等。當Monkey程序在模擬器或設備運行的時候,如果用戶比如點擊,觸摸,手勢或一些系統級別的事件的時候,它就會產生隨機脈沖,所以可以用Monkey用隨機重復的方法去負荷測試你開發的軟件。
說明:第一個-s指定設備,如果只連接了一臺設備,可省略。
-p <apk包名>只允許系統啟動指定的app,如果不指定,將允許系統啟動設備中的所有app,也可指定多個包。
--throttle <毫秒數> 指定用戶操作(事件)間的時延。
--ignore-crashes 指定當應用程序崩潰時,Monkey依然發送事件,直到事件計數完成。
--ignore-timeouts 當應用程序發生ANR錯誤時,Monkey依然會發送事件,直到事件計數完成。
第2個-s,用于指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。
-v 用于指定反饋信息級別(信息級別就是日志的詳細程度),總共分3個級別。level 0 1 2,其中level 2說明是最詳細的日志,包括了測試中選中/未選中的Activity信息。
最后的數字(這里是500)表示Monkey程序模擬500次隨機用戶事件。
>輸出測試結果到D:\monkeylog.txt
更詳細的參數可查看 參考文獻5 。
部分測試結果如下:
參考文獻:
1.Android調試橋: http://www.iteye.com/topic/260042
2.Android性能分析工具dumpsys的使用: http://www.baiduhome.net/lib/view/open1405061994872.html
3.adb shell 中的am 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