在我的博客 Android实用技巧之adb命令:dumpsys命令的使用 一文中详细介绍了 dumpsys 的基本用法,那么本文将介绍一下它是如何实现的以及它的工作原理。
dumpsys 相关源码位置:
1 | frameworks/native/cmds/dumpsys/dumpsys.cpp |
源码分析
看到 dumpsys 源码我们发现,它的实现较为简单,全部的代码都在 dumpsys.cpp 中,编译得到 dumpsys 二进制文件。实现基本的思路就是向 servicemanager 获取相关的系统服务,然后调用相应系统服务的 dump()
方法打印相关数据。
1 | int main(int argc, char* const argv[]) |
原理
我们都知道,Android的系统服务都是 Binder
的子类,他们都是由 servicemanager 来管理的,他们分别运行在不同的进程中。Android系统服务运行在 system_server 进程,servicemanager 运行在 servicemanager 进程中。他们之间的协作通过进程间的通信来完成。Binder.dump()
方法就是打印系统服务信息的方法,Android 系统服务重新实现了父类的 dump()
方法来实现系统服务信息的输出,输出的信息完全有系统服务自己来控制。