高級(jí)調(diào)試技巧之a(chǎn)db常見命令

概述

??ADB捶惜,即Android Debug Bridge批钠,就是通過(guò)命令查看我們需要的信息,比如手機(jī)ROM配置信息怠苔,日志等等同廉,是開發(fā)和測(cè)試工程師必備的技能之一。

常見命令

一嘀略、<sudo>adb常見命令: sudo超級(jí)權(quán)限模式

  • adb --help

adb devices 設(shè)備連接狀態(tài)

adb pull <remote> <local> 將設(shè)備存儲(chǔ)器的文件拷貝出來(lái)恤溶,例如:
adb pull /sdcard/Android/data/&package_name/files/MIUI/debug_log/&package_name temp/

adb push <local> <remote> 將文件拷貝到設(shè)備指定目錄, 與adb pull相反

adb install [-lrtsdg] <file> 安裝應(yīng)用
(-r: replace existing application)
(-d: allow version code downgrade)
(-g: grant all runtime permissions)

adb uninstall <package> 卸載應(yīng)用

adb start-server 開始adb服務(wù)
adb kill-server 殺掉adb服務(wù)

adb reboot 重啟設(shè)備

adb root 獲取root權(quán)限
adb remount 將/system, /vendor (if present) and /oem (if present)置為可寫模式帜羊,前提是先root
注:remount后的設(shè)備咒程,可以直接安裝apk,不受版本號(hào)限制讼育,adb push out/NaviLauncher00/Launcher.apk system/app

二帐姻、日志過(guò)濾

  1. adb logcat抓取日志: adb logcat --help
    用法: logcat [options] [filterspecs]

options包括:

  • -s 過(guò)濾TAG
  • -f 輸出日志到到手機(jī)的sd卡
  • -v 設(shè)置日志消息的輸出格式
    ?brief — 顯示優(yōu)先級(jí)/標(biāo)記和原始進(jìn)程的PID (默認(rèn)格式)
    ?process — 僅顯示進(jìn)程PID
    ?tag — 僅顯示優(yōu)先級(jí)/標(biāo)記
    ?thread — 顯示優(yōu)先級(jí)/標(biāo)記稠集,消息線程的PID和TID
    ?raw — 顯示原始的日志信息,沒(méi)有其他的元數(shù)據(jù)字段
    ?time — 顯示日期饥瓷,調(diào)用時(shí)間剥纷,優(yōu)先級(jí)/標(biāo)記,PID
    ?threadtime — 顯示日期呢铆,調(diào)用時(shí)間晦鞋,優(yōu)先級(jí)/標(biāo)記以及發(fā)出消息的線程的PID和TID
    ?long — 顯示所有的元數(shù)據(jù)字段并且用空行分隔消息內(nèi)容
  • -c 清除緩存區(qū)的日志,Clear (flush) the entire log and exit
  • -b 查看日志消息的緩沖區(qū)棺克, 包括'main','system', 'radio', 'events', 'crash', 'default' or 'all'
  • --pid=<pid> 打印指定進(jìn)程的日志

filterspecs格式:

  • <tag>[:priority]:不指定的話悠垛,默認(rèn)就是所有級(jí)別的所有日志
  • 日志的優(yōu)先級(jí),從低到高:
    V — Verbose (lowest priority, 冗長(zhǎng)的) 對(duì)應(yīng)于Log.v(tag)系列函數(shù)
    D — Debug (調(diào)試用) 對(duì)應(yīng)于Log.d()系列函數(shù)
    I — Info(線上用) 對(duì)應(yīng)于Log.i()系列函數(shù)
    W — Warning(警告日志) 對(duì)應(yīng)于Log.w()系列函數(shù)
    E — Error (發(fā)生錯(cuò)誤) 對(duì)應(yīng)于Log.e()系列函數(shù)
    F — Fatal (What a Terrible Failure娜谊,引起程序崩潰)對(duì)應(yīng)于Log.wtf()系列函數(shù)
    S — Silent (highest priority, on which nothing is ever printed)

用法舉例:

  • adb logcat -s ActivityManager [打印TAG為ActivityManager的日志]
  • adb logcat -v time -s ActivityManager [日志的打印格式為time]
  • adb logcat -c 或adb locat -c all [清除緩存區(qū)所有類型的日志]
  • adb logcat -c main crash [清除緩存區(qū)main和crash類型的日志]
  • adb logcat -b radio [查看包含無(wú)線裝置/電話相關(guān)消息的緩沖區(qū)日志]
  • adb logcat --pid="2661" [打印進(jìn)程號(hào)是2661的日志]
  • adb logcat -f /sdcard/log.txt [保存日志到手機(jī)的log.txt文件]
  • adb logcat -s ActivityManager:I WindowManager:W [輸出TAG為"ActivityManager"并且優(yōu)先級(jí)大于等于"Info"和TAG為"WindowManager"并且優(yōu)先級(jí)大于等于"Warn"的日志]
  1. grep命令确买,用于過(guò)濾/搜索的特定字符: grep --help
    用法: grep [選項(xiàng)]... PATTERN [FILE]...
    在每個(gè) FILE 或是標(biāo)準(zhǔn)輸入中查找 PATTERN。

選項(xiàng)包括:

  • -E 指定字符串做為查找文件內(nèi)容的樣式纱皆,一個(gè)可擴(kuò)展的正則表達(dá)式湾趾;
  • -r 指定要查找的目錄或文件(默認(rèn)當(dāng)前目錄);
  • -i 忽略字符大小寫派草;
  • -n 輸出的同時(shí)打印行號(hào)搀缠;
  • -a 等同于 --binary-files=text, 有二進(jìn)制輸出時(shí),不中斷打印

用法舉例

  • adb logcat -v threadtime | grep -inE "ActivityManager|WindowManager" [打印包含ActivityManager和WindowManager關(guān)鍵字的日志澳眷,關(guān)鍵字不區(qū)分大小寫胡嘿,顯示日志所在行數(shù)]
  • grep -rE "Child_" temp/log.txt [過(guò)濾電腦temp/log.txt文件中包含“Child_”關(guān)鍵字的日志并顯示在終端]
  • grep -rE "ActivityManager|WindowManager" temp/log.txt > output.text [過(guò)濾ActivityManager和WindowManager關(guān)鍵字的日志,并輸出到當(dāng)前目錄output.text文件中]
  1. 過(guò)濾進(jìn)程$pid的日志

獲取應(yīng)用進(jìn)程號(hào)見:“八钳踊、工作中高頻使用命令總結(jié)”

用法舉例:

  • adb logcat --pid="$pid"
  • adb logcat -v threadtime | grep -E "$pid"

三衷敌、系統(tǒng)屬性的獲取和修改

獲取系統(tǒng)屬性

  • adb shell getprop [獲取Android系統(tǒng)所有的配置信息,包括各種版本號(hào)拓瞪,內(nèi)存分配大小缴罗,手機(jī)型號(hào)等等]
  • adb shell getprop >temp/prop.txt [獲取所有配置信息并保存到本地文件]
  • adb shell getprop | grep "dalvik.vm.heapgrowthlimit" [獲取內(nèi)存分配的配置]
  • adb pull /system/build.prop temp/prop.txt [拷貝編譯配置文件,getprop包括build.prop信息]

修改系統(tǒng)屬性祭埂,前提是這些配置是可寫的:adb shell setprop [key] [value]

  • adb shell setprop dalvik.vm.heapgrowthlimit 512m [將分配內(nèi)存修改為512MB]

修改日志等級(jí)面氓,前提是配置文件可寫:adb shell setprop log.tag.YOUR_LOG_TAG [LEVEL]
作用:比如你的TAG只能打印INFO等級(jí)的日志,DEBUG不打印無(wú)法分析問(wèn)題蛆橡,怎么辦舌界?修改等級(jí),包括系統(tǒng)類泰演,比如ActivityManager等等呻拌,也可以修改,方便分析問(wèn)題睦焕。

  • adb shell setprop log.tag.EngineBridge DEBUG [將TAG為EngineBridge的日志打印級(jí)別改為DEBUG]

四藐握、dumpsys命令

查看所有系統(tǒng)服務(wù)信息

  • adb shell dumpsys

查看ActvityManagerService的信息

  • adb shell dumpsys activity [查看ActvityManagerService所有信息]
  • adb shell dumpsys activity package &package_name [查看當(dāng)前應(yīng)用]
  • adb shell dumpsys activity activities [查看Activity組件信息]
  • adb shell dumpsys activity top [查看當(dāng)前界面的UI信息(View Hierarchy)]
  • adb shell dumpsys activity services [查看Service組件信息]
  • adb shell dumpsys activity providers [查看ContentProvider組件信息]
  • adb shell dumpsys activity broadcasts [查看BraodcastReceiver信息]

查看應(yīng)用信息

  • adb shell dumpsys meminfo [查看系統(tǒng)進(jìn)程內(nèi)存信息分布情況]
  • adb shell dumpsys meminfo &package_name [查看當(dāng)前應(yīng)用內(nèi)存情況]
  • adb shell dumpsys package [查看安裝包信息]
  • adb shell dumpsys package &package_name [查看當(dāng)前應(yīng)用安裝包信息]

輸出系統(tǒng)崩潰日志
系統(tǒng)應(yīng)用:

  • adb shell dumpsys dropbox system_app_crash --print > crash.txt
  • adb shell dumpsys dropbox system_app_anr --print > anr.txt
    三方應(yīng)用:
  • adb shell dumpsys dropbox data_app_crash --print > crash.txt
  • adb shell dumpsys dropbox data_app_anr --print > anr.txt

五靴拱、am命令(ActivityManager):adb shell am help

參數(shù)包括

  • -n表示組件;-a表示動(dòng)作猾普;-d表示傳入的數(shù)據(jù)袜炕;-t表示傳入的類型;--es表示傳入鍵值對(duì)

用法舉例

  • adb shell am start -a android.intent.action.CALL -d tel:10086 [ 撥打電話]

  • adb shell am start -n com.android.browser/.BrowserActivity [啟動(dòng)瀏覽器]

  • adb shell am start -W com.android.browser/.BrowserActivity [統(tǒng)計(jì)啟動(dòng)時(shí)間]

  • adb shell am start -a android.intent.action.VIEW -d http://www.baidu.com [打開網(wǎng)址]

  • adb shell am stack list [查看所有activity的堆棧和任務(wù)信息]

六初家、pm命令(PackageManager):adb shell pm help

  • adb shell pm list packages [列出所有安裝應(yīng)用的包名]
  • adb shell pm clear &package_name [刪除指定應(yīng)用的數(shù)據(jù)]

七偎窘、項(xiàng)目日志使用舉例

查看所有原始下發(fā)語(yǔ)音指令:adb logcat -v threadtime | grep -a -iE "A"
如果覺得還不夠清晰,可以加關(guān)鍵字:
adb logcat -v threadtime | grep -a -iE "A|B"

如果你不知道跳轉(zhuǎn)界面的Activity:adb logcat -b events

過(guò)濾所有的小愛日志:grep -rE "Child_" temp/log.txt

\color{red}{八溜在、工作中高頻使用命令總結(jié)}

見:“一评架、<sudo>adb常見命令”

獲取進(jìn)程號(hào)的方式

  • Android7.0以下:
    打印所有進(jìn)程號(hào):adb shell ps
    打印指定應(yīng)用進(jìn)程號(hào):adb shell ps | grep -E "&package_name"
  • Android7.0及以上:
    打印所有進(jìn)程號(hào):adb shell ps -A
    打印指定應(yīng)用進(jìn)程號(hào):adb shell ps -A | grep -E "&package_name"

日志查看

  • 清除所有的緩存日志:adb locat -c 或 adb locat -c all 或 adb logcat -c main events radio system crash
  • 查看日志:adb logcat -v threadtime | grep -iE "&TAG1|&TAG2|..."
  • 查看日志(window不支持grep,測(cè)試同事用方便):adb logcat -s &TAG1 -s &TAG2
  • 查看異常日志:
    adb logcat -v threadtime | grep -iE "AndroidRuntime"
    adb logcat -v threadtime | grep -iE "FATAL"
    adb logcat -v threadtime | grep -iE "Exception"
    adb logcat -v threadtime | grep -iE "System.err"
    adb logcat -v threadtime | grep -iE "ANR"
    adb logcat -v threadtime | grep -iE "crash"
  • 保存日志:adb logcat -v threadtime > log.txt 或 adb logcat |tee log.txt
  • 搜索日志:grep -rE "&TAG1|&TAG2" temp/log.txt > output.txt
  • 查看界面跳轉(zhuǎn):adb logcat -b events

查看應(yīng)用內(nèi)存信息

  • 查看實(shí)時(shí)內(nèi)存:adb shell dumpsys meminfo &package_name

操作應(yīng)用

  • 清除應(yīng)用所有數(shù)據(jù):adb shell pm clear &package_name
  • 強(qiáng)制停止應(yīng)用進(jìn)程:adb shell am force-stop &package_name

啟動(dòng)Activity

  • 通過(guò)intent啟動(dòng)Activity:
  1. 先root獲取權(quán)限: adb root
  2. adb shell 'am start "intent://baidu.com#Intent;scheme=https;component=com.android.brower/com.android.brower.WebActivity;S.statusBarTextBlack=true;S.fullScreen=true;S.webFullScreen=true;S.navigationBarColor=%2301000000;B.webviewPaddingForPad=false;end"'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炕泳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子上祈,更是在濱河造成了極大的恐慌培遵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件登刺,死亡現(xiàn)場(chǎng)離奇詭異籽腕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)纸俭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門皇耗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人揍很,你說(shuō)我怎么就攤上這事郎楼。” “怎么了窒悔?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵呜袁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我简珠,道長(zhǎng)阶界,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任聋庵,我火速辦了婚禮膘融,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祭玉。我一直安慰自己氧映,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布攘宙。 她就那樣靜靜地躺著屯耸,像睡著了一般拐迁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疗绣,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天线召,我揣著相機(jī)與錄音,去河邊找鬼多矮。 笑死缓淹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的塔逃。 我是一名探鬼主播讯壶,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼湾盗!你這毒婦竟也來(lái)了伏蚊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤格粪,失蹤者是張志新(化名)和其女友劉穎躏吊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帐萎,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡比伏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疆导。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赁项。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖澈段,靈堂內(nèi)的尸體忽然破棺而出悠菜,到底是詐尸還是另有隱情,我是刑警寧澤败富,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布李剖,位于F島的核電站,受9級(jí)特大地震影響囤耳,放射性物質(zhì)發(fā)生泄漏篙顺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一充择、第九天 我趴在偏房一處隱蔽的房頂上張望德玫。 院中可真熱鬧,春花似錦椎麦、人聲如沸宰僧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)琴儿。三九已至段化,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間造成,已是汗流浹背显熏。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晒屎,地道東北人喘蟆。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鼓鲁,于是被迫代替她去往敵國(guó)和親蕴轨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 針對(duì)移動(dòng)端 Android 的測(cè)試骇吭, adb 命令是很重要的一個(gè)點(diǎn)橙弱,必須將常用的 adb 命令熟記于心, 將會(huì)為 ...
    指尖劃過(guò)諾言閱讀 836評(píng)論 0 1
  • pull 到電腦的當(dāng)前路徑下 push 到安卓系統(tǒng)文件路徑 查看sdcard剩余存儲(chǔ)空間 檢查文件系統(tǒng)的磁盤空間占...
    Amano閱讀 14,071評(píng)論 1 6
  • 1燥狰、日志相關(guān): adb logcat //顯示全部日志 adb logcat > c:\test.log //...
    學(xué)習(xí)不斷閱讀 59,090評(píng)論 0 11
  • 1膘螟、adb 簡(jiǎn)介 Android Debug Brige 安卓調(diào)試橋 2、安裝 1)Windows: 1碾局、按照...
    Jane_cd88閱讀 1,191評(píng)論 1 1
  • 簡(jiǎn)介 adb ( Android Debug Bridge)是一個(gè)通用命令行工具,其允許您與模擬器實(shí)例或連接的 A...
    是立品啊閱讀 265評(píng)論 0 0