博客專欄

EEPW首頁(yè) > 博客 > adb調(diào)試工具使用

adb調(diào)試工具使用

發(fā)布人:電子禪石 時(shí)間:2023-02-24 來(lái)源:工程師 發(fā)布文章
1.ADB概念

ADB,全名Android Debug Bridge,是Android提供的一個(gè)通用的調(diào)試工具,是一個(gè)C/S架構(gòu)的命令行工具,通過這個(gè)工具,使得我們的PC能夠和Android設(shè)備來(lái)進(jìn)行通信。

1.2 ADB的工作原理:

adb包含三個(gè)部分:


a. Client端:運(yùn)行在開發(fā)機(jī)器中,用來(lái)發(fā)送adb命令,比如電腦


b. Daemon守護(hù)進(jìn)程:運(yùn)行在調(diào)試設(shè)備,比如手機(jī)、模擬器中,用來(lái)接收并執(zhí)行adb命令


c. Server端:運(yùn)行在開發(fā)機(jī)器中,用來(lái)管理Client端和手機(jī)端Daemon之間的通信。


當(dāng)在電腦命令行窗口中輸入adb 命令時(shí),會(huì)先執(zhí)行adb客戶端,客戶端拿到命令之后,會(huì)發(fā)送給adb服務(wù)端,server再將命令傳給Daemon,最后在手機(jī)上執(zhí)行。假如在手機(jī)上安裝一個(gè)應(yīng)用,會(huì)有一個(gè)返回信息,會(huì)將信息傳遞給adb服務(wù)器,adb 在給客戶端,最后顯示在命令行。


總結(jié):


a.client端將命令發(fā)送給server端


b.server端會(huì)將命令發(fā)送給daemon端


c.daemon端進(jìn)行執(zhí)行


d.將執(zhí)行結(jié)果,返回給server端


e.server端將結(jié)果再返回給client端


2.準(zhǔn)備工作

2.1 打開調(diào)試模式

為了使用adb來(lái)控制、調(diào)試Android設(shè)備,我們需要使用USB數(shù)據(jù)線將PC和Android手機(jī)設(shè)備進(jìn)行連接,當(dāng)然必須要將手機(jī)設(shè)備的USB調(diào)試模式打開。


Android模擬器種類:
- Android Studio emulator(官方),要根據(jù)電腦的性能進(jìn)行使用
- genymotion(國(guó)外的軟件,需要訪問外網(wǎng)才可以使用)
- mumu、雷電、夜神、逍遙等第三方模擬器(強(qiáng)烈推薦第三方軟件)


2.2 安裝adb

1)安裝JDK


2)Mac中安裝ADB命令


brew install android-platform-tools


3.ADB相關(guān)指令牛刀小試

3.1 簡(jiǎn)單指令

1)驗(yàn)證adb 是否安裝成功


adb help

或者

adb --help

會(huì)出現(xiàn)adb的版本和幫助信息


2)開啟或者關(guān)閉服務(wù)


adb start-server:開啟adb服務(wù)
adb kill-server:關(guān)掉adb服務(wù)


3)adb devices : 查看電腦是否連接設(shè)備


adb devices
或者
adb devices -l
或者
adb get-state


使用該指令將返回設(shè)備狀態(tài)信息,該狀態(tài)信息包含三種


devices狀態(tài):表示移動(dòng)設(shè)備或者模擬器已經(jīng)連接到adb服務(wù)器上

offline狀態(tài):表示移動(dòng)設(shè)備或者模擬器沒有連接到adb服務(wù)器或者沒有響應(yīng)

no devices狀態(tài):表示沒有設(shè)備或者模擬器連接

3)adb install :安裝


第一種情況:當(dāng)只有一臺(tái)設(shè)備時(shí)


a. adb install apk路徑
b. adb install -r :覆蓋原來(lái)安裝的軟件,并保留數(shù)據(jù)
c. adb install-multiple demo1.apk demo2.apk
d. adb install -t demo1.apk : 如果在安裝中,遇到Failure [INSTALL_FAILED_TEST_ONLY installPackageLI],則使用該命令
e. adb install -d demo.apk :允許版本代碼升級(jí)
f. adb install -g demo.apk :授權(quán)所有運(yùn)行時(shí)權(quán)限


第二種情況:當(dāng)有多臺(tái)設(shè)備時(shí),使用-s 序列號(hào) 進(jìn)行指定設(shè)備


adb -s 序列號(hào) install apk路徑


4)adb uninstall :卸載


adb unstall demo.apk

卸載設(shè)備中的應(yīng)用,并希望保留配置和緩存文件
adb -s 序列號(hào) shell pm uninstall -k 包名


5)adb pull : 將移動(dòng)設(shè)備中的文件傳送到PC上


adb pull 移動(dòng)設(shè)備路徑 PC路徑


6)adb push :將PC中的文件傳送到移動(dòng)設(shè)備端


adb push PC路徑 移動(dòng)設(shè)備路徑
adb push PC路徑 /sdcard/



7)adb logcat:查看和跟蹤系統(tǒng)日志緩沖區(qū)的信息,


adb logcat >/Users/xxxx/demo.log
或者
adb -s 序列號(hào) logcat >/Users/xxxx/demo.log

日志等級(jí),優(yōu)先級(jí)從低到高分為以下幾種:


V——Verbose(最低等級(jí),開發(fā)調(diào)試中的一些詳細(xì)信息,僅在開發(fā)中使用,不可再發(fā)布產(chǎn)品中)
D——Debug(調(diào)試,用于調(diào)試的信息,可以在發(fā)布產(chǎn)品中關(guān)閉,比較常見)
I——info(信息,一般提示性的信息)
W——Warning(警告)
E——Error(錯(cuò)誤,已經(jīng)出現(xiàn)可影響運(yùn)行的錯(cuò)誤,比如應(yīng)用crash時(shí)輸出的日志)
在 E級(jí)別中可以搜索這個(gè)關(guān)鍵字:fatal exception
ANR全名Application Not Responding,也就是應(yīng)用無(wú)響應(yīng)當(dāng)操作在一段時(shí)間內(nèi)系統(tǒng)無(wú)法處理時(shí),系統(tǒng)層面會(huì)彈出ANR對(duì)話框
在日志中查詢:ANR in
在查到ANR in 之后 上一行會(huì)有


查看日志常用的參數(shù)


adb logcat -v time 打印時(shí)間
adb logcat -v color 使用不同的顏色來(lái)顯示每個(gè)優(yōu)先級(jí)
adb logcat -f <filename> 將日志輸出到文件(文件存在手機(jī)上),例如,adb logcat -f /sdcard/log.log
adb logcat > log.log 保存日志到PC上
adb logcat -c 清理已存在的日志
adb logcat *:W 打印Warning以上級(jí)別的日志
adb logcat ActivityManager:D  '*:S' 過濾tag 為ActivityManager,level為Debug及以上級(jí)別的日志(S表示無(wú)記載silent,最高優(yōu)先級(jí),絕不輸出任何內(nèi)容)
3.2 高級(jí)指令——adb shell指令講解

Android系統(tǒng)是基于Linux系統(tǒng)開發(fā)的,支持常見的Linux命令,這些命令都保存在手機(jī)“/system/bin”文件中,如下圖所示:

在這里插入圖片描述


1)顯示手機(jī)當(dāng)前目錄的所有內(nèi)容


adb shell ls
或者分開使用
~~adb shell
~~ls

注意:使用exit退出提示符
如果在操作過程中出現(xiàn)沒有權(quán)限的問題,則需要切換root用戶
su root


2)查看電池電量的相關(guān)信息


adb shell dumpsys battery 
描述信息:
AC powered: false        //false表示沒有使用AC電源供電
USB powered: true        //true表示使用USB電源供電
Wireless powered: false     //false表示沒使用無(wú)線電源
status: 2             //2表示電池正在充電,1表示沒充電
health: 2             //2表示電池狀態(tài)優(yōu)秀
present: true           //true表示已安裝電池
level: 42             //電池百分比
scale: 100             //滿電量時(shí)電池百分比為100%(不確定是否正確)
voltage: 3868           //電池電壓
temperature: 330         //電池溫度為25攝氏度
technology: Li-ion        //電池類型為鋰電池


在這里插入圖片描述



3) 查看無(wú)限網(wǎng)絡(luò)信息


adb shell dumpsys wifi
由于該指令輸出的信息很多,所以在此加入?yún)?shù),當(dāng)輸出信息在顯示滿一頁(yè)的時(shí)候就暫停輸出
如果想再繼續(xù)輸出,則需要按空格鍵繼續(xù)顯示下頁(yè)內(nèi)容。按“Q”停止顯示后續(xù)輸出信息。
adb shell dumpsys wifi | more


4)查看電源管理相關(guān)信息


adb shell dumpsys power
含義:可以判斷手機(jī)是否處于鎖屏狀態(tài)
根據(jù)關(guān)鍵信息進(jìn)行查詢,僅輸出屏幕關(guān)閉時(shí)間的設(shè)置信息
windows設(shè)置:
adb shell dumpsys power | findstr "mScreenOffTimeoutSetting"
Linux設(shè)置:
adb shell dumpsys power | grep "mScreenOffTimeoutSetting"


5)am


am 全稱為Activity Manager ,可以使用am去模擬各種系統(tǒng)的行為
adb shell am start com.taobao.taobao/com.taobao.tao.TBMainActivity


6)獲取包名和界面名


包名(Package,具有唯一性)
界面名(activity)
 adb shell dumpsys window | grep mFocusedApp
 或者
 adb shell "dumpsys window | grep mCurrentFocus"

在這里插入圖片描述


7)獲取啟動(dòng)時(shí)間——adb shell am start -W 包名/界面名

?  ~ adb shell am start -W com.qiniu.pili.droid.shortvideo.effect.demo/com.qiniu.pili.droid.shortvideo.demo.activity.MainActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qiniu.pili.droid.shortvideo.effect.demo/com.qiniu.pili.droid.shortvideo.demo.activity.MainActivity }
Status: ok
Activity: com.qiniu.pili.droid.shortvideo.effect.demo/com.qiniu.pili.droid.shortvideo.demo.activity.MainActivity
ThisTime: 289
TotalTime: 289
WaitTime: 311
Complete
以毫秒為單位
點(diǎn)擊圖標(biāo)然后松開,這個(gè)時(shí)間是系統(tǒng)時(shí)間(分配內(nèi)存和CPU的時(shí)間),應(yīng)用application等待資源啟動(dòng)的時(shí)間
ThisTime:為界面啟動(dòng)耗時(shí)
TotalTime:應(yīng)用自身啟動(dòng)耗時(shí)=ThisTime + 應(yīng)用application等資源啟動(dòng)時(shí)間
WaitTime:系統(tǒng)啟動(dòng)耗時(shí)=TotalTime + 系統(tǒng)資源啟動(dòng)時(shí)間


8)adb shell pm list packages 列出包名


- 列出所有的包名
adb shell pm list packages
- 列出通過第三方安裝的包
adb shell pm list packages -3
pm全稱為package manager ,可以使用pm命令模擬Android行為或者查詢?cè)O(shè)備上的應(yīng)用。


9)獲取手機(jī)Android系統(tǒng)各個(gè)分區(qū)的相關(guān)信息

10) 清除應(yīng)用數(shù)據(jù)及緩存

pm 表示package management
adb shell pm clear <包名>


4. adb 模擬手機(jī)按鍵

相關(guān)文檔:https://developer.android.com/reference/android/view/KeyEvent


打開“指針位置” 設(shè)置

設(shè)置——開發(fā)者選項(xiàng)——指針位置

執(zhí)行 adb shell input 命令

在這里插入圖片描述

- 模擬點(diǎn)擊事件
adb shell input tap x坐標(biāo) y坐標(biāo)
adb shell input tap 528 1539
- 輸入文本
首先需要把光標(biāo)移到輸入框,然后執(zhí)行以下命令
adb shell input text zengzengzeng
- 模擬滑動(dòng)事件
adb shell swip <起點(diǎn)x> <起點(diǎn)y> <終點(diǎn)x> <終點(diǎn)y> <滑動(dòng)時(shí)長(zhǎng)>
adb shell input swipe 528 1539 528 1300 2000
2000為滑動(dòng)時(shí)間,單位是毫秒
- 返回鍵
adb shell input keyevent 4
- 返回home鍵(置應(yīng)用于后臺(tái))
adb shell input keyevent 3
- 音量放大
adb shell input keyevent 24
- 音量縮小
adb shell input keyevent 25

5. CPU使用情況

1)查看當(dāng)前系統(tǒng)CPU使用情況:


adb shell dumpsys cpuinfo
獲取的是一段時(shí)間的均值



2)進(jìn)程占用情況


adb shell top 
adb shell top | grep "包名" —— 查看某個(gè)包的一些性能
adb shell top -d 1 |grep "包名"


3)內(nèi)存使用情況


adb shell dumpsys meminfo

————————————————


原文鏈接:https://blog.csdn.net/weixin_42182599/article/details/120654697


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: adb

技術(shù)專區(qū)

關(guān)閉