美文网首页
Android 调试系列-Dumpsys实战篇

Android 调试系列-Dumpsys实战篇

作者: 凡星轨迹 | 来源:发表于2018-11-24 23:19 被阅读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

    解读:

    • 格式:ProcessRecord{Hashcode pid:进程名/uid},进程pid=3938,进程名为com.ss.android.article.newsuid=u0a171.
      该进程中还有Services,Connections, Providers, Receivers等信息.

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

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

    相关文章

      网友评论

          本文标题:Android 调试系列-Dumpsys实战篇

          本文链接:https://www.haomeiwen.com/subject/whxrqqtx.html