Dumpsys结构图:
实现方式:
dumpsys的代码在mydroid/frameworks/base/cmds/dumpsys/dumpsys.cpp,所有的dump信息都是由重载了Binder中的dump函数的类来完成:
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
...
}
代码很简单,发现所有dump的信息都是由defaultServiceManager)提供的由系统注册的所有service来提供信息。
以meminfo为例:
它是在
mydroid/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中的setSystemProcess函数处被注册的
SrviceManager.addService("activity", m);
ServiceManager.addService("meminfo", new MemBinder(m));
...
MemBinder->ProcessRecord->各个正在运行状态的ApplicationThread的状态(mydroid/frameworks/base/core/java/android/app/ActivityThread.java),从中得到需要的meminfo信息。
这其中其实牵涉到负责的Android的是如何管理Linux的进程,同时又是如何把Linux的进程管理起来提供各种信息给Java层使用。
上述信息来自网络:
具体命令行参数:
1、 SurfaceFlinger
SurfaceFlinger是Android进行图形界面绘制的服务,根据文档显示,有硬件绘制和GPU绘制两种实现方式。
(来源:http://blog.youkuaiyun.com/windskier/article/details/7030732 )
通过dumpsys SurfaceFlinger,除了可以看到显示设备的一些参数开关之外,还能能到如下,360手机卫士主界面是硬件方式绘制的。
另外,还能看到命令行运行时候,手机系统上所有layer信息,如下所示:
关于这部分主要参考:
http://www.linuxgraphics.cn/android/graphics_system.html
http://stackoverflow.com/questions/21642734/how-to-make-sense-of-dumpsys-surfaceflinger
http://blog.youkuaiyun.com/windskier/article/details/7030732
2、 Cpuinfo
可以显示每个进程在内核空间和用户空间的cpu占用率
3、 Account
设备上所有用户信息
4、 Activity
-h:显示参数列表
A(activities)参数:查看activity组件信息,主要看从” Running activities (most recent first):”部分查看栈中的activity列表。
B(broadcasts)参数:查看所有注册的BraodcastReceiver及其filter、action等信息。
I(Intents)参数:等待的intent状态
P(processes)参数:ProcessRecord记录的进程id、进程名字和各种用于调节优先级的状态。
O(oom)参数:主要看oom_adj值,从中可以看到到内存释放的情况。
Prov(providers)参数:显示content providers信息
s(Services)参数:当前active状态的service及bindings信息。
services[]参数:跟上具体的服务名,dump出服务客户端的一些状态信息。
5、 Alarm
查看放到定时队列中的事件。
例如下面我们可以看到其intent ID。
而通过” dumpsys activity i”我们可以看到该intent所对应的详细信息。
6、 appwidget
android窗口小部件的信息。
7、 audio
android音频组件信息
8、 backup
android backup服务信息
9、 battery
android电池设备信息
10、 batteryinfo
android耗电相关的进程运行时间等信息(Android L被batterystats取代)。
refer to : http://blog.youkuaiyun.com/oujunli/article/details/37563067
看了一下比较关注的Google I/O视频,其中在Introduction to Project Volta里面有个battery historian的工具,看着比较有意思,用Nexus 5刷了个Android L preview的版本试试。
使用battery historian步骤:
1、adb shell dumpsys batterystats --enable full-wake-history
2、adb shell dumpsys batterystats --reset
3、adb bugreport |tee bugreport.txt
4、python historian.py -a bugreport.txt | tee battery.html
用Chrome打开battery.html,可以看到:
11、 connectivity
android网络连接状态及进程请求网络信息。
12、 content
查看android content provider相关的信息
13、 device_policy
android设备政策。
14、 diskstats
手机卡剩余信息
15、 dropbox
系统崩溃的信息
16、 input_method
Android输入法信息
17、 iphonesubinfo
手机制式及设备id
18、 location
gps等位置信息
19、 media.audio_flinger、media.audio_policy、media.camera、media.player
android音视频设备有关的状态信息
20、 meminfo
android进程实际物理内存占用情况。
http://zarroboogs.org/index.php/archives/218
21、 mount
加载的存储设备信息
22、 network_management
android网络流量管理信息
23、 notification
android通知栏广告信息。
24、 package
参数:
我们主要通过l、perm、perf、p等参数dump出package信息,还能够直接跟包名来dump出该包的具体信息。
25、 power
电源管理器的一些状态信息。
26、 sensorservice
android传感器的一些状态信息。
27、 statusbar
显示状态栏相关的一些信息。
28、 telephony.registry
电话服务相关的信息。
29、 uimode
ui mode service的状态信息。
30、 usagestats
各个app使用情况统计
31、 wallpaper
壁纸信息
32、 wifi
wifi连接及状态信息
33、 window
参数: