Android应用有时需要执行脚本,但该脚本需要root用户才能执行,这时可借用有root权限的进程来实现。
具体方法在init.rc添加一服务,如
service cmd /system/bin/cmd
class main
user root
disabled
oneshot
app将需要执行的命令写到某系统属性如persist.sys.cmd,然后通过SystemProperties.set("ctl.start cmd","0")启动cmd服务,cmd服务读取属性值persist.sys.cmd,并调用system函数执行函数即可。
cmd的二进制可执行程序参考如下
int main(void){
int ret;
char cmd[PROPERTY_VALUE_MAX];
property_get("persist.sys.cmd",cmd,"0")
ret=system(cmd);
property_set("persist.sys.cmd.ret",itoa(ret))
return ret;
}
编写相应的Android.mk,并内置到/system/bin/。
由于platform平台签名的应用才能设置系统属性,需要在AndroidManifest.xml加上
android:sharedUserId="android.uid.system"
将该应用加入系统签名或者放到Android源码编译即可。