转载请注明出处:http://blog.csdn.net/aaa111/article/details/53068197

1. 什么是dumpsys

The dumpsys tool runs on the device and provides information about the status of system services.
dumpsys这个工具可以查看当前设备系统服务信息。

2. 如何使用dumpsys

如果你直接运行adb shell dumpsys的话,会得到所有系统服务的输出,输出结果比你想要的多得多。为了控制输出内容,需要指定想要查看的服务。如:
$ adb shell dumpsys input

3. dumpsys能查看到的信息有那些

用下面的命令可以列出所支持查看的系统服务

$ adb shell dumpsys -lCurrently running services:DockObserverSurfaceFlingeraccessibilityaccountactivityalarm…

常用命令举例:
使用dumpsys查看android系统服务信息_第1张图片
使用dumpsys查看android系统服务信息_第2张图片

不同服务可以跟不同的命令选项,以activity为例:
使用dumpsys查看android系统服务信息_第3张图片

获取Activity信息:

adb shell dumpsys activity
加上-h可以获取帮助信息
获取当前界面的activity详情,可以用:
adb shell dumpsys activity top(控件都看得到)
对了,还有一种情况,就是当前界面是一个activity动态加载的fragment的话,这时候就算知道了activity也对应不上界面的内容,不过这时候还是可以用这个命令,去看输出结果的Fragment关键字,排在最上面的就是当前界面对应的Fragment。
要获取当前界面的Activity(结果显示的是最顶层的activity,但activity可能不是当前界面上的最顶层,自行体会):
adb shell dumpsys activity top | findstr ACTIVITY这个其实就是把上面命令的结果过滤一下只显示第一行
(findstr不可用的话用grep)
最近activity:
使用dumpsys查看android系统服务信息_第4张图片

获取电源管理信息:

adb shell dumpsys power
可以获取到是否处于锁屏状态:mWakefulness=Asleep或者mScreenOn=false
亮度值:mScreenBrightness=255
屏幕休眠时间:Screen off timeout: 60000 ms
屏幕分辨率:mDisplayWidth=1440,mDisplayHeight=2560
wake lock:Wake Locks:size =
使用dumpsys查看android系统服务信息_第5张图片
GsmConnection是一个tag,在new wake_lock的时候自行定义,通过pid可以确定其所在的服务进程。

查看手机telephony状态:

可以看网络注册状态,数据链接状态,是否漫游,信号强度,等等,参数我就不一一解毒了,跟android系统版本也有关系
使用dumpsys查看android系统服务信息_第6张图片

查看notification:

adb shell dumpsys notification
查看是由哪个应用发出的通知。比如你用着手机的时候出来一个神烦的广告,但是你却不知道它是哪个应用弹出的,那去卸载哪个应用呢?

我们截图输出结果的一部分

NotificationRecord(0x01b93b62: pkg=com.tencent.mobileqq user=UserHandle{0} id=121 tag=null score=0 key=0|com.tencent.mobileqq|121|null|10125: Notification(pri=0 contentView=null vibrate=null sound=null tick defaults=0x0 flags=0x11 color=0x00000000 vis=PRIVATE))      uid=10125 userId=0      icon=Icon(typ=RESOURCE pkg=com.tencent.mobileqq id=0x7f0204bf) / com.tencent.mobileqq:drawable/name      pri=0 score=0      key=0|com.tencent.mobileqq|121|null|10125      seen=true      groupKey=0|com.tencent.mobileqq|121|null|10125      contentIntent=PendingIntent{bc254f3: PendingIntentRecord{e9265b0 com.tencent.mobileqq startActivity}}      deleteIntent=PendingIntent{5711c29: PendingIntentRecord{873abae com.tencent.mobileqq broadcastIntent}}      tickerText=Flour_Mo(MoKee Project):[挖鼻孔]

比较关键的是contentIntent和deleteIntent,这两个类型都是PendingIntent。注意这里能看到的是应用的包名,并不能看到点击后会跳转到哪个activity(大家代码都会混淆的好嘛,想看也看不到吧)。

查看SurfaceFlinger:

adb shell dumpsys SurfaceFlinger
这里写图片描述
用来查看当前界面上有几个frame,分别的源是什么。手机界面莫名其妙弹出一个dialog?试试这个命令吧,可以看到是由那个进程的那个Activity弹出的。

查看wifi信息(连接记录):

adb shell dumpsys wifi
这个厉害了,可以看看他/她有没有连过闺蜜/老王加的wifi!
使用dumpsys查看android系统服务信息_第7张图片
最后一个乱码,因为是中文wifi,不过后面也可以看到中文名
这里写图片描述
可以看到很多信息的,自己去发掘吧(密码没有,要看密码去看系统文件吧)。

4. 使用到dumpsys的案例

4.1 接听视频来电屏幕会休眠

一般来说,处于视频电话的时候,屏幕应该保持常亮的,这样才能方便用户查看视频内容。
问题出现的时候根据以往的经验,知道这很有可能是某个wake_lock没有申请到,比较MO和MT的wake_lock看到:
adb shell sumpsys power
使用dumpsys查看android系统服务信息_第8张图片
Mt端少了SCREEN_BRIGHT_WAKE_LOCK,而它在PowerManager.java中的定义正是:
使用dumpsys查看android系统服务信息_第9张图片
直接搜关键字SCREEN_BRIGHT_WAKE_LOCK没有在InCallUI,Telecomm,Telephony搜到相关的wake_lock类型,但是我们看到这个wake_lock和FLAG_KEEP_SCREEN_ON有联系,多数应用都是用的这个flag,那么我们再搜这个关键字的收,就在InCallUI中找到了出问题的地方,找到问题了就好改啦~

4.2 设置双卡询问,弹出的dialog属于Dialer还是InCallUI

双卡手机在设置了拨号前每次询问的时候,会弹出一个dialog(当然也有厂家定制的在拨号盘上之间诶选择),我们的入口是Dialer,而通话界面属于InCallUI,那这个选择SIM卡的dialog属于谁?
用下面的命令可以查看
这里写图片描述
如果你觉得这个方法不是那么有必要,那你应该还没有遇见过没title没内容的dialog/斜眼笑
还有这个方法适合于大多数场景,但也有例外。比如这个顶层界面(不一定是dialog)上的东西不是从Activity中显示出来的,(纳尼哦?!居然有这种事?!)这时候可以尝试用adb shell dumpsys SurfaceFlinger,这个命令可以查看界面是由哪些内容绘制的(想知道原理的可以去看SurfaceFlinger机制)
这里写图片描述
上图的信息显示,当前界面有状态栏,导航栏,还有一个联想的com.lenovo.ideafriend/com.lenovo.ideafriend.alias.DialtactsActivity,那状态栏和导航栏都很好认,界面上剩下的就是那个DialtactsActivity了。
感谢阅读。

更多相关文章

  1. android滑动翻页主界面
  2. SQlite Android数据库的应用 Android SQLite 简易的学生成绩管理
  3. Android 调用系统播放器,调用系统Camera
  4. android判断当前网络状态及跳转到设置界面
  5. android UI注册登录界面
  6. 风火轮 树莓派3 android系统编译

随机推荐

  1. intent-filter的data属性详述
  2. Android利用BitMap获得图片像素数据的方
  3. Android(安卓)ORM 框架:GreenDao 使用详解
  4. Android和iPhone截屏快捷键
  5. Android(安卓)获取新装程序信息
  6. 关于Contacts的那点事儿
  7. 利用wifi连接Android真机调试React Nativ
  8. Content Providers
  9. android菜鸟学习笔记31----Android使用百
  10. Android(安卓)实现一个简单的画板功能