Android 调试系列-Dumpsys实战篇
2018-11-24 本文已影响0人
凡星轨迹
dumpsys命令可以dump系统各种服务的状态,因此在平常的开发过程中如果很好的掌握dumpsys的用法,会事半功倍。
1. dumpsys命令用法
adb shell dumpsys ...
"usage: dumpsys\n"
" To dump all services.\n"
"or:\n"
" dumpsys [-t TIMEOUT] [--help | -l | --skip SERVICES | SERVICE [ARGS]]\n"
" --help: shows this help\n"
" -l: only list services, do not dump them\n"
" -t TIMEOUT: TIMEOUT to use in seconds instead of default 10 seconds\n"
" --skip SERVICES: dumps all services but SERVICES (comma-separated list)\n"
" SERVICE [ARGS]: dumps only service SERVICE, optionally passing ARGS to it\n");
例如可以通过下面的方式来查询当前系统支持的所有dump服务。
adb shell dumpsys -l
借鉴gityuan的博客总结了比较重要的服务对应的类名和功能。
服务名 | 类名 | 功能 |
---|---|---|
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 | 设备信息 |
… | … |
2. 一些常用场景
-
场景1
WX20181122-181657@2x.png
当你想要查看当前手机屏幕正在显示的页面是哪个进程的那个activity时,你可以输入
adb shell dumpsys activity top |grep mResumed=true -C 10
解读:- grep mResumed=true代表查询当前处于mResumed=true的activity,也就是正在前台展示的Activity;
- Activity为com.ss.android.article.news/.activity.MainActivity,进程名为com.ss.android.article.news,进程pid=20958;
-
场景2
image.png
查询某个App所有service状态
adb shell dumpsys activity s com.ss.android.article.news
解读:- Service名称为
com.ss.android.article.news/com.ss.android.message.NotifyService
- 运行在进程
pid=21484
进程名为:com.ss.android.article.news:push
,uid=u0a158
- Intent信息
intent={cmp=com.ss.android.article.news/com.ss.android.message.NotifyService}
当然还有一些其他的信息,比如packageName,baseDir(apk路径),dataDir(数据存储路径),createTime,callerPackage等各种信息。
- Service名称为
-
场景3
image.png
查询某个App的所有Activity状态,其中包括页面的View Hierarchy信息
adb shell dumpsys activity a com.ss.android.article.news
解读:-
TaskRecord{Hashcode #TaskId Affinity UserId=0 StackId=1 Activity个数=1}
,从上图中我们可以看到,taskid=3251,Affinity=com.ss.android.article.news,userid=0,stackid=1,activity为1
effectiveUid为当前task所属Uid,mCallingUid为调用者Uid=u0a171,mCallingPackage为调用者包名:com.ss.android.article.news
realActivity为com.ss.android.article.news/.activity.SplashBadgeActivity
-
-
场景4:查询某个App的进程状态
image.png
adb shell dumpsys activity p com.ss.android.article.news
解读:
- 格式:
ProcessRecord{Hashcode pid:进程名/uid}
,进程pid=3938
,进程名为com.ss.android.article.news
,uid=u0a171
.
该进程中还有Services,Connections, Providers, Receivers
等信息.
当然还有很多其他场景,这里就不一一举例了,大家可以多多尝试,亲自去体验。