• Adb 实用命令(网络包、日志、调优相关)


    背景

    最近在局方现场出差,我负责sdk开发,局方外包给了北京的同事集成sdk开发应用,后面发现应用存在一些问题需要解决。我又是乙方,就来到了局方现场分析问题,然后反馈解决。

    不过后续sdk也没动,一些优化都是应用(存在内存泄漏)需要做的,机顶盒性能也可能有一定的影响。

    现场有用到一些比较实用的 adb 命令,这里记录下,方便自己和同学们日后使用。


    命令

    - 连接机顶盒

    adb connect [机顶盒ip]
    
    • 1

    - 查看已连接设备

    adb devices
    
    • 1

    - 断开某个机顶盒的连接

    adb disconnect [机顶盒ip]
    or
    adb disconnect [虚拟机名称]
    
    • 1
    • 2
    • 3

    - 断开所有设备连接

    adb disconnect
    
    • 1

    - 获取 root 权限

    adb root
    
    • 1

    - 挂载文件系统

    adb remount
    
    • 1

    当想往移动设备端 push 文件时显示没权限,可尝试执行以下指令:
    adb root
    adb remount

    如果还提示 read-only 的话,可继续尝试执行命令:
    adb root
    adb disable-verity

    adb reboot 重启后再 adb remount 即可。

    当你想 push 进某一具体路径下的文件夹时可以用: adb shell mount -o rw,remount /路径/路径

    注:adb remount 的作用相当于 adb shell mount -o rw,remount,rw /system

    - 抓取网络包

    (在 cmd 窗口执行命令所在目录下放 tcpdump 文件,抓包时用)

    在这里插入图片描述
    在这里插入图片描述

    adb shell tcpdump -i any -p -s 0 -w /data/data/capture.pcap
    
    • 1

    组合键: ctrl + C 可以停止抓包。

    - 拉取网络包到本机cmd执行命令当前目录

    adb pull /data/data/capture.pcap
    
    • 1

    - 删除设备中的网络包

    adb shell
    rm /data/data/capture.pcap
    
    • 1
    • 2

    - 获取机顶盒设备信息

    adb shell getprop
    
    • 1

    - 根据 uri 查看 contentProvider 中表信息

    adb shell content query --uri [表的uri]
    
    示例:
    adb shell content query --uri content://stbauthinfo/authentication
    
    • 1
    • 2
    • 3
    • 4

    结果如下:

    Row: 0 _id=131, name=epg_server, value=http://183.224.21.144:33200
    Row: 1 _id=132, name=refreshTime, value=915738
    Row: 2 _id=133, name=licence, value=1
    Row: 3 _id=134, name=Password, value=969256
    Row: 4 _id=135, name=username, value=dsw1878700035901
    Row: 5 _id=136, name=user_token, value=tj3kkvhyh0d4yS-StkL2k8844
    Row: 6 _id=137, name=platform, value=YNYDHW
    Row: 7 _id=138, name=userGroup, value=0
    Row: 8 _id=139, name=platformType, value=1
    Row: 9 _id=140, name=g_token, value=ee422c5fcf70dda06b3fb295d39ef8b0f5aca34ed45bcb4c
    Row: 10 _id=141, name=isSW, value=0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    - 根据包名和期启动类名打开应用

    adb shell am start -n [pkgId]/[launchClassName]
    
    示例:
    adb shell am start -n com.utstar.smartTV/yanhua.tv.activity.Dispatcher
    
    • 1
    • 2
    • 3
    • 4

    - 设置应用运行时的系统参数

    adb shell setprop [自定义参数 key] [要设置的参数对应的 value]
    
    示例:
    adb shell setprop debug.ottsdk.config 1
    
    • 1
    • 2
    • 3
    • 4

    注:设备重启后,设置的参数值会失效;但重启应用不会失效

    - 根据包名杀应用进程

    adb shell am force-stop [pkgId]
    
    • 1

    注意:有的时候不一定能成功

    因为在 android8.1 系统的代码中:

    if (app.persistent && !evenPersistent) {
    // we don't kill persistent processes
    continue;
    }
    
    • 1
    • 2
    • 3
    • 4

    应用中 android:persistent=“true”,true 就不让 force-stop,当然进程也就存在。

    那么如果想强制杀可以这样做:找到应用的进程id,然后通过命令 kill -9 [进程id] 可以强制杀进程。

    - 进程的名字使用 grep 指令过滤输出 “com.gitv.tv.launcher” 进程的信息

    adb shell top | grep com.gitv.tv.launcher
    
    • 1

    更多相关命令请阅读 adb shell top 命令

    - 清空(清除)Android中的logcat缓冲区

    adb logcat -c
    
    • 1

    建议抓取日志前,执行一遍该命令。
    防止抓取多余的日志,保证日志抓取的准确性,方便分析定位问题。

    - 查看 cpu 信息

    adb shell dumpsys cpuinfo
    
    • 1

    在这里插入图片描述

    - 查看系统的 meminfo

    adb shell cat /proc/meminfo
    
    • 1

    在这里插入图片描述
    相关说明如下:

    MemTotal:         688576 kB     总内存
    MemFree:          153736 kB     空闲内存
    MemAvailable:     339884 kB     可用内存
    Buffers:              16 kB     给文件的缓冲大小
    Cached:           267672 kB     高速缓冲存储器
    SwapCached:           36 kB     被高速缓冲存储用的交换空间的大小
    Active:           222900 kB     活跃使用中的高速缓冲存储器页面文件大小
    Inactive:         123700 kB     不经常使用中的告诉缓冲存储器文件大小
    Active(anon):      31800 kB     活跃的匿名内存(进程中堆上分配的内存,是用malloc分配的内存)
    Inactive(anon):    57272 kB     不活跃的匿名内存
    Active(file):     191100 kB     活跃的file内存
    Inactive(file):    66428 kB    不活跃的file内存     
    Unevictable:           0 kB    不能被释放的内存页
    Mlocked:               0 kB    mlock()系统调用锁定的内存大小
    SwapTotal:       2097148 kB    交换空间总大小
    SwapFree:        2096884 kB    空闲交换空间
    Dirty:                 0 kB    等待被写回到磁盘的大小
    Writeback:             0 kB    正在被写回的大小
    AnonPages:         78876 kB       未映射页的大小
    Mapped:            28556 kB    设备和文件映射大小
    Shmem:             10160 kB    已经被分配的共享内存大小
    Slab:             102916 kB    内核数据结构缓存大小
    SReclaimable:      49616 kB    可收回slab的大小
    SUnreclaim:        53300 kB    不可回收的slab的大小
    KernelStack:        4416 kB      kernel消耗的内存
    PageTables:         6028 kB      管理内存分页的索引表的大小
    NFS_Unstable:          0 kB      不稳定页表的大小
    Bounce:                0 kB      在低端内存中分配一个临时buffer作为跳转,把位于高端内存的缓存数据复制到此处消耗的内存
    WritebackTmp:          0 kB      USE用于临时写回缓冲区的内存
    CommitLimit:     2441436 kB      系统实际可分配内存总量
    Committed_AS:     308028 kB      当前已分配的内存总量
    VmallocTotal:   34359738367 kB   虚拟内存大小
    VmallocUsed:      179588 kB    已经被使用的虚拟内存大小
    VmallocChunk:   34359310332 kB   malloc 可分配的最大的逻辑连续的内存大小
    HardwareCorrupted:     0 kB      删除掉的内存页的总大小(当系统检测到内存的硬件故障时)
    AnonHugePages:      6144 kB      匿名 HugePages 数量
    CmaTotal:              0 kB    总的连续可用内存
    CmaFree:               0 kB      空闲的连续内存
    HugePages_Total:       0      预留HugePages的总个数 
    HugePages_Free:        0     池中尚未分配的 HugePages 数量
    HugePages_Rsvd:        0        表示池中已经被应用程序分配但尚未使用的 HugePages 数量
    HugePages_Surp:        0      这个值得意思是当开始配置了20个大页,现在修改配置为16,那么这个参数就会显示为4,一般不修改配置,这个值都是0
    Hugepagesize:       2048 kB     每个大页的大小
    DirectMap4k:      108416 kB   映射TLB为4kB的内存数量
    DirectMap2M:      940032 kB   映射TLB为2M的内存数量
    DirectMap1G:           0 kB     映射TLB为1G的内存数量
    
    • 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

    - 查看电量信息

    adb shell dumpsys battery
    
    • 1

    在这里插入图片描述

    - 查找应用的 pid

    adb shell 
    
    top | grep [pkgId]
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    第一列的数字 2185 就是应用的进程 pid

    - 查看应用最大内存限制

    adb shell 
    
    getprop|grep heapgrowthlimit
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    - 分析应用的内存信息(是否存在内存泄漏)

    adb shell
    
    dumpsys meminfo [pkgId/pid]
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    更多详细使用和内存分析说明请阅读:adb shell dumpsys meminfo 详解


    技术永不眠!我们下期见!

  • 相关阅读:
    [Unity]打包Android后xxx方法丢失。
    刷完三个Java教程后不再犹豫
    【开发】React框架下如何集成H.265网页流媒体EasyPlayer.js视频播放器?
    美国能源部国家实验室将量子计算用于关键能源研究
    Vim入门教程
    Windows服务器部署SpringBoot及文件服务器MinIO
    如何写论文
    【MySQL】_JDBC
    JMeter入门教程(16)——非GUI运行
    8.12 PowerBI系列之DAX函数专题-分组内动态TopN和others
  • 原文地址:https://blog.csdn.net/csdnzouqi/article/details/125595873