从技术角度分析Android APP防杀措施

来源:互联网 发布:绝地求生狙击枪数据 编辑:程序博客网 时间:2024/05/17 08:58

概述

由于Google的推送服务在国内无法使用,开发人员就不得不采用特殊手段保证app不被杀死,使其能够长期驻留。不让app被杀,目的只有一个,就是保证tcp长链接,tcp消息能够必达。其实,让app不会被杀掉,一直处于运行状态。不论从用户角度,还是从Android生态环境的角度其实都是不推荐的。对于用户而言,app的长期驻留,导致其耗电加剧,CPU无法休眠,长期占用资源;对于Android生态环境而言,破坏了Android的生态环境。

常见的防杀方法

从技术角度分析,主要有以下几种方式

  • 1、Service设置成START_STICKY,kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样。现在几乎没什么用,同时调整优先级也是白搭。

  • 2、通过 startForeground将进程设置为前台进程,做前台服务,优先级和前台应用一个级别​,除非在系统内存非常缺,否则此进程不会被 kill

  • 3、Service双进程守护:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程

  • 4、据说QQ采用的方式是在应用退到后台后,另起一个只有 1 像素的页面停留在桌面上,让自己保持前台状态,保护自己不被后台清理工具杀死。上面这种方式,不知道是不是真的,我所知道的QQ和大的设备厂商有合作,被加入到了白名单中,这个已经得到验证,有个同事在vivo的同学讲了这个事情。

  • 5、在已经root的设备下,修改相应的权限文件,将App伪装成系统级的应用(Android4.0系列的一个漏洞,已经确认可行)

  • 6、Android系统中当前进程(Process)fork出来的子进程,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响。鉴于目前提到的在Android-Service层做双守护都会失败,我们可以fork出c进程,多进程守护。死循环在那检查是否还存在,具体的思路如下(Android5.0以下可行)

    • 用C编写守护进程(即子进程),守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。
    • 在NDK环境中将1中编写的C代码编译打包成可执行文件(BUILD_EXECUTABLE)。
    • 主进程启动时将守护进程放入私有目录下,赋予可执行权限,启动它即可。

这种方式,我之前采用过,在5.0以下可用。然并卵,在小米这种神机上面没用。

  • 7、联系厂商,加入白名单

备注:任何一种保活的措施,都是一种恶意的行为,严重破坏了Android的生态环境。这种行为对于用户而言也是不可接受的。随着Android版本的发展,对于这种恶意行为控制的更加严格。

1 0
原创粉丝点击