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. 场景1
    当你想要查看当前手机屏幕正在显示的页面是哪个进程的那个activity时,你可以输入
    adb shell dumpsys activity top |grep mResumed=true -C 10

    WX20181122-181657@2x.png
    解读:
    • grep mResumed=true代表查询当前处于mResumed=true的activity,也就是正在前台展示的Activity;
    • Activity为com.ss.android.article.news/.activity.MainActivity,进程名为com.ss.android.article.news,进程pid=20958;
  2. 场景2
    查询某个App所有service状态
    adb shell dumpsys activity s com.ss.android.article.news

    image.png
    解读:
    • 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等各种信息。
  3. 场景3
    查询某个App的所有Activity状态,其中包括页面的View Hierarchy信息
    adb shell dumpsys activity a com.ss.android.article.news

    image.png
    解读:
    • 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. 场景4:查询某个App的进程状态
    adb shell dumpsys activity p com.ss.android.article.news

    image.png

解读:

当然还有很多其他场景,这里就不一一举例了,大家可以多多尝试,亲自去体验。

参考文章:
http://gityuan.com/2016/05/14/dumpsys-command/

上一篇下一篇

猜你喜欢

热点阅读