android dumpsys 快速入门

image

dumpsys

属于android平台上的一个bin文件,放置在/system/bin 下面,主要完成打印系统服务的信息,帮助调试分析解决问题。

之前写的文章太长,感觉很难坚持看完,那么后续在写文章的时候,尽量讲的快一些,内容精简一些。

使用dumpsys -l 显示出来当前的服务列表。

我平时关注的是

surfaceflinger

activity

input``window

,因此可以通过

dumpsys后面加入这些参数,来输出对应的信息。具体的可以手动操作下。

我们这节不讲

dumpsys命令输出的每行的含义,我们讲讲

dumpsys本身代码是怎么写的。

image

dumpsys源码位置:

frameworks/native/cmds/dumpsys

首先我们先看下这里的Android.mk,先看这个文件的目的是,我们要看下这个目录到底怎么组织,哪些文件参与编译,同时最终生成了什么内容,生成在哪里。

image

这里

LOCAL_SRC_FILES:

指定了参与编译的文件列表

LOCAL_SHARED_LIBRARIES

指定了依赖的动态库

LOCAL_MODULE

指定了编译出来的名字

include $(BUILD_EXECUTABLE)

指定了是个可执行文件,默认的位置在

system/bin

看完了这些,那我们找到源码

dumpsys.cpp,来看下这个具体的代码。
因为最终编出来是可执行文件,那么标准的c程序,需要入口

main方法的,这里我们看下

dumpsys

main

方法:(保留主要内容)

image

我们使用

defaultServiceManager拿到

serviceManager

binder客户端,然后调用它的

listServices() 拿到所有注册在

serviceManager的服务列表,系统启动的时候,通过

serviceManager.addService注册服务,这里

listServices()

拿到的就是这些服务列表。我们这里拿WMS做个例子,系统在

SystemServer.java

启动的时候,使用:

image

将window服务注册进去。
然后这里拿到服务列表后,遍历列表,调用

service->dump(remote_end.get(), args);

,这里使用了

pipe

管道,将输出文件传递过去。

image

这里dump调用的是每个binder服务的dump,比如WMS就是

WindowManagerService.java

,这里有个dump方法:

image

我们发现和我们 本身传入的参数不一样,我们本身传入的为

service->dump(remote_end.get(), args)

,这里系统帮我们隐藏了binder的具体关联,这里我们直接调用的dump方法,在binder.java里面:

image

通过将文件句柄,进行包装,再次调用本身的dump(三个参数),这里就会执行对应服务的dump方法了,比如WMS就是

WindowManagerService.java

的dump:

image

如上,便完成了dumpsys的代码整个流程。

推荐阅读:

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员入门进阶(免费辅导开题报告)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值