frameworks/native/cmds下的工具都是用C/C++开发,基于native接口。有atrace、bugreport、dumpstate、dumpsys、rawbu、screenshot、service。
atrace
bugreport
Bugreport启动dumpstate,与其建立UNIX套接字连接,将套接字的数据输出到stdout。
Dumpstate需要系统root用户权限,普通用户不能直接启动,bugreport是通过init进程间接启动dumpstate。在init.rc里面定义了dumpstate服务,bugreport通过ctl.start属性启动dumpstate服务。
dumpstate
Dumpstate用来输出系统运行状态,包括系统构建配置,进程、线程信息,虚拟机的trace文件等等。
dumpsys
Dumpsys用来输出ServiceManager管理的服务的状态。通过ServiceManager找到指定名字的服务,调用其dump接口。服务可以对dump接口参数化。
rawbu
Rawbu使用纯二进制方式备份、恢复/data目录下文件,包括stat结构。rawbu需要使用root用户身份执行,在备份、恢复前停止runtime、zygote服务(init.rc服务),完成后在启动这两个服务。
screenshot
Screenshot用来保持屏幕快照。实现方式为:打开framebuffer,读入pixel数据,通过libpng转换为png格式,并写入目标文件。screenshot需要使用root用户身份执行,在打开framebuffer后,切换到AID_SHELL用户。
service
Service可以列出ServiceManager管理的服务,检查某个服务是否存在,甚至可以调用服务上的方法。
调用方法时需要指定方法对应的code(整数),调用参数通过类型值的方式描述。类型有:
类型名 | 说明 |
i32 | 32位整数 |
s16 | 字符串 |
null | 空句柄 |
intent | 值的形式为:key=value列表 |