最實(shí)用的Android Debug Bridge (ADB)使用手冊(cè)


title: Android Debug Bridge (ADB) 使用總結(jié)
date: 2019-11-12 00:39:37
tags: 'adb'
categories: note


第1節(jié) 最常用案例

注意: 應(yīng)用包名默認(rèn)為 com.example.app

1.1 啟動(dòng)應(yīng)用主界面

adb shell am start -n "com.example.app/com.example.app.ui.basic.activity.LoginActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

注解:

  • com.example.app.ui.basic.activity.LoginActivity 為配有 action.MAINcategory.LAUNCHER的Activity 即應(yīng)用啟動(dòng)頁(yè)面祷愉;

1.2 獲取當(dāng)前顯示Activity

adb shell dumpsys activity activities | grep 'ActivityRecord' | grep 'com.example.app'

結(jié)果:

      Activities=[ActivityRecord{4df0741 u0 com.example.app/.ui.client.MainActivity t17}, ActivityRecord{45c40f u0 com.example.app/.ui.client.activity.InformationUnreadActivity t17}]
      * Hist #1: ActivityRecord{45c40f u0 com.example.app/.ui.client.activity.InformationUnreadActivity t17}
      * Hist #0: ActivityRecord{4df0741 u0 com.example.app/.ui.client.MainActivity t17}
        Run #1: ActivityRecord{45c40f u0 com.example.app/.ui.client.activity.InformationUnreadActivity t17}
        Run #0: ActivityRecord{4df0741 u0 com.example.app/.ui.client.MainActivity t17}
    mResumedActivity: ActivityRecord{45c40f u0 com.example.app/.ui.client.activity.InformationUnreadActivity t17}
    mLastPausedActivity: ActivityRecord{4df0741 u0 com.example.app/.ui.client.MainActivity t17}
  ResumedActivity: ActivityRecord{45c40f u0 com.example.app/.ui.client.activity.InformationUnreadActivity t17}

分析關(guān)鍵字:

  • mResumedActivity: 當(dāng)前顯示activity為InformationUnreadActivity
  • mLastPausedActivity 最近停止顯示的Activity為 mLastPausedActivity

1.3 獲取屏幕分辨率

adb shell dumpsys window displays

輸出(省略):

WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
  Display: mDisplayId=0
    init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1794x1731
    deferred=false mLayoutNeeded=false mTouchExcludeRegion=SkRegion((0,0,1080,1920))
  mLayoutSeq=500
  ....

注解:

  • cur=1080x1920 機(jī)器為1080 X 1920 分辨率的機(jī)器

1.4 獲取App 冷熱啟動(dòng)時(shí)間

注解: 冷啟動(dòng)指App 從0到完全加載的過(guò)程整慎,熱啟動(dòng)指:app從后臺(tái)進(jìn)入前臺(tái)邓梅,重新顯示的過(guò)程

假設(shè):com.example.app 為測(cè)試應(yīng)用包名拷邢,注意啟動(dòng)的Activity必須在清單文件AndroidManifest.xml中設(shè)置 Activity 屬性exported=true

冷啟動(dòng)

  1. 模擬冷啟動(dòng)狈茉,強(qiáng)行停止應(yīng)用com.example.app

    adb shell am force-stop com.example.app
    
  2. 獲取啟動(dòng)時(shí)間

    adb shell am start -W com.example.app/.ui.client.MainActivity
    
  3. 輸出結(jié)果

    Status: ok
    Activity: com.example.app/.ui.client.MainActivity
    ThisTime: 7198  該activity啟動(dòng)耗時(shí)
    TotalTime: 7198 應(yīng)用自身啟動(dòng)耗時(shí)=ThisTime+應(yīng)用application等資源啟動(dòng)時(shí)間
    WaitTime: 7346 系統(tǒng)啟動(dòng)應(yīng)用耗時(shí)=TotalTime+系統(tǒng)資源啟動(dòng)時(shí)間
    Complete
    

熱啟動(dòng)

  1. 模擬按Home鍵

    adb shell input keyevent 3
    
  2. 同上

1.5 清除App緩存

  1. 模糊查找包名

    adb shell pm list packages | grep com.example
    
  2. 清除所有與該包名相關(guān)的數(shù)據(jù)蔑匣,deletes all data associated with a package.

    adb shell pm clear com.example.app
    

第2節(jié) 應(yīng)用安裝

2.1 基本的安裝與卸載

adb install [options]  sample.apk
[-r] replace existing application
[-s] install application on sdcard
adb uninstall [options]  sample.apk
[-k] means keep the data and cache directories

2.2 強(qiáng)行停止

adb shell am force-stop  [options]  <app package name >

第3節(jié) 查看內(nèi)存使用情況

adb shell dumpsys meminfo [pid or 空]

  • adb shell dumpsys meminfo 顯示手機(jī)每個(gè)應(yīng)用內(nèi)存使用情況

    Applications Memory Usage (in Kilobytes):                                            
    Uptime: 69236415 Realtime: 69236415                                                  
                                                                                         
    Total PSS by process:                                                                
        121,950K: com.example.app:pushcore (pid 29262)                                 
         88,714K: system (pid 1882)                                                      
         68,646K: com.exinetian.app (pid 28829 / activities)                             
         63,149K: com.google.android.googlequicksearchbox:search (pid 2527)              
         48,624K: com.google.android.gms.persistent (pid 2533)                           
         45,421K: com.google.android.gms (pid 2691)                                      
         45,059K: com.google.android.apps.nexuslauncher (pid 2545 / activities)          
         44,975K: com.android.systemui (pid 2000)                                        
         29,179K: com.android.vending (pid 26823)                                        
         25,800K: com.google.android.inputmethod.latin (pid 1991)                        
         16,701K: com.android.phone (pid 2126)                                           
         12,922K: audioserver (pid 1634)                                                 
         10,259K: com.google.android.googlequicksearchbox:interactor (pid 2416)          
    
  • adb shell dumpsys meminfo <pid>

 #得到pid
 adb shell ps  -ef | grep com.example.app
 # 查看進(jìn)程28829 內(nèi)存使用情況
 adb shell dumpsys meminfo 28829

輸出:

** MEMINFO in pid 28829 [com.exinetian.app] **
                   Pss  Private  Private  SwapPss     Heap     Heap     Heap
                 Total    Dirty    Clean    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------
  Native Heap    17072    17004        0        0    27264    23545     3718
  Dalvik Heap     5870     5800        0        0     7523     3762     3761
 Dalvik Other     2653     2652        0        0
        Stack      140      140        0        0
       Ashmem        5        0        0        0
    Other dev       24        0       24        0
     .so mmap     5388      160     2148        0
    .apk mmap     3434     1856      356        0
    .ttf mmap      256        0      216        0
    .dex mmap    18456    13340     1244        0
    .oat mmap      228        0       80        0
    .art mmap     7737     7052      240        0
   Other mmap     5642        4     4360        0
      Unknown     1433     1416        0        0
        TOTAL    68338    49424     8668        0    34787    27307     7479

解析:

第4節(jié) 啟動(dòng)原生組件(Component)

參見(jiàn) http://developer.android.com/tools/help/adb.html#am

4.1 Activity

adb shell am start [options]
舉例:adb shell am start -a android.intent.action.MAIN
舉例:adb shell am start -n com.example.app.android.emop/.activity.login.LoginActivity

4.2 service

adb shell am startservice [options]

舉例:

舉例:adb shell am startservice -a com.lt.test.action.ONESERVICE
舉例:adb shell am startservice -n com.example.app.android.emop/.MyService

4.2 broadcast

adb shell am broadcast [options]

舉例:

舉例:adb shell am broadcast -a EMOP_OFF_LINE_ASSIGN_TASK  //when the permission 
         <receiver android:permission="com.example.permission.EMOP_SERVICE_RECEIVER" >
                  <intent-filter>
                        <action android:name="EMOP_OFF_LINE_ASSIGN_TASK"/>
                 </intent-filter >
        </receiver>
舉例:adb shell am broadcast -a "action_finish"(發(fā)送一個(gè)廣播去關(guān)閉一個(gè)activity)
舉例:adb shell am broadcast -a android.intent.action.MASTER_CLEAR(恢復(fù)出廠設(shè)置的方法,會(huì)清除內(nèi)存所有內(nèi)容)
舉例:adb shell am broadcast -n com.lt.test/.MyBroadcast

4.3 傳入Intent參數(shù)

 <INTENT> specifications include these flags:
        [-a <ACTION>] 
        [-d <DATA_URI>] 
        [-t <MIME_TYPE>]
        [-c <CATEGORY> [-c <CATEGORY>] ...]
        [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
        [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
        [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
        [-n <COMPONENT>] 
        [-f <FLAGS>] 
        [<URI>]

案例1:

am start -a android.intent.action.VIEW -d http://www.baidu.com
am start -a android.intent.action.CALL -d tel:12345  
am start -a android.intent.action.VIEW -d file:///sdcard/video.3gp -t video/*

案例2:

目的傳入

pid 整數(shù)盛垦,值為10
str 字符串湿弦,值為"hello, world"
am start -a android.intent.action.MAIN -n \
net.yurushao.demo/net.yurushao.demo.ExampleActivity  --ei pid 10 --es str "hello, world"

4.4 應(yīng)用場(chǎng)景

  1. 嵌入一個(gè)DebugActivity用于存放一下Debug代碼,adb 直接啟動(dòng)腾夯,開(kāi)發(fā)測(cè)試過(guò)程中不用每次都啟動(dòng)app找到自己埋下的測(cè)試點(diǎn)颊埃;
  2. 動(dòng)態(tài)測(cè)試組件,用adb動(dòng)態(tài)傳參蝶俱,測(cè)試不同參數(shù)下組件的處理邏輯班利;
  3. App中埋入隱藏的控制點(diǎn),可以在不改變代碼的情況下榨呆,控制App內(nèi)部邏輯走向

第5節(jié) Logcat的使用

adb logcat -s System.out  ## 只查看System.out 的輸出
-v
 adb logcat -v time *** ## 能查看logcat緩存的日志罗标,定位之前發(fā)生的異常信息
 adb logcat -v brief 
adb logcat -v process  ##優(yōu)先級(jí) (進(jìn)程ID) : 日志信息
adb logcat -v tag ##優(yōu)先級(jí) / 標(biāo)簽 : 日志信息
adb logcat -v thread  ##優(yōu)先級(jí) ( 進(jìn)程ID : 線程ID) 標(biāo)簽 : 日志內(nèi)容
adb logcat -v raw ##只輸出日志信息
adb logcat -v time   ##日期 時(shí)間 優(yōu)先級(jí) / 標(biāo)簽 (進(jìn)程ID) : 進(jìn)程名稱 : 日志信息
adb logcat -v long  ##[日期 時(shí)間 進(jìn)程ID : 線程ID 優(yōu)先級(jí) / 標(biāo)簽] 日志信息 **

adb logcat -b main/events/system
adb logcat -g 
adb logcat *:E | grep "example"   ## 搜索指定的錯(cuò)誤信息

第6節(jié) Android中常用的Linux命令

adb shell ps -t 
USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
root      1     0     268    180   c009b74c 0000875c S /init
cat /proc/34/status #進(jìn)程狀態(tài)
adb -s 20080411  shell cat /system/build.prop  //設(shè)備信息
adb shell top  // 查看設(shè)備cpu和內(nèi)存占用情況
adb shell top -m 6 // 查看占用內(nèi)存前6的app
adb shell top -n 1 // 刷新一次內(nèi)存信息,然后返回
adb shell procrank // 查詢各進(jìn)程內(nèi)存使用情況
adb shell kill [pid] // 殺死一個(gè)進(jìn)程
adb shell ps // 查看進(jìn)程列表 
adb shell ps -x [PID] // 查看指定進(jìn)程狀態(tài)
adb shell service list // 查看后臺(tái)services信息
adb shell cat /proc/meminfo // 查看當(dāng)前內(nèi)存占用
adb shell cat /proc/iomem // 查看IO內(nèi)存分區(qū)
adb shell  cat /sys/class/net/wlan0/address  // 獲取mac地址
adb shell cat /proc/cpuinfo  // 獲取cpu序列號(hào)

其他

Screencap

adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png
adb shell rm /sdcard/screen.png

input

input keyevent 82 # 菜單事件(MENU) 
input keyevent 4 # 回退事件 (BACK) 
input text “i_love_beijing” # 輸入文字

ime 輸入法管理

usage: ime list [-a] [-s] 
ime enable ID 
ime disable ID 
ime set ID
ime list  
ime set  com.baidu.input_huawei/.ImeService

Android具有prop屬性系統(tǒng),使用getprop和setprop

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闯割,一起剝皮案震驚了整個(gè)濱河市彻消,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宙拉,老刑警劉巖宾尚,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谢澈,居然都是意外死亡煌贴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門锥忿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)崔步,“玉大人,你說(shuō)我怎么就攤上這事缎谷。” “怎么了灶似?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵列林,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我酪惭,道長(zhǎng)希痴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任春感,我火速辦了婚禮砌创,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲫懒。我一直安慰自己嫩实,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布窥岩。 她就那樣靜靜地躺著甲献,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颂翼。 梳的紋絲不亂的頭發(fā)上晃洒,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音朦乏,去河邊找鬼球及。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呻疹,可吹牛的內(nèi)容都是我干的吃引。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼际歼!你這毒婦竟也來(lái)了惶翻?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鹅心,失蹤者是張志新(化名)和其女友劉穎吕粗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體旭愧,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颅筋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了输枯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片议泵。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖桃熄,靈堂內(nèi)的尸體忽然破棺而出先口,到底是詐尸還是另有隱情,我是刑警寧澤瞳收,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布碉京,位于F島的核電站,受9級(jí)特大地震影響螟深,放射性物質(zhì)發(fā)生泄漏谐宙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一界弧、第九天 我趴在偏房一處隱蔽的房頂上張望凡蜻。 院中可真熱鬧,春花似錦垢箕、人聲如沸划栓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)茅姜。三九已至,卻和暖如春月匣,著一層夾襖步出監(jiān)牢的瞬間钻洒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工锄开, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留素标,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓萍悴,卻偏偏與公主長(zhǎng)得像头遭,于是被迫代替她去往敵國(guó)和親寓免。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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