• adb常用命令总结[持续更新]


    官方查询地址

    在这里插入图片描述

    一、什么情况有使用adb命令诉求?

    • Android开发已不仅限于手机
      虽然Android Studio及其三方GUI插件已经很完备了,但是Android应用很广,手机只是一个应用场景,还有诸如:TV、手表、机车、或别的定制系统,可能无法使用GUI工具、USB插口等情况,可能是通过串口等方式直接连到对应的Android系统中,我们平时使用的adb shell xxx其实就是用的Android系统的一些命令。

    • 命令行有时候更高效

    • GUI工具可能无法覆盖到一些命令使用场景

    • 可结合shell脚本编写更高效的脚本
          举个例子,假如现在一个系统开机之后就立刻启动的app,比如Launcher(系统桌面,不一定是Android系统的那个Launcher,可能一些三方定制系统有自己做这个系统桌面。)这种应用,出现了系统刚启动时的性能裂化(卡顿、ANR、启动速度变慢等等),但启动之后过一段时间就恢复正常了。这种问题,其实一般都会推测是开机阶段系统负载比较重引起的。针对这种情况,我们想要通过AS-Profiler、Systrace等工具分析App在刚开机时整个系统的CPU、内存、IOWait等指标,目前是无法实现的(起码我觉得还做不到,有好的方式的大佬请不吝赐教~),这时候我们就可以结合shell脚本和top命令,让应用启动时就去执行这个shell脚本,打印top的结果到文件中(其实有些性能测试脚本也是这样做的),这样就能从宏观上筛查是不是自己应用CPU、内存占用过高,或者别的其他应用占用过高引起的。

    • GUI工具并不能满足所有的需求场景:比如查看内存、cpu信息,通过shell脚本输出内存、cpu占用、帧率曲线等。虽然有Profiler这种强大的工具,但是目前使用的情况,获取到的数据经常还存在误差。
      注:adb shell命令本质上是对于Android系统的操作命令。
      在这里插入图片描述

    二、设备信息

    2.1 查看安卓版本 返回9,10,11

    adb shell getprop ro.build.version.release
    
    • 1

    在这里插入图片描述

    2.2 获取系统api版本:返回28,29

    adb shell getprop ro.build.version.sdk
    
    • 1

    在这里插入图片描述

    2.3 查询内存信息

    在linux系统中,/proc/目录下都会用文件的方式,存储着各种设备相关信息。比如:cpuinfo、meminfo、version(linux内核版本)等信息

    adb shell cat /proc/meminfo
    
    • 1

    输出:

    MemTotal:        5815012 kB //总的内存大小
    MemFree:          424212 kB
    MemAvailable:    3162140 kB	//可用内存大小
    Buffers:          232832 kB
    Cached:          2057404 kB
    SwapCached:        10700 kB
    Active:          2610536 kB
    Inactive:         690156 kB
    Active(anon):     835188 kB
    Inactive(anon):   309728 kB
    Active(file):    1775348 kB
    Inactive(file):   380428 kB
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    或者使用dumpsys meminfo命令:

    adb shell dumpsys meminfo [packageName] //需要指定查看某个包名对应进程占用内存时,后面带上packageName即可
    
    • 1

    输出结果:

    Applications Memory Usage (in Kilobytes):
    Uptime: 179965454 Realtime: 2420253989
    
    Total PSS by process:
        253,766K: system (pid 1589)
        252,549K: com.android.systemui (pid 3672 / activities)
        238,455K: com.miui.home (pid 20309 / activities)
        176,473K: com.tencent.mm (pid 21083)
        145,484K: com.tencent.mm:push (pid 1625)
         91,356K: com.iflytek.inputmethod.miui (pid 7621)
         ...
    
    Total PSS by OOM adjustment:
        432,299K: Native
             49,474K: android.hardware.camera.provider@2.4-service (pid 653)
             49,335K: surfaceflinger (pid 723)
             29,461K: logd (pid 546)
             22,543K: android.hardware.graphics.composer@2.1-service (pid 661)
             17,958K: zygote (pid 611)
             11,974K: webview_zygote (pid 3734)
             10,159K: qcrild (pid 1119)
             ...
    
    Total PSS by category:
        530,002K: Native
        288,069K: .dex mmap
        227,496K: .art mmap
        217,753K: Dalvik
        153,504K: .so mmap
        129,412K: .oat mmap
        ...
    
    Total RAM: 5,815,012K (status normal) //总内存大小和/proc/meminfo中是一样的
     Free RAM: 3,828,092K (  387,360K cached pss + 2,426,516K cached kernel +   595,148K cached ion +   419,068K free)
     Used RAM: 2,653,523K (2,112,671K used pss +   540,852K kernel)
     Lost RAM: 1,028,308K
         ZRAM:    93,492K physical used for   445,500K in swap (2,621,436K total swap)
       Tuning: 256 (large 512), oom   322,560K, restore limit   107,520K (high-end-gfx)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    2.4 查询cpu信息

    adb shell cat /proc/cpuinfo 
    
    • 1

    可看到cpu是几核,厂商信息。

    Processor       : AArch64 Processor rev 12 (aarch64)
    processor       : 0
    BogoMIPS        : 38.40
    Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
    CPU implementer : 0x51
    CPU architecture: 8
    CPU variant     : 0x7
    CPU part        : 0x803
    CPU revision    : 12
    
    processor       : 1
    BogoMIPS        : 38.40
    Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
    CPU implementer : 0x51
    CPU architecture: 8
    CPU variant     : 0x7
    CPU part        : 0x803
    CPU revision    : 12
    
    processor       : 2
    BogoMIPS        : 38.40
    Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
    CPU implementer : 0x51
    CPU architecture: 8
    CPU variant     : 0x7
    CPU part        : 0x803
    CPU revision    : 12
    
    processor       : 3
    BogoMIPS        : 38.40
    Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
    CPU implementer : 0x51
    CPU architecture: 8
    CPU variant     : 0x7
    CPU part        : 0x803
    CPU revision    : 12
    
    processor       : 4
    BogoMIPS        : 38.40
    Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
    CPU implementer : 0x51
    CPU architecture: 8
    CPU variant     : 0x7
    CPU part        : 0x803
    CPU revision    : 12
    
    processor       : 5
    BogoMIPS        : 38.40
    Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
    CPU implementer : 0x51
    CPU architecture: 8
    CPU variant     : 0x7
    CPU part        : 0x803
    CPU revision    : 12
    
    processor       : 6
    BogoMIPS        : 38.40
    Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
    CPU implementer : 0x51
    CPU architecture: 8
    CPU variant     : 0x6
    CPU part        : 0x802
    CPU revision    : 13
    
    processor       : 7
    BogoMIPS        : 38.40
    Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
    CPU implementer : 0x51
    CPU architecture: 8
    CPU variant     : 0x6
    CPU part        : 0x802
    CPU revision    : 13
    
    Hardware        : Qualcomm Technologies, Inc SDM710
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    如上面是查看小米8SE的cpu信息,8核,高通的处理器。

    2.5 查询机型

    adb shell getprop ro.product.model
    
    • 1

    比如小米8SE输出:

    MI 8 SE
    
    • 1

    2.6 屏幕相关

    2.6.1 像素密度
    adb shell wm density
    
    • 1
    2.6.2 分辨率
    adb shell vm size
    
    • 1

    如果是修改像素密度,在上述命名后跟具体数值即可,设备界面上也会实时应用新的密度。

    2.7 查询电池信息

    adb shell dumpsys battery
    
    • 1

    三、分析性能常用命令

    3.1 查看内存占用
    adb shell dumpsys meminfo [packageName]
    
    • 1

    比如查看微信的内存信息:adb shell dumpsys meminfo com.tencent.mm
    如下所示,该命令还能看到四大组件的数量,可用于分析Activity泄漏等性能问题。

    dumpsys meminfo com.tencent.mm
    Applications Memory Usage (in Kilobytes):
    Uptime: 182816715 Realtime: 2423105250
    
    ** MEMINFO in pid 21083 [com.tencent.mm] **
                       Pss  Private  Private  SwapPss     Heap     Heap     Heap
                     Total    Dirty    Clean    Dirty     Size    Alloc     Free
                    ------   ------   ------   ------   ------   ------   ------
      Native Heap    34177    34144        0    15484    88064    68780    19283
      Dalvik Heap    19662    19648        0      133    22771    11386    11385
     Dalvik Other     8554     8552        0      253
            Stack       84       84        0       24
           Ashmem        2        0        0        0
          Gfx dev    11528    11528        0        0
        Other dev       36        0       36        0
         .so mmap     5534      500     2120     4535
        .jar mmap       32       28        4      336
        .apk mmap     2353        0      884        0
        .ttf mmap      623        0      152        0
        .dex mmap    58593        0    57668       20
        .oat mmap     2424        0        0        0
        .art mmap    19564    19208        8    20240
       Other mmap      805        4      280        0
       EGL mtrack    27744    27744        0        0
        GL mtrack     2644     2644        0        0
          Unknown     3980     3980        0     2261
            TOTAL   241625   128064    61152    43286   110835    80166    30668
    
     App Summary
                           Pss(KB)
                            ------
               Java Heap:    38864
             Native Heap:    34144
                    Code:    61356
                   Stack:       84
                Graphics:    41916
           Private Other:    12852
                  System:    52409
    
                   TOTAL:   241625       TOTAL SWAP PSS:    43286
    
     Objects
                   Views:      518         ViewRootImpl:        2
             AppContexts:        8           Activities:        2  //Activity数量能帮助分析内存泄漏
                  Assets:       11        AssetManagers:        0
           Local Binders:       77        Proxy Binders:      146
           Parcel memory:       37         Parcel count:      149
        Death Recipients:       94      OpenSSL Sockets:        0
                WebViews:        0
    
     SQL
             MEMORY_USED:      732
      PAGECACHE_OVERFLOW:      228          MALLOC_SIZE:      117
    
     DATABASES
          pgsz     dbsz   Lookaside(b)          cache  Dbname
             4       96            109       11/79/13  /data/user/0/com.tencent.mm/no_backup/androidx.work.workdb
             4        8                         0/0/0    (attached) temp
             4       96             34         2/15/3  /data/user/0/com.tencent.mm/no_backup/androidx.work.workdb (3)
             4       28             56       167/36/6  /data/user/0/com.tencent.mm/databases/Scheduler.db
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    3.2 查看cpu占用

        当app卡顿时,排除代码逻辑上的问题,关注cpu的占用也很重要,比如很多时候发生ANR时CPU占用率都挺高的。一般来说,内存占用高,系统频繁GC,也会间接导致CPU站用很高。

    • 第一种:dumpsys cpuinfo,但不是及时刷新的,是一段时间的平均值
    adb shell dumpsys cpuinfo
    
    • 1

    输出:

    Load: 0.0 / 0.0 / 0.0
    CPU usage from 248217ms to 184018ms ago (2022-09-03 13:58:59.522 to 2022-09-03 14:00:03.722):
      47% 21083/com.tencent.mm: 34% user + 13% kernel / faults: 7825 minor
      28% 723/surfaceflinger: 18% user + 10% kernel
      13% 661/android.hardware.graphics.composer@2.1-service: 6.8% user + 6.2% kernel / faults: 44 minor
      5.3% 239/crtc_commit:99: 0% user + 5.3% kernel
      3.7% 246/kgsl_worker_thr: 0% user + 3.7% kernel
      2.8% 27448/kworker/u16:4: 0% user + 2.8% kernel
      2.5% 4533/irq/103-1436400: 0% user + 2.5% kernel
      2.2% 240/crtc_event:99: 0% user + 2.2% kernel
      1.9% 27447/kworker/u16:0: 0% user + 1.9% kernel
      1.7% 1589/system_server: 0.8% user + 0.8% kernel / faults: 1071 minor
      1.5% 27450/kworker/u16:12: 0% user + 1.5% kernel
      0.7% 3672/com.android.systemui: 0.6% user + 0% kernel / faults: 317 minor
      0.6% 668/android.hardware.sensors@1.0-service: 0.2% user + 0.3% kernel
      0.5% 7/rcu_preempt: 0% user + 0.5% kernel
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    第二种:top命令,是linux系统的原生命令,是瞬时的,及时刷新的

    adb shell top -n 1 //类似于windows的任务管理器,查看cpu占用情况
    
    • 1

    输出:

    Tasks: 706 total,   1 running, 704 sleeping,   0 stopped,   0 zombie
    Mem:   5815012k total,  5731852k used,    83160k free,   235892k buffers
    Swap:  2621436k total,   422028k used,  2199408k free,  2200852k cached
    800%cpu  69%user   0%nice  48%sys 676%idle   0%iow   3%irq   3%sirq   0%host
      PID USER         PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ ARGS
    21083 u0_a168      10 -10 4.9G 217M 186M S 51.7   3.8  26:28.20 com.tencent.mm
      723 system       -2  -8 2.0G  24M  18M S 31.0   0.4  53:30.95 surfaceflinger
    27538 shell        20   0  11M 4.2M 3.2M R 24.1   0.0   0:00.08 top -n 1
      661 system       -3  -8  66M 7.7M 4.4M S 13.7   0.1  22:17.03 android.hardwar+
    26139 root         20   0    0    0    0 S  6.8   0.0   0:20.59 [kworker/u16:5]
    26567 root         20   0    0    0    0 S  3.4   0.0   0:01.54 [kworker/0:0]
     4533 root         RT   0    0    0    0 S  3.4   0.0   5:38.84 [irq/103-143640+
     4448 root         RT   0    0    0    0 S  3.4   0.0   8:47.64 [sugov:6]
     1589 system       18  -2 4.8G 284M 284M S  3.4   4.9 143:57.82 system_server
      246 root         -3   0    0    0    0 S  3.4   0.0   6:46.47 [kgsl_worker_th+
      239 root         RT   0    0    0    0 S  3.4   0.0  31:17.51 [crtc_commit:99]
       61 root         20   0    0    0    0 S  3.4   0.0   0:37.33 [rcuop/6]
    27537 root          0 -20    0    0    0 S  0.0   0.0   0:00.00 [kworker/0:1H]
    27536 root         20   0    0    0    0 S  0.0   0.0   0:00.00 [kworker/u16:9]
    27535 root         20   0    0    0    0 S  0.0   0.0   0:00.00 [kworker/u16:6]
    27534 root         20   0    0    0    0 S  0.0   0.0   0:00.00 [kworker/u16:2]
    27512 root         20   0    0    0    0 S  0.0   0.0   0:00.02 [kworker/1:1]
    27468 u0_a36       20   0 3.7G 101M  88M S  0.0   1.7   0:00.46 com.android.cam+
    27467 root         20   0    0    0    0 S  0.0   0.0   0:00.00 [kworker/0:2]
    27460 root         20   0    0    0    0 S  0.0   0.0   0:00.00 [kworker/2:1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    如上图可见,top命令能看到更多的信息:

    • 总的cpu比例,上面的设备是8核,所以总共是800%
    • 空闲cpu比例,idle这一列
    • Task…:这一行显示目前进程的总量和进程状态,running/sleeping/stopped/zombie,特别注意:如果zombie这一列不是0,则指示可能存在僵尸进程
    • Mem…: 表示当前的物理内存
    • Swap…:表示虚拟内存
    • 800%cpu….这一行,显示CPU的整体负载,0%iow这一列代表的是I/OWait,通常系统变慢都是I/O产生的问题,需要关注这个选项占用的CPU资源
    • PID: 进程id
    • USRE:进程所属用户
    • PR: Priority的缩写,进程优先级,越小越早被执行
    • NI:Nice的缩写,越小越早被执行
    • %CPU: CPU使用率
    • %MEM: 内存使用率
    • TIME+:CPU: 使用时间累加
    3.3 根据包名查询pid(进程号)
    adb shell pidof packag_name
    
    • 1

    举例:查询com.tencent.mm的进程号
    在这里插入图片描述

    四、开发者选项相关

    4.1 ANR相关
    // 将设置更改为显示对话框:
    adb shell settings put global anr_show_background 1
    // 将设置更改为不显示对话框:
    adb shell settings put global anr_show_background 0
    
    // 如果是系统应用,则使用以下的方式:
    // 将设置更改为显示对话框:调试时ANR不会直接退出进程,而是弹出一个对话框让用户选择退出进程,还是等待。
    settings put secure anr_show_background 1
    // 将设置更改为显示对话框:调试时ANR会直接退出进程,导致debug中断
    settings put secure anr_show_background 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
    LeetCode刷题---移除元素
    Verilog刷题[hdlbits] :Vector100r
    【个人笔记js的原型理解】
    UserWarning 屏蔽
    three.js 第一节 - 场景、相机、渲染器
    华为认证 | CCIE和HCIE考哪个更吃香?
    线阵相机参数介绍---变频参数控制
    【博客452】南北向流量,东西向流量,南北向接口,东西向接口
    前端监控日志产品
  • 原文地址:https://blog.csdn.net/yyg_2015/article/details/126676344