最实用的Android Debug Bridge (ADB)使用手册


title: Android Debug Bridge (ADB) 使用总结
date: 2019-11-12 00:39:37
tags: 'adb'
categories: note


第1节 最常用案例

注意: 应用包名默认为 com.example.app

1.1 启动应用主界面

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 即应用启动页面;

1.2 获取当前显示Activity

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

结果:

      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}

分析关键字:

  • mResumedActivity: 当前显示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 机器为1080 X 1920 分辨率的机器

1.4 获取App 冷热启动时间

注解: 冷启动指App 从0到完全加载的过程,热启动指:app从后台进入前台,重新显示的过程

假设:com.example.app 为测试应用包名,注意启动的Activity必须在清单文件AndroidManifest.xml中设置 Activity 属性exported=true

冷启动

  1. 模拟冷启动,强行停止应用com.example.app

    adb shell am force-stop com.example.app
    
  2. 获取启动时间

    adb shell am start -W com.example.app/.ui.client.MainActivity
    
  3. 输出结果

    Status: ok
    Activity: com.example.app/.ui.client.MainActivity
    ThisTime: 7198  该activity启动耗时
    TotalTime: 7198 应用自身启动耗时=ThisTime+应用application等资源启动时间
    WaitTime: 7346 系统启动应用耗时=TotalTime+系统资源启动时间
    Complete
    

热启动

  1. 模拟按Home键

    adb shell input keyevent 3
    
  2. 同上

1.5 清除App缓存

  1. 模糊查找包名

    adb shell pm list packages | grep com.example
    
  2. 清除所有与该包名相关的数据,deletes all data associated with a package.

    adb shell pm clear com.example.app
    

第2节 应用安装

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 强行停止

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

第3节 查看内存使用情况

adb shell dumpsys meminfo [pid or 空]

  • adb shell dumpsys meminfo 显示手机每个应用内存使用情况

    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
 # 查看进程28829 内存使用情况
 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节 启动原生组件(Component)

参见 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"(发送一个广播去关闭一个activity)
举例:adb shell am broadcast -a android.intent.action.MASTER_CLEAR(恢复出厂设置的方法,会清除内存所有内容)
举例:adb shell am broadcast -n com.lt.test/.MyBroadcast

4.3 传入Intent参数

 <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 整数,值为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 应用场景

  1. 嵌入一个DebugActivity用于存放一下Debug代码,adb 直接启动,开发测试过程中不用每次都启动app找到自己埋下的测试点;
  2. 动态测试组件,用adb动态传参,测试不同参数下组件的处理逻辑;
  3. App中埋入隐藏的控制点,可以在不改变代码的情况下,控制App内部逻辑走向

第5节 Logcat的使用

adb logcat -s System.out  ## 只查看System.out 的输出
-v
 adb logcat -v time *** ## 能查看logcat缓存的日志,定位之前发生的异常信息
 adb logcat -v brief 
adb logcat -v process  ##优先级 (进程ID) : 日志信息
adb logcat -v tag ##优先级 / 标签 : 日志信息
adb logcat -v thread  ##优先级 ( 进程ID : 线程ID) 标签 : 日志内容
adb logcat -v raw ##只输出日志信息
adb logcat -v time   ##日期 时间 优先级 / 标签 (进程ID) : 进程名称 : 日志信息
adb logcat -v long  ##[日期 时间 进程ID : 线程ID 优先级 / 标签] 日志信息 **

adb logcat -b main/events/system
adb logcat -g 
adb logcat *:E | grep "example"   ## 搜索指定的错误信息

第6节 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 #进程状态
adb -s 20080411  shell cat /system/build.prop  //设备信息
adb shell top  // 查看设备cpu和内存占用情况
adb shell top -m 6 // 查看占用内存前6的app
adb shell top -n 1 // 刷新一次内存信息,然后返回
adb shell procrank // 查询各进程内存使用情况
adb shell kill [pid] // 杀死一个进程
adb shell ps // 查看进程列表 
adb shell ps -x [PID] // 查看指定进程状态
adb shell service list // 查看后台services信息
adb shell cat /proc/meminfo // 查看当前内存占用
adb shell cat /proc/iomem // 查看IO内存分区
adb shell  cat /sys/class/net/wlan0/address  // 获取mac地址
adb shell cat /proc/cpuinfo  // 获取cpu序列号

其他

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属性系统,使用getprop和setprop

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容