ADB環境配置和常用命令筆記
前言
針對移動端 Android 的測試, adb 命令是很重要的一個點,必須將常用的 adb 命令熟記於心, 將會為 Android 測試帶來很大的方便,其中很多命令將會用於自動化測試的腳本當中。
環境配置 Win7
首先找到platform-tools的目錄,一般在C盤的如下路徑C:\Users\你的使用者名稱\AppData\Local\Android\sdk\platform-tools,如果不在C盤就在其他盤的這個路徑找一下。
在環境變數(右鍵我的電腦->屬性->高階系統設定->環境變數)的系統變數中找到path這一行,把你的platform-tool路徑加入即可。
win+R 輸入cmd開啟命令列輸入adb 可以看到adb的詳細資訊就代表新增成功了。
Android Debug Bridge
adb 其實就是 Android Debug Bridge,Android 除錯橋的縮寫,adb 是一個 C/S 架構的命令列工具,主要由 3 部分組成:
執行在 PC 端的 Client : 可以通過它對 Android 應用進行安裝、解除安裝及除錯
Eclipse 中的 ADT、SDK Tools 目錄下的 DDMS、Monitor 等工具,都是同樣地用到了 adb 的功能來與 Android 裝置進行互動。 PC 端的手機助手,諸如 360 手機助手、豌豆莢、應用寶等,其除了安裝第三方應用方便,其他的功能,基本上都可以通過 adb 命令去完成,這裡建議測試人員儘量不要在電腦上安裝這類手機助手,因為其自帶的 adb 程式可能會與 Android SDK 下的 adb 程式產生衝突,5037 埠被佔用,導致使用 adb 命令時無法連線到裝置
執行在 PC 端的 Service : 其管理客戶端到 Android 裝置上 adb 後臺程序的連線
adb 服務啟動後,Windows 可以在工作管理員中找到 adb.exe 這個程序
執行在 Android 裝置上的 adb 後臺程序
執行 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 命令
adb 命令
在開發或者測試的過程中,我們可以通過 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 shell 命令
為什麼要區分 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 "[email protected]"
還有 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 uiautomator
drwxr-xr-x 3 xuxu staff 102B 4 2 10:57 wm
有沒有熟悉的命令? am 、pm、uiautomator …
下面介紹一些常用的 adb shell 命令 (其中pm、am 命令比較龐大,使用四級標題)
pm
Package Manager , 可以用獲取到一些安裝在 Android 裝置上得應用資訊
pm 的原始碼 Pm.java , 直接執行 adb shell pm 可以獲取到該命令的幫助資訊
不帶任何選項:列出所有的應用的包名(不知道怎麼找應用的包名的同學看這裡)
adb shell pm list package
-s:列出系統應用
adb shell pm list package -s
-3:列出第三方應用
adb shell pm list package -3
-f:列出應用包名及對應的apk名及存放位置
adb shell pm list package -f
-i:列出應用包名及其安裝來源,結果顯示例子:
package:com.zhihu.android installer=com.xiaomi.market
adb shell pm list package -i
命令最後增加 FILTER:過濾關鍵字,可以很方便地查詢自己想要的應用
引數組合使用,例如,查詢三方應用中知乎的包名、apk存放位置、安裝來源:
[xuxu:~]$ adb shell pm list package -f -3 -i zhihu
package:/data/app/com.zhihu.android-1.apk=com.zhihu.android installer=com.xiaomi.market
pm path 列出對應包名的 .apk 位置
[xuxu:~]$ adb shell pm path com.tencent.mobileqq package:/data/app/com.tencent.mobileqq-1.apk
pm list instrumentation , 列出含有單元測試 case 的應用,後面可跟引數 -f (與 pm list package 中一樣),以及 [TARGET-PACKAGE]
pm dump , 後跟包名,列出指定應用的 dump 資訊,裡面有各種資訊,自行檢視
adb shell pm dump com.tencent.mobileqq Packages: Package [com.tencent.mobileqq] (4397f810): userId=10091 gids=[3003, 3002, 3001, 1028, 1015] pkg=Package{43851660 com.tencent.mobileqq} codePath=/data/app/com.tencent.mobileqq-1.apk resourcePath=/data/app/com.tencent.mobileqq-1.apk nativeLibraryPath=/data/app-lib/com.tencent.mobileqq-1 versionCode=242 targetSdk=9 versionName=5.6.0 applicationInfo=ApplicationInfo{43842cc8 com.tencent.mobileqq} flags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ] dataDir=/data/data/com.tencent.mobileqq supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity] usesOptionalLibraries: com.google.android.media.effects com.motorola.hardware.frontcamera timeStamp=2015-05-13 14:04:24 firstInstallTime=2015-04-03 20:50:07 lastUpdateTime=2015-05-13 14:05:02 installerPackageName=com.xiaomi.market signatures=PackageSignatures{4397f8d8 [43980488]} permissionsFixed=true haveGids=true installStatus=1 pkgFlags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ] User 0: installed=true blocked=false stopped=false notLaunched=false enabled=0 grantedPermissions: android.permission.CHANGE_WIFI_MULTICAST_STATE com.tencent.qav.permission.broadcast com.tencent.photos.permission.DATA com.tencent.wifisdk.permission.disconnect
pm install , 安裝應用
目標 apk 存放於 PC 端,請用 adb install 安裝
目標 apk 存放於 Android 裝置上,請用 pm install 安裝
pm uninstall , 解除安裝應用,同 adb uninstall , 後面跟的引數都是應用的包名
- pm clear , 清除應用資料
pm set-install-location , pm get-install-location , 設定應用安裝位置,獲取應用安裝位置
[0/auto]:預設為自動 [1/internal]:預設為安裝在手機內部 [2/external]:預設安裝在外部儲存
am
又是一個龐大的命令。。。
am start , 啟動一個 Activity,已啟動系統相機應用為例
啟動相機
[xuxu:~]$ adb shell am start -n com.android.camera/.Camera Starting: Intent { cmp=com.android.camera/.Camera }
先停止目標應用,再啟動
[xuxu:~]$ adb shell am start -S com.android.camera/.Camera Stopping: com.android.camera Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.camera/.Camera }
等待應用完成啟動
[xuxu:~]$ adb shell am start -W com.android.camera/.Camera Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.camera/.Camera } Status: ok Activity: com.android.camera/.Camera ThisTime: 500 TotalTime: 500 Complete
啟動預設瀏覽器開啟一個網頁
[xuxu:~]$ adb shell am start -a android.intent.action.VIEW -d http://testerhome.com Starting: Intent { act=android.intent.action.VIEW dat=http://testerhome.com }
啟動撥號器撥打 10086
[xuxu:~]$ adb shell am start -a android.intent.action.CALL -d tel:10086 Starting: Intent { act=android.intent.action.CALL dat=tel:xxxxx }
- am instrument , 啟動一個 instrumentation , 單元測試或者 Robotium 會用到
am monitor , 監控 crash 與 ANR
[xuxu:~]$ adb shell am monitor Monitoring activity manager... available commands: (q)uit: finish monitoring ** Activity starting: com.android.camera
- am force-stop , 後跟包名,結束應用
- am startservice , 啟動一個服務
- am broadcast , 傳送一個廣播
…
input
這個命令可以向 Android 裝置傳送按鍵事件,其原始碼 Input.java
input text , 傳送文字內容,不能傳送中文
adb shell input text test123456
前提先將鍵盤設定為英文鍵盤
input keyevent , 傳送按鍵事件,KeyEvent.java
adb shell input keyevent KEYCODE_HOME
模擬按下 Home 鍵 ,原始碼裡面有定義:
public static final int KEYCODE_HOME = 3;
因此可以將命令中的 KEYCODE_HOME 替換為 3
input tap , 對螢幕傳送一個觸控事件
adb shell input tap 500 500
點選螢幕上座標為 500 500 的位置
input swipe , 滑動事件
adb shell input swipe 900 500 100 500
從右往左滑動螢幕
如果版本不低於 4.4 , 可以模擬長按事件
adb shell input swipe 500 500 501 501 2000
其實就是在小的距離內,在較長的持續時間內進行滑動,最後表現出來的結果就是長按動作
到這裡會發現,MonkeyRunner 能做到的事情,通過 adb 命令都可以做得到,如果進行封裝,會比 MR 做得更好。
screencap
4.4 新增的錄製命令
adb shell screenrecord sdcard/record.mp4
執行命令後操作手機,ctrl + c 結束錄製,錄製結果儲存至 sdcard
uiautomator
執行 UI automation tests , 獲取當前介面的控制元件資訊
runtest:executes UI automation tests RunTestCommand.java
[xuxu:~]$ adb shell uiautomator dump
UI hierchary dumped to: /storage/emulated/legacy/window_dump.xml
不加 [file] 選項時,預設存放在 sdcard 下
ime
[xuxu:~]$ adb shell ime list -s
com.google.android.inputmethod.pinyin/.PinyinIME
com.baidu.input_mi/.ImeService
列出裝置上的輸入法
[xuxu:~]$ adb shell ime set com.baidu.input_mi/.ImeService
Input method com.baidu.input_mi/.ImeService selected
選擇輸入法
wm
[xuxu:~]$ adb shell wm size
Physical size: 1080x1920
獲取裝置解析度
monkey
settings
dumpsys
log
這個命令很有意思,可以在 logcat 裡面列印你設定的資訊,具體用途自己思考!
adb shell log -p d -t xuxu "test adb shell log"
-p:優先順序,-t:tag,標籤,後面加上 message
[xuxu:~]$ adb logcat -v time -s xuxu
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
05-15 13:57:10.286 D/xuxu (12646): test adb shell log
getprop
檢視 Android 裝置的引數資訊,只執行 adb shell getprop,結果以 key : value 鍵值對的形式顯示,如要獲取某個 key 的值:
adb shell getprop ro.build.version.sdk
獲取裝置的 sdk 版本
linux 命令
操作你的 Android 裝置,常用到的命令,只列出,不詳解!
cat、cd、chmod、cp、date、df、du、grep、kill、ln、ls、lsof、netstat、ping、ps、rm、rmdir、top、touch、重定向符號 “>” “>>”、管道 “|”
有些可能需要使用 busybox ,另外建議 windows 下 安裝一個 Cygwin , 沒用過的請百度百科 Cygwin
END
補充一個引號的用途:
場景1、在 PC 端執行 monkey 命令,將資訊儲存至 D 盤 monkey.log,會這麼寫:
adb shell monkey -p com.android.settings 5000 > d:\monkey.log
場景2、在 PC 端執行 monkey 命令,將資訊儲存至手機的 Sdcard,可能會這麼寫:
adb shell monkey -p com.android.settings 5000 > sdcard/monkey.log
這裡肯定會報錯,因為最終是寫向了 PC 端當前目錄的 sdcard 目錄下,而非寫向手機的 Sdcard
這裡需要用上引號:
adb shell "monkey -p com.android.settings 5000 > sdcard/monkey.log"
對這些命令都熟悉之後,那麼接下來就是綜合對程式語言的應用,思考如何用語言去處理這些命令,使得這些命令更加的方便於測試工作。
所以個人 github 上的幾個工具,核心都是 adb 命令,關鍵的地方在於怎麼用自己所學的語言去處理這些命令。
貌似內容有點長。。
相關推薦
ADB環境配置和常用命令筆記
前言 針對移動端 Android 的測試, adb 命令是很重要的一個點,必須將常用的 adb 命令熟記於心, 將會為 Android 測試帶來很大的方便,其中很多命令將會用於自動化測試的腳本當中。 環境配置 Win7 首先找到platfor
git配置和常用命令
github 開啟git bash(右鍵選單Git Bash Here) // 生成rsa公鑰和私鑰 - Enter到底 >> ssh-keygen -t rsa -C "[email protected]" /* . 找到C:\Users\[使用者名稱]
Docker在Win 10上的配置和常用命令
前言 最近一直在用docker,所以想簡單介紹、記錄一下docker在win10系統上的配置和執行。 一、下載、安裝docker 這時右側有download for windows,點選此處。 這時候需要註冊,才能下載Docker CE for
Anaconda環境搭建和常用命令
Anaconda 是一個針對資料分析領域 Python 發行版本,它提供了包管理(packages)工具和虛擬環境(environment)管理, conda 命令可用於安裝、解除安裝、更新包、建立不同版本的 Python 獨立環境,可用於替換 pip 和 vi
玩轉Android monkey之環境配置和ADB命令
手機app測試 monkey 小強測試品牌 測試幫日記 轉發是對小編的最大支持接著上篇文章繼續《玩轉Android monkey之monkey是啥?monkey=猴子?》配置SDKl 新建一個系統環境變量:ANDROID_HOMEl 對應的值為你sdk的安裝目錄l 編輯系統環境變量:PATHl
雲伺服器配置環境Linux初學常用命令以及操作步驟
雲伺服器Linux初學常用命令 ls 檢視此目錄下所有資料夾的名稱 cd .. 返回上一個資料夾 cd // 返歸根目錄 cd file 檢視指定的資料夾 (file是你自己指定的資料夾的名稱) tar zxvf file 解壓你指定的gz包 (file是你自己
zookeeper叢集搭建和常用命令(筆記)
1.下載zookeeper安裝包 linux的套路是,一般都會把安裝檔案放到/opt下 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeepe
Cesium學習筆記(一):環境配置和首次執行
Cesium是國外一個基於JavaScript編寫的使用WebGL的地圖引擎。Cesium支援3D,2D,2.5D形式的地圖展示,可以自行繪製圖形,高亮區域,並提供良好的觸控支援,且支援絕大多數的瀏覽器和mobile。 這是官網上給出的例子,如果你可以成功執行
redis學習筆記01 — 基本介紹、安裝配置及常用命令
redis——NoSQL的一種 為了解決高併發、高可用、高擴充套件、大資料儲存等一系列問題而產生的資料庫解決方案,就是NoSQL NoSQL,非關係型資料庫,全名:Not Only Sql,它不能代替關係型資料庫,只能作為關係型資料庫的一個良好補充。 redis 簡介 是使用
esp8266學習筆記①:nodeMCU的編譯環境配置和韌體下載
一、工具下載 連結:https://pan.baidu.com/s/1Xl9mhIZFTpw1yaOvTOB6pQ 提取碼:2wls 二、開發環境的搭建 1、驅動安裝 首先開啟檔案包裡面的串列埠驅動檔案選擇需要安裝的驅動,看你的開發板是哪個串列埠晶片就選擇安裝哪個,一般開
centos svn鉤子配置同步和常用命令
先命令列 到web專案目錄遷出一份SVN資料 svn checkout svn://127.0.0.1/pwashop2 會提示輸入linux密碼,和SVN使用者名稱密碼 成功後,再修改鉤子。chmod並修改WEB專案許可權和鉤子許可權為777 svn重啟命令 [[em
JVM學習筆記3:GC日誌和常用命令工具
文檔 排除 for 深入理解 ren read tid 虛擬機 int 本篇是系列的第三篇,本篇會簡單介紹GC日誌如何查看以及常用的命令行工具使用方法。其實Java性能診斷和故障排除可以更多地使用阿裏開源的arthas:https://github.com/alibaba/
docker虛擬化安裝配置與常用命令
sta 80端口 ubuntu map 虛擬化 導出 6.5 關系 版本 一、Docker安裝配置 docker只有在centos6.5以上機器才能使用yum直接安裝,如果其他版本需要安裝centos擴展源epel。 docker官方文檔說要求Linux kernel至
windows常用命令筆記
windows 命令 筆記 常見 win+D:直接返回桌面win+R:打開運行win+E:打開資源管理器Ctrl+C:復制Ctrl+X:剪切Ctrl+V:粘貼Ctrl+D或者delete:刪除選中文件shift+delete:徹底刪除文件tab+Alt:切換程序F2:文件重命名Ctrl+Alt
CloudEngine 6800基礎配置-02_常用命令操作
操作記錄 engine -o 命令操作 常用命令 -h bsp lba 基礎 查看未提交配置 system-view ftp server enable display configuration candidate 刪除未提交的配置 clear configur
cocos2d-x win8下的環境配置和建立項目
cts ear bat article VS2010 移植 reat 還得 cocos cocos2dx 跨平臺。可是看網上說開發最合適還是在vs2010中,基本是編完後再移植到安卓。 1.去官網下載源代碼2.2.3版本號的。 2.然後運行根文件夾下的build
git常用命令筆記
如果 mod -m back 暫存區 height fig imp 推送 git學習筆記:原文鏈接http://984a5f0e.wiz03.com/share/s/2oiBYe02Akgr2ePJrA0kEOyE1GtIIE1P5Q2O2pcZYn1zGWaVgit設置g
Iptables常用配置和常用協議端口
iptables由於在服務器部署時,為了方便部署,把本機的iptables都關上了,然後還手欠的保存了設置,再想找回來是不可能了,那就重新設置一些適合我的防火墻策略吧!如果你使用遠程連接到你的服務器,那麽ssh端口是不可少的,不要把自己關在外面!ssh默認端口號是22,可以通過/etc/sshd/sshd.c
Oracle 常用命令筆記(1)
數據庫 oracle 命令說明crsctl start has 啟動數據庫HAS服務。crsctl stat res -t 檢查ASM中的各服務(DG、監聽、ASM實例等)狀態。srvctl status asm 查看ASM實例狀態,正常情況下主備機的ASM實例都應該處於啟動狀態。s
01_Linux安裝和常用命令聯系
pos class 測試 inux 常用 div 聯系 nbsp linu 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試 測試