Android调用另一个现成的可执行程序或系统命令

参考: http://blog.csdn.net/legendmohenote/article/details/5828455


Android应用程序怎样启动让init进程知道我们想运行那个进程呢?
答案是设置系统属性“ctl.start”,把 “ctl.start”设置为你要运行的Service,假设为“ vtserver ”,
 SystemProperties.set("ctl.start", "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
 从源码中我们发现如果设置“ctl.”开头的Android系统property,将会调用check_control_perms函数来检查调用者的权限
我们发现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" );//用来打开这个文件;
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值