2020年3月14日11:21:04
一、 概述
1.1 dumpsys 命令用法
可通过 dumpsys 命令查询系统服务的运行状态 (对象的成员变量属性值),命令格式:dumpsys 服务名
, 例如:
dumpsys activity
dumpsys window
dumpsys cpuinfo
dumpsys meminfo
可查询的服务有很多,可通过下面任一命令查看当前系统所支持的 dump 服务:
adb shell dumpsys -l
adb shell service list
1.2 系统服务
表一:
服务名 | 类名 | 功能 |
---|---|---|
activity | ActivityManagerService | AMS 相关信息 |
package | PackageManagerService | PMS 相关信息 |
window | WindowManagerService | WMS 相关信息 |
input | InputManagerService | IMS 相关信息 |
power | PowerManagerService | PMS 相关信息 |
batterystats | BatterystatsService | 电池统计信息 |
battery | BatteryService | 电池信息 |
alarm | AlarmManagerService | 闹钟信息 |
dropbox | DropboxManagerService | 调试相关 |
procstats | ProcessStatsService | 进程统计 |
cpuinfo | CpuBinder | CPU |
meminfo | MemBinder | 内存 |
gfxinfo | GraphicsBinder | 图像 |
dbinfo | DbBinder | 数据库 |
表二:
服务名 | 功能 |
---|---|
SurfaceFlinger | 图像相关 |
appops | app 使用情况 |
permission | 权限 |
processinfo | 进程服务 |
batteryproperties | 电池相关 |
audio | 查看声音信息 |
netstats | 查看网络统计信息 |
diskstats | 查看空间 free 状态 |
jobscheduler | 查看任务计划 |
wifi | wifi 信息 |
diskstats | 磁盘情况 |
usagestats | 用户使用情况 |
devicestoragemonitor | 设备信息 |
… | … |
二、Activity 场景
dumpsys activity
,用于查询 AMS 服务相关信息,可跟不同的参数,更多信息见文章 AMS 之 dumpsys 篇
下面以新浪微博 App 作为实例,由于输出结果较多,每个场景截图只挑选部分重要的信息。
场景 1:查询某个 App 所有的 Service 状态
dumpsys activity s com.sina.weibo
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdeTV8no-1584157696901)(http://gityuan.com/images/tools/dumpsys_service.png)]
解读:
- Service 类名为
com.morgoo.droidplugin.PluginManagerService
; - 运行在进程 pid=
7220
,进程名为com.sina.weibo
,uid=10094
; - 通过 bindService 连接该服务的进程 pid=
7306
,进程名为com.sina.weibo:PluginP03
。
当然还有 packageName,baseDir(apk 路径),dataDir(apk 数据路径),createTime 等各种信息。另外,新浪微博采用的是 360 开源的 Android 插件机制 (com.morgoo.droidplugin
),主要用于 hotfix 等功能。
场景 2:查询某个 App 所有的广播状态
dumpsys activity b com.sina.weibo
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Seq1cipx-1584157696904)(http://gityuan.com/images/tools/dumpsys_broadcast.png)]
解读:
- android.intent.action.SCREEN_ON 代表手机亮屏广播;
- 接收该广播的 receiver 有很多个,其中一个所在进程为 pid=
7220
,进程名为com.sina.weibo
场景 3:查询某个 App 所有的 Activity 状态
输出结果较多,尤其是View Hierarchy
,下面截取部分:
dumpsys activity a com.sina.weibo
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hsK9zj1b-1584157696904)(http://gityuan.com/images/tools/dumpsys_activity_task.png)]
解读:
- 格式:TaskRecord{Hashcode #TaskId Affinity UserId=0 Activity 个数 = 1};所以上图信息解析后就是 TaskId=
1802
,Affinity=com.sina.weibo
,当前 Task 中 Activity 个数为 1。 - effectiveUid 为当前 task 所属 Uid,mCallingUid 为调用者 Uid=u0a94,mCallingPackage 为调用者包名,这里是
com.sina.weibo
; - realActivity:task 中的已启动的 Activity 组件名
com.sina.weibo/.SplashActivity
。
场景 4:查询某个 App 的进程状态
dumpsys activity p com.sina.weibo
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vo5dZUFt-1584157696905)(http://gityuan.com/images/tools/dumpsys_processes.png)]
- 格式:ProcessRecord{Hashcode pid: 进程名 / uid},进程 pid=7306,进程名为
com.sina.weibo:PluginP03
,uid=10094. - 该进程中还有 Services,Connections, Providers, Receivers,可以看出该进程是没有 Activity 的进程。
其他
还有很多场景,会用到不同的参数,这里就不再一一列举,建议大家多去尝试,慢慢地就更加熟练,再比如:
dumpsys activity top
dumpsys activity oom
基本使用命令:dumpsys activity -h
Activity manager dump options:
[-a] [-c] [-p package] [-h] [cmd] ... //这个是后面可以跟的参数
cmd may be one of: //这个代表可以跟的命令
a[ctivities]: activity stack state //activity的栈信息
r[recents]: recent activities state//最新的acivity的信息
b[roadcasts] [PACKAGE_NAME] [history [-s]]: broadcast state//broadcastsde 相关信息
i[ntents] [PACKAGE_NAME]: pending intent state//intent的信息
p[rocesses] [PACKAGE_NAME]: process state//进程相关的信息
o[om]: out of memory management//内存溢出
prov[iders] [COMP_SPEC ...]: content provider state//provider信息
provider [COMP_SPEC]: provider client-side state
s[ervices] [COMP_SPEC ...]: service state
as[sociations]: tracked app associations
service [COMP_SPEC]: service client-side state
package [PACKAGE_NAME]: all state related to given package
all: dump all activities //输出所有的activity信息
top: dump the top activity//输出当前栈顶的activity信息
write: write all pending state to storage
track-associations: enable association tracking
untrack-associations: disable and clear association tracking
cmd may also be a COMP_SPEC to dump activities.
COMP_SPEC may be a component name (com.foo/.myApp),
a partial substring in a component name, a
hex object identifier.
-a: include all available server state.
-c: include client state.
-p: limit output to given package.
常见的命令使用介绍
1.dumpsys activity top
拿到一个新的 app,我们经常定位当前的焦点 activoty 的名字。
这个命令就可以显示,而且还可以显示包含的 fragment‘的信息、
2.dumpsys activity | grep run
过滤目前的所有的 activity 栈信息。
3.dumpsys activity -p 包名
过滤一个包的信息。