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 开发者和测试工程师的必备技能。
















暂无评论内容