dumpsys是Android系统中的一个可执行文件,主要作用是将当前Android系统的一些信息dump出来,例如Activity、package等。是一个分析Android设备问题、查看运行状态、使用情况等十分有效的工具。可以获取各种系统信息和状态,如进程的PSS值,分析了解进程对RAM的占用情况。
dumpsys的语法提供了灵活的方式来获取和分析Android系统中各种服务的信息。基本语法结构如下:
- [-t timeout]:可选参数,用于指定命令执行的超时时间(以秒为单位)。默认为10秒。
- [--help | -l | --skipservices | service[arguments] | -c | -h]:命令行选项,用于定制dumpsys的输出和行为。
--help:打印dumpsys的使用方法说明。
-l:列出dumpsys支持的所有系统服务列表。
--skipservices:指定不需要打印的服务列表。
service[arguments]:指定要查询的特定服务及其可选参数。通过指定服务名称,可以获取特定服务的详细信息。
-c:以机器友好的格式(通常是键值对)输出信息,对于自动化脚本解析可能很有用,对于人类阅读可能不太友好。
-h:用在指定的服务后面,打印服务支持哪些参数或如何使用该服务。
如果dumpsys不加任何参数,会输出所有系统服务的详细信息,输出的内容是非常多的。实际解决具体问题时,我们通常只关注一些特定系统服务的输出,只需要将服务名作为dumpsys命令的参数,就可以只输出特定服务的信息。比如要输出磁盘使用的统计信息,则可以将diskstats这个系统服务名作为参数。
工作原理
dumpsys基于Android系统的服务管理和进程间通信机制。通过调用Android系统底层的ServiceManager服务,来获取系统中所有已注册服务的信息。ServiceManager是Android系统中的一个核心服务,负责管理系统中的所有服务,提供统一的注册、发现和通信机制。
当dumpsys被调用时,会通过Binder进程间通信(IPC)框架与ServiceManager进行交互。Binder是Android提供的一套进程间相互通信的框架,允许不同的进程之间进行高效的通信和数据交换。通过Binder,dumpsys能够请求ServiceManager提供当前系统中所有已注册服务的列表,以及每个服务的详细信息。
ServiceManager会响应dumpsys的请求,返回系统中所有服务的状态信息。包括服务的名称、状态、运行时的统计数据等。dumpsys接收到这些信息后,会进行解析和整理,并以一种可读的方式展示。
- 获取servicemanager,所有的系统服务都会向servicemanager注册
- 进行命令行参数解析,根据参数的不同设置后续的执行指令序列
- 简单的罗列了一下需要输出的系统服务名称
- 调用具体系统服务的dump()方法完成系统服务详细信息的输出
以上面adb shell dumpsys diskstats命令为例,最终调用dump()方法完成输出: