2020年3月14日11:21:04
一、 概述
1.1 dumpsys 命令用法
可通過 dumpsys 命令查詢系統服務的運行狀態 (對象的成員變量屬性值),命令格式:dumpsys 服務名
, 例如:
dumpsys activity
dumpsys window
dumpsys cpuinfo
dumpsys meminfo
可查詢的服務有很多,可通過下面任一命令查看當前系統所支持的 dump 服務:
adb shell dumpsys -l
adb shell service list
1.2 系統服務
表一:
服務名 | 類名 | 功能 |
---|---|---|
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 | 設備信息 |
… | … |
二、Activity 場景
dumpsys activity
,用於查詢 AMS 服務相關信息,可跟不同的參數,更多信息見文章 AMS 之 dumpsys 篇
下面以新浪微博 App 作爲實例,由於輸出結果較多,每個場景截圖只挑選部分重要的信息。
場景 1:查詢某個 App 所有的 Service 狀態
dumpsys activity s com.sina.weibo
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-AdeTV8no-1584157696901)(http://gityuan.com/images/tools/dumpsys_service.png)]
解讀:
- 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 b com.sina.weibo
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Seq1cipx-1584157696904)(http://gityuan.com/images/tools/dumpsys_broadcast.png)]
解讀:
- android.intent.action.SCREEN_ON 代表手機亮屏廣播;
- 接收該廣播的 receiver 有很多個,其中一個所在進程爲 pid=
7220
,進程名爲com.sina.weibo
場景 3:查詢某個 App 所有的 Activity 狀態
輸出結果較多,尤其是View Hierarchy
,下面截取部分:
dumpsys activity a com.sina.weibo
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hsK9zj1b-1584157696904)(http://gityuan.com/images/tools/dumpsys_activity_task.png)]
解讀:
- 格式: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
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Vo5dZUFt-1584157696905)(http://gityuan.com/images/tools/dumpsys_processes.png)]
- 格式:ProcessRecord{Hashcode pid: 進程名 / uid},進程 pid=7306,進程名爲
com.sina.weibo:PluginP03
,uid=10094. - 該進程中還有 Services,Connections, Providers, Receivers,可以看出該進程是沒有 Activity 的進程。
其他
還有很多場景,會用到不同的參數,這裏就不再一一列舉,建議大家多去嘗試,慢慢地就更加熟練,再比如:
dumpsys activity top
dumpsys activity oom
基本使用命令:dumpsys activity -h
Activity manager dump options:
[-a] [-c] [-p package] [-h] [cmd] ... //這個是後面可以跟的參數
cmd may be one of: //這個代表可以跟的命令
a[ctivities]: activity stack state //activity的棧信息
r[recents]: recent activities state//最新的acivity的信息
b[roadcasts] [PACKAGE_NAME] [history [-s]]: broadcast state//broadcastsde 相關信息
i[ntents] [PACKAGE_NAME]: pending intent state//intent的信息
p[rocesses] [PACKAGE_NAME]: process state//進程相關的信息
o[om]: out of memory management//內存溢出
prov[iders] [COMP_SPEC ...]: content provider state//provider信息
provider [COMP_SPEC]: provider client-side state
s[ervices] [COMP_SPEC ...]: service state
as[sociations]: tracked app associations
service [COMP_SPEC]: service client-side state
package [PACKAGE_NAME]: all state related to given package
all: dump all activities //輸出所有的activity信息
top: dump the top activity//輸出當前棧頂的activity信息
write: write all pending state to storage
track-associations: enable association tracking
untrack-associations: disable and clear association tracking
cmd may also be a COMP_SPEC to dump activities.
COMP_SPEC may be a component name (com.foo/.myApp),
a partial substring in a component name, a
hex object identifier.
-a: include all available server state.
-c: include client state.
-p: limit output to given package.
常見的命令使用介紹
1.dumpsys activity top
拿到一個新的 app,我們經常定位當前的焦點 activoty 的名字。
這個命令就可以顯示,而且還可以顯示包含的 fragment‘的信息、
2.dumpsys activity | grep run
過濾目前的所有的 activity 棧信息。
3.dumpsys activity -p 包名
過濾一個包的信息。