dumpsys 工具详细介绍

dumpsys 工具详细介绍

dumpsys 是 Android 系统自带的命令行诊断工具,核心作用是获取系统服务(System Service)和应用的实时运行状态、资源使用情况及配置信息,无需 root 权限(大部分场景),是 Android 开发、测试及运维排查问题的 “瑞士军刀”。

一、核心定位与价值

本质:通过与 Android 系统的核心服务(如ActivityManager、PowerManager、PackageManager 等)通信,请求服务返回结构化的状态数据,并格式化输出。

核心价值:
无需侵入代码,快速定位系统 / 应用问题(如内存泄漏、耗电异常、任务栈错乱); 轻量无依赖,随 Android
系统预装,无需额外安装工具; 信息全面,覆盖系统资源、应用状态、网络、电源等几乎所有核心模块。

二、工作原理

Android 系统基于 Binder 跨进程通信(IPC)机制 构建,所有核心功能(如 Activity 管理、电源控制、包管理)均以 “系统服务(System Service)” 形式运行在独立进程中(如 system_server 进程)。
dumpsys 的工作流程如下:

用户通过 ADB 执行 dumpsys 命令;命令进程通过 Binder 向目标系统服务发送 “状态查询请求”;目标服务接收请求后,收集并格式化自身的运行状态数据;服务通过 Binder 将数据返回给 dumpsys,并由命令行输出到终端或文件。

三、使用前提

使用 dumpsys 需先完成以下准备:

安装 ADB 工具:

Windows/Mac/Linux:下载 Android SDK Platform Tools,解压后将路径配置到系统环境变量;
Mac 可选:通过 brew install android-platform-tools 快速安装。

开启设备 USB 调试:

进入设备 “设置 → 关于手机”,连续点击 “版本号” 7 次,开启 “开发者选项”;
返回 “设置 → 开发者选项”,开启 “USB 调试”,并允许电脑的调试授权(首次连接时设备会弹窗)。

连接设备:USB 连接:用数据线连接设备与电脑,执行 adb devices 确认设备已识别(输出设备序列号即成功);无线连接(无需数据线):
设备与电脑连入同一无线网络; 执行 adb tcpip 5555(设置设备监听 5555 端口); 执行 adb connect
设备IP:5555(设备 IP 可在 “设置 → WLAN → 已连接网络” 中查看)。

四、基本命令格式

dumpsys 的通用命令格式为:


adb shell dumpsys [选项] [服务名] [服务参数]
组成部分 说明 示例
adb shell 进入 Android 设备的命令行环境 必选前缀
dumpsys 工具主命令 必选
[选项] 可选参数(如 –help 查看帮助,–skip services 跳过部分服务) dumpsys –help
[服务名] 指定要查询的系统服务(核心参数,不指定则输出所有服务,内容极多) meminfo(内存服务)、activity(Activity 服务)
[服务参数] 服务的额外参数(如应用包名,过滤特定应用的信息) dumpsys meminfo com.xxx.app

关键说明:

不指定服务名:执行 adb shell dumpsys 会输出 所有系统服务 的状态,日志体积可能达数百MB,不推荐直接执行,建议定向查询特定服务;查看所有可用服务:执行 adb shell dumpsys –list,会列出当前设备支持的所有服务名称(如 activity、meminfo、battery 等)。

五、核心功能模块详解(常用服务)

dumpsys 支持数十种系统服务,以下是开发 / 测试中最常用的服务模块,按场景分类整理:
5.1 应用与 Activity 管理类

服务名称 命令示例 核心功能 关键输出信息
activity adb shell dumpsys activity 查看 Activity 任务栈、组件状态、应用进程管理 – 任务栈(Task Stack)结构 – Activity 记录(ActivityRecord)- 应用进程状态(如前台 / 后台)- Launch Mode 配置
activity adb shell dumpsys activity top 查看当前前台 Activity 详情 – 当前显示的 Activity 包名 + 类名 – 视图层级(View Hierarchy) – 启动时间、占用内存
package adb shell dumpsys package 包名 查看应用安装信息、权限、组件列表 – 应用安装路径、版本号、签名信息 – 已授予 / 未授予的权限列表 – 四大组件(Activity/Service/Receiver/Provider)注册信息

5.2 内存与 CPU 资源类

服务名称 命令示例 核心功能 关键输出信息
meminfo adb shell dumpsys meminfo 包名 查看应用 / 系统内存使用情况 – PSS(比例共享内存):应用实际占用的物理内存(含共享部分按比例分配)- RSS(常驻内存):应用占用的物理内存(含完整共享部分)- 堆内存(Heap Size/Allocated/Freed)- 内存泄漏检测(Leak Suspects)
cpuinfo adb shell dumpsys cpuinfo 查看 CPU 实时使用情况(进程 / 线程级) – 各进程的 CPU 占用率(%)- 线程数、活跃线程列表 – CPU 核心数、频率信息
procstats adb shell dumpsys procstats 查看应用进程资源统计(历史 + 实时) – 应用进程的内存使用趋势 – 进程启动次数、前台运行时长 – 低内存杀死(OOM Kill)记录

5.3 电源与电池类

服务名称 命令示例 核心功能 关键输出信息
battery adb shell dumpsys battery 查看电池实时状态 – 电量百分比(level)- 充电状态(charging/ac/usb)- 电池电压(voltage)、温度(temperature,单位:0.1℃)- 电池健康状态(health)
batterystats adb shell dumpsys batterystats 查看电池耗电统计(核心工具) – 各应用的耗电占比(%)- 应用唤醒次数、持锁时间(Wake Lock)- 屏幕亮屏时长、CPU 唤醒时长- 历史耗电记录(按天 / 小时统计)
power adb shell dumpsys power 查看电源管理状态、休眠策略 – 屏幕状态(亮 / 暗,screen_state=on/off)- 休眠时间(sleep_timeout)- 唤醒锁(Wake Lock)持有情况(哪个进程持有锁)

5.4 网络与连接类

服务名称 命令示例 核心功能 关键输出信息
netstats adb shell dumpsys netstats 查看网络流量统计(按应用 / 协议) – 各应用的上下行流量(TCP/UDP,单位:字节)- 网络接口(Wi-Fi / 移动数据)的总流量- 流量统计时间范围
connectivity adb shell dumpsys connectivity 查看网络连接状态、类型 – 当前活跃网络类型(Wi-Fi/5G/4G)- 网络连接状态(connected/disconnected)- IP 地址、网关、DNS 配置
wifi adb shell dumpsys wifi 查看 Wi-Fi 状态、连接记录 – 当前连接的 Wi-Fi SSID、信号强度(RSSI)- Wi-Fi 开关状态、扫描记录- 已保存的 Wi-Fi 列表

5.5 显示与窗口类

服务名称 命令示例 核心功能 关键输出信息
window adb shell dumpsys window 查看窗口层级、显示属性 – 窗口层级(Window Hierarchy):所有可见窗口的叠加顺序- 焦点窗口(当前可交互的窗口)- 屏幕分辨率、亮度、刷新率
display adb shell dumpsys display 查看显示设备信息 – 显示设备数量(如主屏幕、外接显示器)- 分辨率、DPI、色域、亮度范围

六、典型使用场景(附实战命令)

场景 1:排查应用卡顿 / 内存泄漏
需求:查看应用是否内存占用过高,或存在泄漏;
命令:


# 查看目标应用的详细内存使用(包名替换为实际应用包名)
adb shell dumpsys meminfo com.example.myapp
# 重点关注:PSS 持续增长、Heap Allocated 远大于 Heap Freed、Leak Suspects 字段

场景 2:定位应用耗电异常
需求:确认哪个应用耗电最多,或是否存在异常唤醒;
命令:


# 查看电池耗电统计(按耗电占比排序)
adb shell dumpsys batterystats --user 0
# 重点关注:"Foreground time"(前台运行时长)、"Wake lock time"(唤醒锁时长)、"Mobile radio active time"(移动数据活跃时长)
# 查看当前电池实时状态(确认是否充电、温度是否过高)
adb shell dumpsys battery

场景 3:解决应用启动后闪退 / 无响应
需求:查看 Activity 任务栈是否正常,或应用是否被系统杀死;
命令:


# 查看当前所有 Activity 任务栈
adb shell dumpsys activity activities
# 重点关注:目标应用的 ActivityRecord 是否存在,状态是否为 "resumed"(正常前台)或 "destroyed"(已销毁)
# 查看应用进程状态(确认是否存活)
adb shell dumpsys activity processes | grep com.example.myapp

场景 4:排查网络流量异常
需求:确认应用是否偷跑流量,或总流量是否超标;
命令:


# 查看所有应用的网络流量统计(按应用包名分组)
adb shell dumpsys netstats --uid
# 重点关注:目标应用的 "rxBytes"(接收字节数)、"txBytes"(发送字节数),对比正常使用时的流量范围
# 查看当前网络连接状态(确认是否连接正常)
adb shell dumpsys connectivity

七、高级用法

1. 过滤输出结果(只看关键信息)
dumpsys 输出内容繁多,可结合 grep(Linux/Mac)或 findstr(Windows)过滤关键字:


# Linux/Mac:查看目标应用的 PSS 内存
adb shell dumpsys meminfo com.example.myapp | grep -i "pss"
# Windows:查看当前前台 Activity
adb shell dumpsys activity top | findstr "ACTIVITY"

2. 导出日志到文件(便于后续分析)
将 dumpsys 输出保存到本地文件,避免终端滚动过快无法查看:


# 导出目标服务的日志到本地(如batterystats日志)
adb shell dumpsys batterystats > D:/batterystats.log
# 导出全量日志(谨慎使用,文件较大)
adb shell dumpsys > D:/dumpsys_full.log

3. 结合其他工具使用

与 adb logcat 结合:先通过 dumpsys 定位服务异常,再用 logcat 查看详细日志;与 top 结合:用 adb shell top -n 1 查看实时 CPU 占用,再用 dumpsys cpuinfo 查看进程级详情。

八、注意事项

权限限制:

大部分服务无需 root,但部分隐私相关服务(如 account、contacts)可能需要 root 权限才能查看完整信息;
Android 12+ 对部分服务(如 batterystats)的输出做了隐私限制,普通用户可能无法查看其他应用的详细耗电数据。

版本差异:

不同 Android 版本的服务名称或输出格式可能变化(如 Android 10+ 移除了 netpolicy 服务,合并到 connectivity);
建议参考对应 Android 版本的 官方文档 确认服务兼容性。

日志体积:

全量 dumpsys 输出可能达数百 MB,甚至超过设备存储限制,建议始终指定具体服务(如 meminfo、activity)。

隐私安全:

dumpsys 输出包含应用权限、内存数据、网络配置等敏感信息,请勿在非信任环境下分享日志,或泄露设备信息。

九、总结

dumpsys 是 Android 系统诊断的核心工具,其优势在于 无需 root、轻量高效、信息全面。无论是开发阶段排查内存泄漏、调试 Activity 栈,还是测试阶段定位耗电异常、网络问题,dumpsys 都能提供关键数据支持。
掌握 dumpsys 的核心服务(如 meminfo、activity、batterystats)和过滤技巧,能显著提升 Android 问题排查的效率,是 Android 开发者和测试工程师的必备技能。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容