Android dumpsys命令用法

zhuls1990 8年前發布 | 19K 次閱讀 Android dumpsys Android開發 移動開發

dumpsys命令功能很強大,能dump系統服務的各種狀態,非常有必要熟悉該命令的用法以及含義。

一、 dumpsys命令

1.1 服務列表

不同的Android系統版本支持的命令有所不同,可通過下面命令查看當前手機所支持的dump服務,先進入adb shell,再執行如下命令:dumpsys -l。 這些服務名或許你并看不出其調用的哪個服務,那么這時可以通過下面指令:service list

表一:

服務名 類名 功能
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 設備信息  
。。。 。。。  

未完待續…

1.2 查詢服務

通過下面命令可打印具體某一項服務:dumpsys <service>,其中便是前面表格中的服務名,比如:

dumpsys cpuinfo //打印一段時間進程的CPU使用百分比排行榜
dumpsys meminfo -h  //查看dump內存的幫助信息
dumpsys package <packagename> //查看指定包的信息

系統服務非常之多,那么接下來將重點說說其中之一:dumpsys activity用法.

二、 Activity

dumpsys activity [options] [cmd]

下面分別說說options和cmd有哪些可選值

2.1 options

options可選值:

  • -a:dump所有;
  • -c:dump客戶端;
  • -p [package]:dump指定的包名;
  • -h:輸出幫助信息;

dumpsys activity等價于依次輸出下面7條指令:

dumpsys activity intents
dumpsys activity broadcasts
dumpsys activity providers
dumpsys activity services
dumpsys activity recents
dumpsys activity activities
dumpsys activity processes

2.2 cmd

cmd可選值

cmd 解釋 縮寫
activities activity狀態 a
broadcasts 廣播 b
intents pending intent狀態 i
processes 進程 p
oom 內存溢出 o
services Service狀態 s
service service狀態(Client端)  
providers ContentProvider狀態 prov
provider ContentProvider狀態(Client端)  
associations tracked app associations as
permissions URI permission grant state perm
package package相關信息  
all 所有的activities信息  
recents recent activity狀態 r
top top activity信息  
write 將狀態持久化到存儲區  
track-associations 使能association tracking  
untrack-associations 禁止和清空association tracking  
  • cmd:上表加粗項是指直接跟包名,另外services和providers還可以跟組件名
  • 縮寫:基本都是cmd首字母或者前幾個字母,用cmd和縮寫是等效: dumpsys activity broadcasts dumpsys activity b //等效

三、場景

下面以新浪微博App作為實例,由于輸出結果較多,每個場景截圖只挑選部分重要的信息。

場景1:查詢某個App所有的Service狀態

dumpsys activity s com.sina.weibo

Android dumpsys命令用法

解讀:

  • Service類名為com.morgoo.droidplugin.PluginManagerService
  • 運行在進程pid=7220,進程名為com.sina.weibo,uid=10094
  • 通過bindService連接該服務的進程pid=7306,進程名為com.sina.weibo:PluginP03

當然還有packageName,baseDir(apk路徑),dataDir(apk數據路徑),createTime等各種信息。另外,新浪微博采用的是360開源的Android插件機制(com.morgoo.droidplugin),主要用于hotfix等功能。

場景2:查詢某個App所有的廣播狀態

 dumpsys activity s com.sina.weibo

Android dumpsys命令用法

解讀:

  • android.intent.action.SCREEN_ON代表手機亮屏廣播;
  • 接收該廣播的receiver有很多個,其中一個所在進程為pid=7220,進程名為com.sina.weibo

場景3:查詢某個App所有的Activity狀態

輸出結果較多,尤其是View Hierarchy,下面截取部分:

dumpsys activity a com.sina.weibo

Android dumpsys命令用法

解讀:

  • 格式:TaskRecord{Hashcode #TaskId Affinity UserId=0 Activity個數=1};所以上圖信息解析后就是TaskId=1802,Affinity=com.sina.weibo,當前Task中Activity個數為1。
  • effectiveUid為當前task所屬Uid,mCallingUid為調用者Uid=u0a94,mCallingPackage為調用者包名,這里是com.sina.weibo
  • realActivity:task中的已啟動的Activity組件名com.sina.weibo/.SplashActivity

場景4:查詢某個App的進程狀態

dumpsys activity p com.sina.weibo

Android dumpsys命令用法

  • 格式:ProcessRecord{Hashcode pid:進程名/uid},進程pid=7306,進程名為com.sina.weibo:PluginP03,uid=10094.
  • 該進程中還有Services,Connections, Providers, Receivers,可以看出該進程是沒有Activity的進程。

其他

還有很多場景,會用到不同的參數,這里就不再一一列舉,建議大家多去嘗試,慢慢地就更加熟練,再比如:

dumpsys activity top //當前界面app狀態
dumpsys activity oom //進程oom狀態

via: http://gityuan.com/2016/05/14/dumpsys-command/ 

 本文由用戶 zhuls1990 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!