dumpsys命令功能很強大,能dump系統服務的各種狀態,非常有必要熟悉該命令的用法以及含義。
dumpsys命令可以顯示手機中所有應用程序的信息,並且也會給出現在手機的狀態。
直接執行adb shell dumpsys
會顯示所有信息。
1.1 dumpsys命令用法
可通過dumpsys命令查詢系統服務的運行狀態(對象的成員變量屬性值),命令格式:dumpsys 服務名
, 例如:
dumpsys activity //查詢AMS服務相關信息,相當於 ActivityManagerService.dump() dumpsys window //查詢WMS服務相關信息 dumpsys cpuinfo //查詢CPU情況 dumpsys meminfo //查詢內存情況
重點信息:dumpsys activity 等價於 ActivityManagerService.dump()。 同理其他的命令也是類似的方式。
可查詢的服務有很多,可通過下面任一命令查看當前系統所支持的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 設備信息
… …
1.3 源碼
frameworks/native/cmds/dumpsys/dumpsys.cpp
部分源碼:
if (argc == 1) { services = sm->listServices(); services.sort(sort_func); args.add(String16("-a")); } else { services.add(String16(argv[1])); for (int i=2; i<argc; i++) { args.add(String16(argv[i])); } } const size_t N = services.size(); if (N > 1) { // first print a list of the current services aout << "Currently running services:" << endl; for (size_t i=0; i<N; i++) { sp<IBinder> service = sm->checkService(services[i]); if (service != NULL) { aout << " " << services[i] << endl; } } } for (size_t i=0; i<N; i++) { sp<IBinder> service = sm->checkService(services[i]); if (service != NULL) { if (N > 1) {//dump多個Service時,Service信息之間的分隔 aout << "------------------------------------------------------------" "-------------------" << endl; aout << "DUMP OF SERVICE " << services[i] << ":" << endl; } int err = service->dump(STDOUT_FILENO, args); if (err != 0) { aerr << "Error dumping service info: (" << strerror(err) << ") " << services[i] << endl; } } else { aerr << "Can't find service: " << services[i] << endl; } }
執行dumpsys命令,那么將會dump所有Service,每個Service之間會分隔開
如果dumpsys一個沒有注冊的Service,那么則提示找不到Service,比如:
# dumpsys adb
Can't find service: adb
1.4 Graphics 相關
adb shell dumpsys |grep GLES adb shell dumpsys glxinfo adb shell dumpsys SurfaceFlinger |grep vsync adb shell dumpsys SurfaceFlinger |grep refresh-rate adb shell dumpsys SurfaceFlinger | grep -i phase
1.5 其他常用命令
$ adb shell getprop ro.bootimage.build.fingerprint
#查看build版本信息
$ adb shell getprop
#打印所有prop信息,可以在里面搜自己想要的
1.6 App啟動、卸載等相關常用命令
$ adb shell pm list packages |grep <app_key_words> #查詢app的package name
#eg: adb shell pm list packages |grep Yuanshen,獲取結果為: com.miHoYo.Yuanshen $ adb shell dumpsys package <packageName> |grep Main #查詢app的MainActivity name #獲取結果一般為以下格式,以原神為例:#com.miHoYo.Yuanshen/com.miHoYo.GetMobileInfo.MainActivity $ adb shell am start -n <ActivityName> #命令行啟動app $ adb uninstall <packageName> #卸載apk $ adb shell settings put global <var_name> <var_value> #修改全局變量 #eg: adb shell settings put global enable_gpu_debug_layers 1
#移除全局變量
$ adb shell settings delete global gpu_debug_layers_gles
Android屬性的設置和修改:
adb shell setprop <屬性名稱> value 其中,<屬性名稱>是要設置/修改的屬性的名稱。 eg: adb shell setprop ro.build.version.release2 "my_version" 這個命令將設置/修改名為ro.build.version.release2的屬性值為"my_version"。 請注意,執行此命令需要具有root權限。另外有些系統屬性是被保護的,無法修改
參考鏈接:
https://www.jianshu.com/p/01c5ffa19e96
https://www.jb51.net/article/107568.htm
https://www.iteye.com/blog/su1216-1729648