参考:
http://blog.csdn.net/legendmohenote/article/details/5828455
答案是设置系统属性“ctl.start”,把 “ctl.start”设置为你要运行的Service,假设为“
vtserver
”,
Android系统将会帮你运行“ctl.start”系统属性中指定的 Service。那么运行结果init进程将会将会写入命名为“init.svc.+Service名称”的属性中,也就是“init.svc.
vtserver
” 属性,应用程序可以参考查阅这个值来确定Service执行的情况。
结束
SystemProperties.set("ctl.stop", "vtserver");
难道Android属性“ctl.start”是所有进程都可以设置的吗?那世界不就乱套了,谁都可以可以执行init.rc中Service了,查看 property_service.c中的源码,设置Android系统属性的函数为handle_property_set_fd
我们发现root权限和system权限的应用程序将会授权修改“ctl.”开头的Android系统属性。否则将会检查control_perms全局变量中的定义权限和Service。
2:
在程序中想要调用另一个现成的可执行程序或系统命令
,java提供了exec方法,具体用法是:
Runtime rt = Runtime.getRuntime();//
Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法
Process proc = rt.exec( "system/bin/vtserver" );//用来打开这个文件;
Process proc = rt.exec( "system/bin/vtserver" );//用来打开这个文件;
proc.waitfor();
.........
proc .destroy();
.
Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。
注解:
进程文件:
vtserver
.exe 进程名称:protector suite virtual token
init.rc相关部分
service vtserver /system/bin/vtserver
user root
disabled
oneshot