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