刚开始注意到android dumpsys的时候,发现可以用来在服务的dump方法里添加一些特定的调用,来方便进行调试,但是这样传参数不太方便,后来才发现,android里已经有这样的功能了,那就是cmd命令,和dumpsys类似,都是通过binder调用服务service的方法。
查看cmd命令的实现,
frameworks/native/cmds/cmd/
cmd.cpp
208 209 Vector<String16> args; 210 for (int i=2; i<argc; i++) { 211 args.add(String16(argv[i])); 212 } 213 String16 cmd = String16(argv[1]); 214 sp<IBinder> service = sm->checkService(cmd); 215 if (service == NULL) { 216 ALOGW("Can't find service %s", argv[1]); 217 aerr << "cmd: Can't find service: " << argv[1] << endl; 218 return 20; 219 } 220 221 sp<MyShellCallback> cb = new MyShellCallback(); 222 sp<MyResultReceiver> result = new MyResultReceiver(); 223 224#if DEBUG 225 ALOGD("cmd: Invoking %s in=%d, out=%d, err=%d", argv[1], STDIN_FILENO, STDOUT_FILENO, 226 STDERR_FILENO); 227#endif 228 229 // TODO: block until a result is returned to MyResultReceiver. 230 status_t err = IBinder::shellCommand(service, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO, args, 231 cb, result);
android中的一些命令,如pm, settings,其实是cmd命令包装的脚本,
settings命令是内容为cmd settings "$@" 的可执行脚本
参考资料:
Android系统settings命令查看属性_Just_Paranoid的博客-CSDN博客_android settings命令