最近公司一个应用需要让应用启动后不能被360和一些清理内存工具杀死,然后搜索一些相关的资料确定了下面的方法进行进程的守护:使用jni fork出一个子进程用select方法检测管道是否可读,主体进程打开新建管道的写端,当主进程死亡时 写端自动关闭,select检测退出,然后启动service。
注意:这个方法在android5.0以上系统和部分小米机型不行,因为5.0以上的系统killbackgroundprocesses会杀死所有和当前被杀死APK的USERID一样的进程,由于守护进程的所有者和apk的USERID是一样的,所以会被同时杀死,导致进程守护失败。我试过用setuid去修改userid但是没有root权限是不可行的,如果有root权限就能将子进程的userid改成root,从而可以完美的实现守护的功能。
下面附上详细的实现过程:
需要从java端传入app的数据路径用于创建管道,进行进程监听
android使用JNI进程守护service
最新推荐文章于 2021-05-29 18:15:46 发布