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