Android實用命令彙總——dumpsys

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

dumpsys_service

解讀:

  • 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

dumpsys_broadcast

解讀:

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

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

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

dumpsys activity a com.sina.weibo

dumpsys_activity_task

解讀:

  • 格式: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

dumpsys_processes

  • 格式: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狀態
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章