• adb设备调试常用命令


    自从工作越来越忙后,越来越懒得写文章了,趁着1024程序员节,仪式性地写篇文章,分享一下最近调试设备经常用到的adb指令~

    1.查看应用内存占用

    1.1 dumpsys meminfo package

    dumpsys是查看系统服务信息的一个常用指令,可以用dumpsys -l查看系统所有的服务,dumpsys meminfo可以查看到应用最详细的内存占用情况,主要有两大用途

    • 查看应用的内存占用情况,可以看到不同的内存类型占用,详细的占用情况可助于分析应用哪一块占用了较大内存。
    • 辅助分析内存泄露问题,该命令可以查看到Activity的个数,当退出界面后仍然还有activity存在或者个数不对,则说明该activity已经泄露了。

    命令查询的数据示例如下:

    Applications Memory Usage (in Kilobytes):
    Uptime: 195423478 Realtime: 195423478
    
    ** MEMINFO in pid 23209 [com.example.myfirstapp] **
                       Pss  Private  Private     Swap     Heap     Heap     Heap
                     Total    Dirty    Clean    Dirty     Size    Alloc     Free
                    ------   ------   ------   ------   ------   ------   ------
      Native Heap     8406     8284        0        0    20620    17082     3537
      Dalvik Heap      988      900        0        0     2962     1426     1536
     Dalvik Other      481      476        0        0                           
            Stack       56       56        0        0                           
           Ashmem        7        0        0        0                           
        Other dev       12        0       12        0                           
         .so mmap     2123      160        8        0                           
        .jar mmap     1737        0       24        0                           
        .apk mmap     1027        0        0        0                           
        .ttf mmap       48        0        0        0                           
        .dex mmap     1944        4     1936        0                           
        .oat mmap       66        0        0        0                           
        .art mmap     5883     5508        0        0                           
       Other mmap       60       20        0        0                           
          Unknown      725      688        0        0                           
            TOTAL    23563    16096     1980        0    23582    18508     5073
     
     App Summary
                           Pss(KB)
                            ------
               Java Heap:     6408
             Native Heap:     8284
                    Code:     2132
                   Stack:       56
                Graphics:        0
           Private Other:     1196
                  System:     5487
     
                   TOTAL:    23563      TOTAL SWAP (KB):        0
     
     Objects
                   Views:       17         ViewRootImpl:        1
             AppContexts:        6           Activities:        1
                  Assets:        2        AssetManagers:        0
           Local Binders:        9        Proxy Binders:       28
           Parcel memory:        2         Parcel count:       10
        Death Recipients:        0      OpenSSL Sockets:        0
                WebViews:        0
     
     SQL
             MEMORY_USED:        0
      PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0
    
    
    • 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

    PSS表示应用程序占用的共享内存和私有内存的总和,该参数能比较精确地表示应用占用的内存大小。

    如果dumpsys meminfo不带包名,则会打印出系统整体所有应用的内存占用,并且还能看到应用的进程等级,对于系统性能调优用途很大。

    1.2 top -s 6

    top命令比dumpsys命令的优点是实时性高,缺点是无法查看到PSS的数值,要自己估算出实际的内存占用情况。top命令还能查看当前应用的cpu占用率及内存占用情况,这是top命令一个常用用途。

    -s 6参数含义是用RSS列进行排序,让内存占用最高的在最前边,默认排序是CPU占用率,应用在未操作时会排到很后,有可能会看不到当前的应用。

    Tasks: 162 total,   1 running, 161 sleeping,   0 stopped,   0 zombie
      Mem:      1.9G total,      1.7G used,      175M free,       23M buffers
     Swap:         0 total,         0 used,         0 free,      968M cached
    400%cpu  11%user   1%nice   8%sys 380%idle   0%iow   0%irq   0%sirq   0%host
      PID USER         PR  NI VIRT [RES] SHR S %CPU  %MEM     TIME+ ARGS                                    
      515 system       18  -2 7.7G 295M 199M S  4.6  14.7  29:48.69 system_server
      683 u0_a100      20   0 5.2G 205M 149M S  2.6  10.2  40:35.52 com.android.systemui
     8036 system       20   0 4.6G 166M 116M S  0.0   8.2   0:03.29 com.android.settings
      935 u0_a102      20   0 4.8G 163M 110M S  0.0   8.1   0:21.57 com.android.launcher3
      176 root         20   0 5.1G 147M 122M S  0.0   7.3   0:02.27 zygote64
      999 u0_a115      20   0 4.6G 139M  99M S  0.0   6.9   0:03.67 com.android.inputmethod.latin
     3250 u0_a116      20   0 4.5G 131M  85M S  0.0   6.5   0:01.33 com.dfl.android.bestpractice
      764 radio        20   0 4.9G 123M  94M S  0.3   6.1   2:24.95 com.android.phone
    16167 u0_a56       20   0 4.4G 114M  79M S  0.0   5.7   0:00.23 com.android.documentsui
     1136 u0_a99       20   0 4.5G 113M  78M S  0.0   5.6   0:00.48 com.android.dialer
    23209 u0_a123      10 -10 4.4G 111M  78M S  0.0   5.5   0:00.35 com.example.myfirstapp
      748 network_sta+ 20   0 4.6G 107M  80M S  0.0   5.3   0:25.21 com.android.networkstack
     2515 system       20   0 4.5G 105M  63M S  0.0   5.2   0:00.71 com.android.keychain
     1907 u0_a67       20   0 4.5G 102M  68M S  0.0   5.0   0:00.48 com.android.permissioncontroller
     1942 u0_a65       20   0 4.4G  96M  62M S  0.0   4.8   0:00.39 com.android.providers.calendar
     1311 radio        20   0 4.4G  94M  60M S  0.0   4.6   0:00.24 com.android.ims.rcsservice
      838 u0_a58       20   0 4.5G  93M  67M S  0.0   4.6   0:00.62 android.ext.services
    16269 u0_a54       20   0 4.4G  90M  57M S  0.0   4.5   0:00.06 com.android.mtp
     1288 secure_elem+ 20   0 4.4G  90M  57M S  0.0   4.5   0:00.21 com.android.se
    16209 u0_a64       20   0 4.4G  90M  56M S  0.0   4.4   0:00.04 com.android.externalstorage
    16237 u0_a54       20   0 4.4G  90M  63M S  0.0   4.4   0:00.07 android.process.media
    
    
    • 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

    PSS的内存=RES(进程当前实际占用的物理大小)-SHR(共享内存大小)/共享进程数量,RES的内存值包含了和其他进程共享内存的数据,所以其值会比实际应用占用的内存值PSS要偏大。另外也可使用命令procrank可查看应用的内存占用排名。

    2.查看系统硬件信息

    2.1 查看内存信息 cat /proc/meminfo

    该命令可查看到关于内存的详细信息,包含内存总大小及各个细分类型的内存大小,其中的CmaTotal与CmaFree是一个重要的参数,表示可分配的连续物理内存,如果cma的内存不足,会导致无法打开新界面或弹窗,或出现黑屏的问题。

    MemTotal:        7708608 kB
    MemFree:          125148 kB
    MemAvailable:    2150096 kB
    Buffers:            2096 kB
    Cached:          1959024 kB
    SwapCached:        31456 kB
    Active:          1425944 kB
    Inactive:        1842408 kB
    Active(anon):     781092 kB
    Inactive(anon):   797336 kB
    Active(file):     644852 kB
    Inactive(file):  1045072 kB
    Unevictable:      193320 kB
    Mlocked:          193320 kB
    SwapTotal:       5767164 kB
    SwapFree:         740944 kB
    Dirty:               208 kB
    Writeback:             0 kB
    AnonPages:       1497100 kB
    Mapped:          1086956 kB
    Shmem:             84136 kB
    KReclaimable:     639856 kB
    Slab:             644596 kB
    SReclaimable:     185208 kB
    SUnreclaim:       459388 kB
    KernelStack:      137728 kB
    PageTables:       188484 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:     9621468 kB
    Committed_AS:   198069204 kB
    VmallocTotal:   263061440 kB
    VmallocUsed:      235160 kB
    VmallocChunk:          0 kB
    Percpu:            13568 kB
    CmaTotal:         372736 kB
    CmaFree:               0 kB
    IonTotalCache:     178616 kB
    IonTotalUsed:     428572 kB
    GPUTotalUsed:     450368 kB
    
    • 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

    我手机打印出的CmaFree为0kb,但手机还是能正常使用,这一块与我的认识不太一样,只能推测为手机系统自已做过内存管理模块相关的修改。

    2.2 查看cpu信息 cat /proc/cpuinfo

    该命令可以查看CPU的核心数,及架构信息。

    Processor	: AArch64 Processor rev 0 (aarch64)
    processor	: 0
    BogoMIPS	: 38.40
    Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
    CPU implementer	: 0x51
    CPU architecture: 8
    CPU variant	: 0xd
    CPU part	: 0x805
    CPU revision	: 14
    
    processor	: 1
    BogoMIPS	: 38.40
    Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
    CPU implementer	: 0x51
    CPU architecture: 8
    CPU variant	: 0xd
    CPU part	: 0x805
    CPU revision	: 14
    ...
    processor	: 7
    BogoMIPS	: 38.40
    Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
    CPU implementer	: 0x41
    CPU architecture: 8
    CPU variant	: 0x1
    CPU part	: 0xd0d
    CPU revision	: 0
    
    Hardware	: Qualcomm Technologies, Inc SM8250_AC
    
    • 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

    我手机的基本信息是64位8核cpu,高通芯片。

    2.3 查看存储分区及占用 df -h

    该命令会以M为单位,列出系统上所有目录及其分区,最主要用途是查看哪个分区占用了较大的存储。

    Filesystem        Size Used Avail Use% Mounted on
    /dev/block/dm-15  650M 650M     0 100% /
    tmpfs             3.6G 2.0M  3.6G   1% /dev
    tmpfs             3.6G  24K  3.6G   1% /mnt
    /dev/block/dm-16  1.0G 1.0G     0 100% /system_ext
    /dev/block/dm-17  2.3M 2.3M     0 100% /product
    overlay-overlay   3.4M 3.4M     0 100% /product/app
    overlay-overlay   3.4M 3.4M     0 100% /product/priv-app
    overlay-overlay   3.4M 3.4M     0 100% /product/lib64
    overlay-overlay   3.4M 3.4M     0 100% /product/lib
    overlay-overlay   3.4M 3.4M     0 100% /product/overlay
    overlay           511M 511M     0 100% /product/etc/permissions
    overlay           511M 511M     0 100% /product/framework
    /dev/block/dm-18  930M 930M     0 100% /vendor
    /dev/block/dm-19  237M 237M     0 100% /odm
    /dev/block/dm-7   2.1G 2.1G     0 100% /my_stock
    /dev/block/dm-12  1.0G 1.0G     0 100% /my_preload
    /dev/block/dm-14  822M 822M     0 100% /my_bigball
    /dev/block/dm-13  368K 368K     0 100% /my_manifest
    tmpfs             3.6G  16K  3.6G   1% /apex
    /dev/block/sda9   404M  40M  351M  11% /cache
    /dev/block/dm-49  106G 103G  2.8G  98% /data
    ...
    /dev/block/loop31 232K 116K  112K  51% /apex/com.android.scheduling@339990000
    /dev/block/loop32 720K 692K   16K  98% /apex/com.android.sdkext@339990000
    /dev/block/loop33 232K  80K  148K  36% /apex/com.android.ondevicepersonalization@339990000
    /dev/fuse         106G 103G  2.8G  98% /storage/emulated
    /data/media       106G 103G  2.8G  98% /storage/emulated/0/Android/data
    
    • 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

    如果想查看某个目录下哪个文件或目录占用的存储最大,可使用命令df -sh *来查看,先进入指令的目录,再执行该指令。

    3.5K	ARDebug
    12K	Alarms
    18G	Android
    59M	AnkiChina
    12K	Audiobooks
    201M	BaiduNetdisk
    15K	Browser
    3.5K	ByteDownload
    15K	Ccb
    231K	ColorOS
    2.7G	DCIM
    5.4M	DingTalk
    3.5M	Documents
    1.2G	Download
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.4 查看系统配置的属性信息 getprop

    该命令可查看到系统预置的一些属性值,有一些功能相关联的信息可以通过反射比较方便要从prop中取出。

    [vendor.media.vpp.osie.enable]: [0]
    [vendor.media.vpp.osie.internal.enable]: [1]
    [vendor.media.vpp.osie.internal.version]: [osie2.0]
    [vendor.media.vpp.sr.internal.enable]: [1]
    [vendor.modem_dump_action]: [1]
    [vendor.opengles.version]: [196610]
    [vendor.oplus.dalvik.vm.heapgrowthlimit]: [384m]
    [vendor.oplus.dalvik.vm.heapmaxfree]: [8m]
    [vendor.oplus.dalvik.vm.heapminfree]: [512k]
    [vendor.oplus.dalvik.vm.heapsize]: [512m]
    [vendor.oplus.dalvik.vm.heapstartsize]: [16m]
    [vendor.oplus.dalvik.vm.heaptargetutilization]: [0.75]
    [vendor.oplus.sap.interface]: [wlan2]
    [vendor.vidc.debug.level]: [1]
    [vendor.vold.serialno]: []
    [vold.fbe.decrypted]: [1]
    [vold.has_adoptable]: [0]
    [vold.has_compress]: [0]
    [vold.has_quota]: [1]
    [vold.has_reserved]: [1]
    [vold.storage.prepared]: [1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    如果有root权限,还可以通过命令setprop key 值,修改参数的值。

    2.5 设备的分辨率及dpi

    • 查看设备的分辨率wm size,

    • 查看设备的dpiwm density

    emulator64_arm64:/ $ wm size
    Physical size: 1920x1080
     $ wm density
    Physical density: 160
    
    • 1
    • 2
    • 3
    • 4

    3. 模拟操作指令

    3.1 白天黑夜切换 cmd uimode night

    该指令需要先执行su切换成root用户,适用于可进行root的设备。可用于验证白天黑夜模式快速切换下界面是否有异常

     cmd uimode night yes
    Night mode: yes
    emulator64_arm64:/ # cmd uimode night no                                                               
    Night mode: no
    emulator64_arm64:/ # cmd uimode night auto                                                             
    Night mode: auto
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 白天:night no
    • 黑夜: night yes
    • 自动:night auto

    3.2 模拟输入事件 input

    input支持的输入的类型有

    • text:文本,input text 123
    • keyevent:物理按键,input keyevent 4,返回back;3回到主页home
    • tap:点击事件,input tap 100 100,点击(100,100)对应的位置点
    • swipe:滑动事件,input swipe 10 20 30 40,从(10,20)坐标滑动到(30,40)
    • draganddrop:拖动事件,input draganddrop 10 20 30 40,从(10,20)坐标拖动到(30,40)
    • press:按压事件,input press 200 300 ,按下(200,300)坐标,不会触发点击事件
    • roll:滚动事件,input roll 100 100,向右滚动100像素,向下滚动100像素
  • 相关阅读:
    怎么把旧电脑的用户配置文件迁移到新电脑
    平衡二叉树的 AVL 实现
    06-kafka配置
    scrapy框架的保存文件的几种方式
    【初学人工智能原理】【3】梯度下降和反向传播:能改(上)
    B. Stairs
    python基础语法(三)
    CTF-php特性绕过
    Flutter中GetX系列六--GetxController使用详情
    LeetCode-剑指35-复杂链表的复制
  • 原文地址:https://blog.csdn.net/pigdreams/article/details/134024095