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

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

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

我手机打印出的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

我手机的基本信息是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

如果想查看某个目录下哪个文件或目录占用的存储最大,可使用命令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
...

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]

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

2.5 设备的分辨率及dpi

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

  • 查看设备的dpiwm density

emulator64_arm64:/ $ wm size
Physical size: 1920x1080
 $ wm density
Physical density: 160

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
  • 白天: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像素

你可能感兴趣的:(android进阶,1024程序员节,adb,android)