Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 使用dumpsys查看android系統服務信息

使用dumpsys查看android系統服務信息

編輯:關於Android編程

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 -l
Currently running services:
DockObserver
SurfaceFlinger
accessibility
account
activity
alarm
…

常用命令舉例:
?這裡寫圖片描述
這裡寫圖片描述
?

不同服務可以跟不同的命令選項,以activity為例:
?這裡寫圖片描述

獲取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:
?這裡寫圖片描述

獲取電源管理信息:

adb shell dumpsys power
可以獲取到是否處於鎖屏狀態:mWakefulness=Asleep或者mScreenOn=false
亮度值:mScreenBrightness=255
屏幕休眠時間:Screen off timeout: 60000 ms
屏幕分辨率:mDisplayWidth=1440,mDisplayHeight=2560
wake lock:Wake Locks:size =
?這裡寫圖片描述
GsmConnection是一個tag,在new wake_lock的時候自行定義,通過pid可以確定其所在的服務進程。

查看手機telephony狀態:

可以看網絡注冊狀態,數據鏈接狀態,是否漫游,信號強度,等等,參數我就不一一解毒了,跟android系統版本也有關系
這裡寫圖片描述

查看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,分別的源是什麼。

查看wifi信息(連接記錄):

adb shell dumpsys wifi
這個厲害了,可以看看他/她有沒有連過閨蜜/老王加的wifi!
?這裡寫圖片描述
最後一個亂碼,因為是中文wifi,不過後面也可以看到中文名
?這裡寫圖片描述
可以看到很多信息的,自己去發掘吧(密碼沒有,要看密碼去看系統文件吧)。

4. 使用到dumpsys的案例

4.1 接聽視頻來電屏幕會休眠

一般來說,處於視頻電話的時候,屏幕應該保持常亮的,這樣才能方便用戶查看視頻內容。
問題出現的時候根據以往的經驗,知道這很有可能是某個wake_lock沒有申請到,比較MO和MT的wake_lock看到:
adb shell sumpsys power
?這裡寫圖片描述
Mt端少了SCREEN_BRIGHT_WAKE_LOCK,而它在PowerManager.java中的定義正是:
?這裡寫圖片描述
直接搜關鍵字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. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved