刚开始注意到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命令
|