Android dumpsys簡介與常用命令


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM