本文介绍的方案是在有安卓底层SDK源码的方案下实行的,若不具备这个条件的就不用往下继续看了,以免耽误你的时间。
公司是做工程设备,运行的是安卓系统,系统使用是的user,系统上层的app都是预安装的。正常情况下,这样的app的是没法做一些特权操作的,如重启系统、安装软件、读写一些特殊文件夹的文件。为了解决这些问题,特意做了一个方案,使第三方的app也拥有了root权限。
我们知道系统启动后会运行init程序,init程序会解析init.rc脚本,并执行init.rc中的命令,而init程序是拥有root权限的,那么如果写一个服务程序,将此服务程序放入到init.rc中,使其开机启动,并常驻与系统中,这样这个服务程序也将拥有了root权限。而我们的第三方app想要获取一些特权操作时,只需要把把操作指令发送给我们的服务程序,由这个服务程序去执行即可。
不难看出,这其实是用java调用了一个exec方法执行了一条脚本命令,而god是我底层的一个发送程序,意思是将god后方的命令发送给我底层的一个服务程序。底层的服务程序收到命令后,就会去执行它。
下面简单说下代码
这里的通讯使用的是socket,当然你也可以用管道或者binder或其他进程间通讯方案
执行脚本时使用的是system,当然也可以使用popen并把代码的执行结果返回给app。
当然这只是众多方案中的一种,本人技术有限,目前只能想到这个方案,若有同行朋友还有其他解法或补充之处,交流一二简直再好不过,由于代码文件比较多,这里就不全部上传,若有需要的朋友可以联系我,我将毫无保留的分享给你。