針對移動端 Android 的測試, adb 命令是很重要的一個點,必須將經常使用的 adb 命令熟記於心, 將會爲 Android 測試帶來很大的方便,其中不少命令將會用於自動化測試的腳本當中。java
adb 其實就是 Android Debug Bridge
, Android 調試橋的縮寫,adb 是一個 C/S 架構的命令行工具,主要由 3 部分組成:linux
運行在 PC 端的 Client : 能夠經過它對 Android 應用進行安裝、卸載及調試android
Eclipse 中的 ADT、SDK Tools 目錄下的 DDMS、Monitor 等工具,都是一樣地用到了 adb 的功能來與 Android 設備進行交互。
PC 端的手機助手,諸如 360 手機助手、豌豆莢、應用寶等,其除了安裝第三方應用方便,其餘的功能,基本上均可以經過 adb 命令去完成,這裏建議測試人員
儘可能不要在電腦上安裝這類手機助手,由於其自帶的 adb 程序可能會與 Android SDK 下的 adb 程序產生衝突,5037
端口被佔用,致使使用 adb 命令時沒法鏈接到設備git
運行在 PC 端的 Service : 其管理客戶端到 Android 設備上 adb 後臺進程的鏈接github
adb 服務啓動後,Windows 能夠在任務管理器中找到 adb.exe 這個進程shell
運行在 Android 設備上的 adb 後臺進程macos
執行
adb shell ps | grep adbd
,能夠找到該後臺進程,windows 請使用findstr
替代 grep編程
[xuxu:~]$ adb shell ps | grep adbd
root 23227 1 6672 832 ffffffff 00019bb4 S /sbin/adbd
這裏注意一個地方,就是 adb 使用的端口號,5037
,有必要記一下
接下來我將 adb 命令分爲三部分進行介紹,adb 命令
、adb shell 命令
、linux 命令
windows
在開發或者測試的過程當中,咱們能夠經過 adb 來管理多臺設備,其通常的格式爲:數組
adb [-e | -d | -s <設備序列號>] <子命令>
在配好環境變量的前提下,在命令窗口當中輸入 adb help 或者直接輸入 adb ,將會列出全部的選項說明及子命令。
這裏介紹一些裏面經常使用的命令:
adb devices , 獲取設備列表及設備狀態
[xuxu:~]$ adb devices
List of devices attached
44c826a0 device
adb get-state , 獲取設備的狀態
[xuxu:~]$ adb get-state
device
設備的狀態有 3 鍾,
device
,offline
,unknown
device:設備正常鏈接
offline:鏈接出現異常,設備無響應
unknown:沒有鏈接設備
adb kill-server , adb start-server , 結束 adb 服務, 啓動 adb 服務,一般兩個命令一塊兒用
通常在鏈接出現異常,使用 adb devices 未正常列出設備, 設備狀態異常時使用 kill-server,而後運行 start-server 進行重啓服務
adb logcat , 打印 Android 的系統日誌,這個能夠單獨拿出來說
adb bugreport , 打印dumpsys、dumpstate、logcat的輸出,也是用於分析錯誤
輸出比較多,建議重定向到一個文件中
adb bugreport > d:\bugreport.log
adb install , 安裝應用,覆蓋安裝是使用 -r 選項
windows 下若是須要安裝含有中文名的 apk ,須要對 adb 進行修改,百度能夠找到作出修改的adb , 支持中文命令的 apk,請自行搜索
adb uninstall , 卸載應用,後面跟的參數是應用的包名
,請區別於 apk 文件名
'-k' means keep the data and cache directories , -k 選項,卸載時保存數據和緩存目錄
adb pull , 將 Android 設備上的文件或者文件夾複製到本地
例如複製 Sdcard 下的 pull.txt 文件到 D 盤:
adb pull sdcard/pull.txt d:\
若是須要重命名爲 rename.txt:
adb pull sdcard/pull.txt d:\rename.txt
注意權限,複製系統權限的目錄下的文件,須要 root ,而且通常的 Android 機 root 以後並不能使用命令去複製,而須要在手機上使用相似於 RE 的文件瀏覽器,先對系統的文件系統進行掛載爲可讀寫後,才能在手機上覆制移動系統文件,這裏推薦使用小米手機的開發版本,IUNI 也是不錯滴~~
adb push , 推送本地文件至 Android 設備
例如推送 D 盤下的 push.txt 至 Sdcard:
adb push d:\push.txt sdcard/
sdcard 後面的斜槓不能少,不然會出現下面的錯誤:
[xuxu:~]$ adb push push.txt sdcard
failed to copy 'push.txt' to 'sdcard': Is a directory
權限問題同 pull 命令
adb root , adb remount, 只針對相似小米開發版的手機有用,能夠直接已這兩個命令獲取 root 權限,並掛載系統文件系統爲可讀寫狀態
adb reboot , 重啓 Android 設備
bootloader , 重啓設備,進入 fastboot 模式,同 adb reboot-bootloader 命令
recovery , 重啓設備,進入 recovery 模式,常常刷機的同窗比較熟悉這個模式
adb forward , 將 宿主機上的某個端口重定向到設備的某個端口
adb forward tcp:1314 tcp :8888
執行該命令後全部發往宿主機 1314 端口的消息、數據都會轉發到 Android 設備的 8888 端口上,所以能夠經過遠程的方式控制 Android 設備。
adb connect 遠程鏈接 Android 設備
手機、PC處於相同的網絡下,手機 root ,安裝應用 adbWireless ,啓動應用後點擊界面中間的按鈕:
接着運行
adb connect 192.168.1.102
, 便可經過無線的方式鏈接手機,缺點是速度比較慢
有人問過我,爲何會知道這麼多的命令,答案就是我比較愛折騰,這裏你們先要了解我爲何要區分 adb 命令和 adb shell 命令 。
簡單點講,adb 命令是 adb 這個程序自帶的一些命令,而 adb shell 則是調用的 Android 系統中的命令,這些 Android 特有的命令都放在了 Android 設備的 system/bin 目錄下,例如我再命令行中敲這樣一個命令:
[xuxu:~]$ adb shell hehe
/system/bin/sh: hehe: not found
很明顯,在 bin 目錄下並不存在這個命令。
本身愛折騰,想看看有哪些命令,也不想去找文檔,因而就啓動模擬器,將整個 system/bin
目錄複製了出來,而後一個一個的去試。。囧~~
打開這些文件就能夠發現,裏面有些命令實際上是一個 shell 腳本,例如打開 monkey 文件:
# Script to start "monkey" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/monkey.jar
trap "" HUP
exec app_process $base/bin com.android.commands.monkey.Monkey $*
再好比打開 am:
#!/system/bin/sh
#
# Script to start "am" on the device, which has a very rudimentary
# shell.
#
base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "$@"
還有 SDK sources/android-20/com/android/commands 目錄下:
[xuxu:...oid-20/com/android/commands]$ pwd
/Users/xuxu/utils/android/android-sdk-macosx/sources/android-20/com/android/commands
[xuxu:...oid-20/com/android/commands]$ ll
total 0
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 am
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 bmgr
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 bu
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 content
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 ime
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 input
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 media
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 pm
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 requestsync
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 settings
drwxr-xr-x 7 xuxu staff 238B 4 2 10:57 svc
drwxr-xr-x 6 xuxu staff 204B 4 2 10:57