frameworks/base/cmds下的工具都是用java开发,基于api接口。有am、backup、bmgr、bu、content、ime、input、media、pm、requestsync、screencap、settings、svc、wm。
BaseCommand类用来辅助处理命令行参数和其他公共行为,其源代码位于:
frameworks/base/core/java/com/android/internal/osBaseCommand.java。
成员 | 类型 | 说明 |
run | void (String[]) | 初始化命令行解析环境,调用onRun,处理无效参数异常时,调用onShowUsage。 |
showUsage | void () | 调用onShowUsage,提供System.err作为输出目标 |
showError | void (String) | 输出usage和错误信息到System.err |
onRun | void () | 程序主逻辑,需要派生类实现 |
onShowUsage | void (PrintStream) | 输出usage信息,需要派生类实现 |
nextOption | String () | 获取下一个选项参数,如果下一个参数不是“-”开头,返回null,也支持选项合并参数的情形 |
nextArg | String () | 获取下一个参数,没有下一个,返回null |
nextArgRequired | String () | 获取下一个参数,没有下一个,抛出异常 |
base工具的启动都有一个封装shell脚本,脚本调用app_process启动jar包中的命令实现类。比如am工具的启动shell脚本为:
#!/system/bin/sh # # Script to start "am" on the device, which has a very rudimentary # shell. # base=/system export CLASSPATH=$base/framework/am.jar exec app_process $base/bin com.android.commands.am.Am "$@" |
am
Am调用ActivityManager的接口,实现启动、停止某个Activity、停止某个包进程、切换用户、发送广播、输出状态等功能。
bmgr
Bmgr与系统backup服务通信。
bu
Bu调用系统backup服务的功能来实现apk、obb、shared、system数据的备份、恢复。
content
Content 用来与ContentProvider通信,实现内容的查询、添加、删除、更新、调用。
ime
Ime用来设置输入法,可以列出、启用、禁用、切换输入法。Ime与系统input_method 通信,通信接口IInputMethodManager。
input
Input是framework提供的一个输入工具,可以模拟输入键盘、鼠标等设备的事件。
Input利用InputManager提供的injectInputEvent方法向framework层直接插入输入事件。
media
Media用来控制当前播放,实现原理是发送输入事件给AudioService。
Media另一个用途是监视播放行为,通过AudioService的registerRemoteControlDisplay接口方法注册监视器。
pm
Am调用PackageManager的接口,实现列出、安装、卸载应用;列出共享库、权限;创建、删除用户等功能。
requestsync
Requestsync 调用ContentResolver的requestSync方法,来同步一些信息。
screencap
Screencap用来获取屏幕快照。Screencap用C++开发。Screencap使用ScreenshotClient或者通过读framebuffer获取屏幕快照。ScreenshotClient通过SurfaceFlinger的captureScreen方法获取屏幕快照。
settings
Settings是系统设置查看修改工具。访问“settings”内容提供者(ContentProvider)。
svc
Svc是一个工具集,封装了电源、USB、无线WIFI、移动数据的配置功能。
wm
Wm调用WindowManager的接口,获取、设置窗口的分辨率(size)、密度(density),设置overscan。