1,什麼是adb:
ADB 全稱為 Android Debug Bridge,起到除錯橋的作用,是一個客戶端-伺服器端程式。其中客戶端是用來操作的電腦,服務端是 Android 裝置。ADB 也是 Android SDK 中的一個工具,可以直接操作管理 Android 模擬器或者真實的 Android 裝置。
2,為什麼要用adb:
執行裝置的 shell(命令列)
管理模擬器或裝置的埠對映
計算機和裝置之間上傳/下載檔案
可以對裝置的應用進行解除安裝安裝等
在 App 遇到 ANR/Crash 等 bug 時,可以透過 ADB 來抓取日誌
簡而言之,ADB 就是連線 Android 手機與 PC 端的橋樑,所以ADB又稱為安卓除錯橋(注意:是安卓,不是iOS),可以讓使用者在電腦上對手機進行全面的操作!
ADB的組成主要有三部分:
客戶端client:執行在你的電腦上,你可以透過shell來呼叫起一個客戶端。其他Android工具,例如:ADT插針、DDMS都可以建立出一個客戶端。【adb在mac或者linux上都可以使用;需要搭建環境變數才能使用】
伺服器server:執行在你電腦的後臺,負責管理client和daemon進行通訊。
守護程序daemon:執行在模擬器或者Android裝置的後臺。
二、adb環境搭建
adb除錯橋是Android SDK裡的一個工具,Android SDK是安卓系統軟體的開發工具包。作為新手推薦使用安卓開發新手整合包:adt-bundle (谷歌給安卓開發打包的一個環境)。adt-bundle環境搭建相對於簡單,而且app自動化測試的環境也可用。
具體的環境搭建步驟可參考另外一篇說明《adt-bundle環境搭建》。
三、adb連線Android裝置步驟
1、USB資料線連線
Android手機透過adb與PC端連線時,有幾個前提條件:
1.1、手機驅動
Android手機透過USB資料線連線PC端後,需要安裝驅動。一般會自動安裝,開啟開發者選項和USB除錯後“我的電腦”裡面能夠顯示連線的手機,並可檢視其目錄就沒問題。
當PC端提示驅動安裝失敗時,需要在PC端安裝360手機助手等連線應用,透過連線應用安裝好手機驅動環境後,要將360手機助手等應用解除安裝,因為這些應用與adb會用同一埠。
1.2、手機設定
◆手機需要開啟開發者選項和USB除錯。
開啟開發者選項的過程如下,設定—>關於手機—>連續點選7次“版本號”,然後在設定—>系統中出現開發者選項,開啟即可。
在開發者選項頁面,同時開啟“USB除錯”。
有的Android系統版本手機在開啟USB除錯時,有彈窗提示是否允許USB除錯,一定要選擇“確定”。還有的Android系統版本手機在開啟USB除錯時,詢問您是否接受允許透過此計算機進行除錯的 RSA 金鑰,也需要選擇同意。
最後一步,在開發者選項頁面,點選“選擇USB配置”然後選擇“MTP(多媒體傳輸)”
驗證連線
PC端透過cmd命令提示符頁面,輸入adb devices然後回車,看到如下圖結果,表示adb連線Android裝置成功。
WIFI遠端連線
Android手機透過wifi連線電腦執行adb,可實現遠端除錯。具體步驟如下:
1.1、連線準備
按照上面介紹的Android手機透過USB資料線連線的步驟完成配置,並連線成功。
1.2、透過IP連線裝置
◆將Android手機連線的WIFI,與執行adb的PC端連線的網路處於同一區域網。
◆Android手機透過USB資料線連線成功後,在cmd命令提示符頁面輸入:adb tcpip 5555 讓裝置在5555埠監聽TCP/IP連線。
查詢手機的IP地址,在設定—>WLAN—>點選所連線的WiFi,可以找到裝置的IP,如下圖:
拔掉USB資料線。
###注意,拔掉USB資料線後要確保開發者選項和USB除錯是開啟狀態;且“選擇USB配置”是勾選“MTP(多媒體傳輸)”狀態。
◆PC端在cmd命令提示符頁面輸入:adb connect <手機IP> 出現下圖所示結果,即表示連線成功。
驗證連線
PC端透過cmd命令提示符頁面,輸入:adb devices然後回車,看到如下圖結果,表示adb連線Android裝置成功。
斷開連線
Wifi遠端連線成功後,想要關閉連線,PC端透過cmd命令提示符頁面,輸入:adb disconnect <手機IP> 即可關閉adb連線。
————————————————
參考:https://blog.csdn.net/Asaasa1/article/details/109026811
三:ADB命令詳解
1,基本命令
adb version :顯示 adb 版本
adb help:幫助資訊,檢視adb所支援的所有命令
adb devices:檢視當前連線的裝置,已連線的裝置會顯示出來
adb get-serialno:也可以檢視裝置號
2,許可權命令
adb root:獲取Android管理員(root使用者)的許可權。
注意:一般測試機可使用root許可權。
Android版本9以上,不支援商用機使用root許可權,但可以修改底層一些配置
adb shell:登入裝置 shell,該命令將登入裝置的shell(核心),登入shell後,可以使用 cd,ls,rm 等Linux命令
adb remount:獲取System分割槽可寫許可權,需要root後才能有這個許可權
3,建立連線
adb -d:如果同時連了usb,又開了模擬器,連線當前唯一透過usb連線的安卓裝置
adb -e shell:指定當前連線此電腦的唯一的一個模擬器
adb -s <裝置號> shell:當電腦插多臺手機或模擬器時,指定一個裝置號進行連線
exit:退出
adb kill-server:殺死當前adb服務,如果連不上裝置時,殺掉重啟。(沒事不要用它)
adb start-server:殺掉後重啟,
5037:adb預設埠,如果該埠被佔用,可以指定一個埠號,如下命令↓
adb -p 6666 start-server:任意指定一個 adb shell 的埠
4,apk 操作指令
adb shell pm list packages:列出當前裝置/手機,所有的包名
adb shell pm list packages -f:顯示包和包相關聯的檔案(安裝路徑)
adb shell pm list packages -d:顯示禁用的包名
adb shell pm list packages -e:顯示當前啟用的包名
adb shell pm list packages -s:顯示系統應用包名
adb shell pm list packages -3:顯示已安裝第三方的包名
adb shell pm list packages xxxx:加需要過濾的包名,如:xxx = taobao
adb install <檔案路徑\apk>:將本地的apk軟體安裝到裝置(手機)上。如手機外部安裝需要密碼,記得手機輸入密碼。
adb install -r <檔案路徑\apk>:覆蓋安裝
adb install -d <檔案路徑\apk>:允許降級覆蓋安裝
adb install -g <檔案路徑\apk>:授權/獲取許可權,安裝軟體時把所有許可權都開啟
adb uninstall <包名>:解除安裝該軟體/app。
注意:安裝時安裝的是apk,解除安裝時是包名,可以透過 adb shell pm list packages 檢視需要解除安裝的包名。
adb shell pm uninstall -k <包名>:雖然把此應用解除安裝,但仍儲存此應用的資料和快取
adb shell am force-stop <包名>:強制退出該應用/app
5,檔案操作指令
adb push <本地路徑\檔案或資料夾> <手機端路徑>:把本地(pc機)的檔案或資料夾複製到裝置(手機)
注意點1:pc機路徑與Android機路徑,分隔符是不同的。
注意點2:複製失敗,大機率是無許可權。可先使用上面介紹過的兩個命令:adb root;adb remount。在使用 adb push 命令
adb pull <手機端路徑/檔案或資料夾> <pc機路徑>:把裝置(手機)的檔案或資料夾複製到本地。注意點同上
6,日誌操作指令
adb shell logcat -c:清理現有日誌
adb shell logcat -v time :輸出日誌,資訊輸出在控制檯
adb shell logcat -v time > <存放路徑\log.txt>:輸出日誌並儲存在本地檔案
Ctrl+C:終止日誌抓取
adb shell logcat -v time *:E > <存放路徑\log.txt>:列印級別為Error的資訊
日誌的等級:
-v:Verbse(明細)
-d:Debug(除錯)
-i:Info(資訊)
-w:Warn(警告)
-e:Error(錯誤)
-f:Fatal(嚴重錯誤)
抓取日誌的步驟先輸入命令啟動日誌,然後操作 App,復現 bug,再 ctrl+c 停止日誌,分析本地儲存的檔案。
:日誌是記錄手機系統在執行app時有什麼異常的事件
EXCEPTION
也可以把更詳細得Anr日誌拉取出來:adb shell pull /data/anr/traces.txt <存放路徑>
7,系統操作指令
adb shell getprop ro.product.model:獲取裝置型號
adb shell getprop ro.build.version.release:獲取Android系統版本
adb get-serialno:獲取裝置的序列號(裝置號)
adb shell wm size:獲取裝置螢幕解析度
adb shell screencap -p /sdcard/mms.png:螢幕截圖
adb shell screencap -p /sdcard/screenshot.png:螢幕截圖
adb pull /sdcard/mms.png <存放的路徑>:將截圖匯出到本地
adb pull /sdcard/screenshot.png <存放的路徑>:將截圖匯出到本地
adb shell dumpsys activity |find “mResumedActivity”:檢視前臺應用包名,必須先啟動app,適用於Android 8.0以上
adb shell cat /proc/meminfo:獲取手機記憶體資訊
adb shell df:獲取手機儲存資訊
adb shell screenrecord <存放路徑/xxx.mp4>:錄屏,命名以.mp4結尾
adb shell screenrecord --time-limit 10 <存放路徑/xxx.mp4>:錄屏時間為10秒
四,ADB 命令結合 monkey 的使用
1,什麼是monkey
Monkey 是Android SDK提供的一個命令列工具,可以簡單方便的傳送偽隨機的使用者事件流,對Android APP做壓力(穩定性)測試。主要是為了測試app是否存在無響應和崩潰的情況。
2,adb結合 monkey 的常用命令
adb shell monkey 100:對該裝置下,隨機應用,執行100次的隨機操作。(偽隨機)
adb shell monkey -p <包名> 100:指定應用(包)隨機操作100次。這裡演示的包名為:com.dfcyc.app.dffs
adb shell monkey -p <包名> -v -v -v 100 >D:\log.txt:指定應用隨機操作100次並列印日誌到指定路徑/檔案
-v:日誌等級,一共3級
D:\log.txt:指定路徑存放日誌,檔名自定義。
adb shell monkey -s <seed值> -p <包名> -v -v -v 100 >D:\log.txt:根據seed值 指定應用隨機操作100次並列印日誌到指定路徑/檔案
seed值:輸出log日誌檔案後,檔案內檢視。
adb shell monkey -p <包名> -v -v -v --throttle 1000 200 >D:\log.txt:指定應用隨機操作200次,每1000毫秒點選一次,並列印日誌到指定路徑/檔案。
–throttle:後面跟毫秒數
在命令執行過程中,按 Ctrl+C 可以退出,但不代表monkey停止 (包括執行monkey時拔掉資料線,仍然未停止),如果需要停止monkey可以殺死該程序 id,如下命令:
adb shell ps | findstr monkey:停止前先檢視當前系統,monkey在跑的 程序id
adb shell kill <程序pid>:強制殺死在跑的monkey程序
3,monkey的日誌分析
使用 Monkey 進行測試結束後,我們關注的是應用在測試中是否出現崩潰或無響應這類問題。測試結果可以透過如下方法判斷:
正常:
monkey測試順利執行完成,在log的最後,會列印當前執行時間的次數和所花費的時間。Monkey finished代表執行完成
異常:日誌內搜尋異常關鍵字
a. 無響應-Anr問題:在日誌中搜尋“ANR”
b. :在日誌中搜尋“CRASH”
c. 其他問題:在日誌中搜尋”Exception”
更多日誌相關資訊可自行百度
有實力的同學可以寫個小工具,自動進行日誌分析即可。
知識點:adb logcat的日誌和monkey命令日誌的區別
adb monkey日誌是記錄monkey命令在手機APP操作的事件。
adb logcat日誌是記錄手機系統在執行app時有什麼異常的事件。
參考:https://blog.csdn.net/weixin_54696666/article/details/125932251
https://zhuanlan.zhihu.com/p/567024111
https://blog.csdn.net/m0_60054525/article/details/132147381
使用命令構造裝置異常之後測試monkey,異常場景分為9種:
1、構造CPU使用率(開啟0核,佔有率20%)
adb shell /data/rphoen/cpu/rCPU type=usage cpu=0 percent=20
2、構造CPU負載(高負載,起1個程序,包含9個執行緒)
adb shell /data/rphoen/cpu/rCPU type=load process=1 thread=9
3、CPU插拔核 插拔操作:
插: adb shell echo 1 > /sys/device/system/cpu/cpu1/online
拔: adb shell echo 0 > /sys/device/system/cpu/cpu1/online
4、構造IO 讀寫負荷高:
adb shell /data/phone/io/rIO type=r_iowait dir=data bs=10240000 count =1 time=1
5、構造記憶體 寫100M負載
adb shell /data/phone/memory/rmem total=100m
6、構造睡眠喚醒狀態:
adb shell /data/phone/sleepwake/rSleepWake type=sleepwake cycle=1 sleep=11 wake=10
構造CPU頻率:
adb shell cat /sys/bus/cpu/device/cpu0/cpufreq/ scaling_available_frequencies
構造SD卡讀寫延遲:
adb shell /data/phone/sd/rSd type=read delay=55
構造溫度 CPU溫度:40
adb shell /data/phone/thernal/rThermal system_h 40