一、 dumpsys命令
1.1 服務列表
不同的Android系統版本支持的命令有所不同,可通過下面命令查看當前手機所支持的dump服務,先進入adb shell,再執行如下命令:dumpsys -l。 這些服務名或許你并看不出其調用的哪個服務,那么這時可以通過下面指令:service list。
表一:
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:上表加粗項是指直接跟包名,另外services和providers還可以跟組件名;
縮寫:基本都是cmd首字母或者前幾個字母,用cmd和縮寫是等效: dumpsys activity broadcasts dumpsys activity b //等效
三、場景
下面以新浪微博App作為實例,由于輸出結果較多,每個場景截圖只挑選部分重要的信息。
場景1:查詢某個App所有的Service狀態
dumpsys activity s com.sina.weibo
解讀:
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.intent.action.SCREEN_ON代表手機亮屏廣播;
接收該廣播的receiver有很多個,其中一個所在進程為pid=7220,進程名為com.sina.weibo
場景3:查詢某個App所有的Activity狀態
輸出結果較多,尤其是View Hierarchy,下面截取部分:
dumpsys activity a com.sina.weibo
解讀:
格式: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
- 格式: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狀態