如何让你的app一直在运行状态呢?

默认情况下,不做任何跨进程部署配置的话,每个android app运行在单独一个虚拟机上,每个虚拟机对应一个进程。当app被系统回收或者是被用户主动杀掉(通过app管理软件),进程就彻底退出了。

在有些场景,app所在的进程退出了,我们希望还能做一些操作。比如,app被卸载后(卸载会先退出运行),我们希望跳转浏览器做一些卸载原因的调查问卷;或者为了优化体验,提高app热启动速度,再比如,有些监控的app,我们希望一直在运行,否则可能数据不准确,这就需要app所在进程退出后能自我启动。

为了做到app停止运行状态的监控和执行回调,典型的解决方案就是多进程相互守护。

去你的手机上瞧瞧,设置-应用管理-运行中 ,有没有发现,支付宝,QQ,微信等等App同时都有两个进程在运行,有木有。

multiprocess

双进程相互守护

双进程A和B相互守护,当A进程检测到B进程退出时,A进程重新启动B进程,同理当A进程退出时,B重新启动A进程。进程的运行状态的检测是实现进程守护的关键点,比较容易想到的方案有:

  1. 通过轮训的方式查询远端进程的状态
  2. 通过发送心跳包来看是否能接受应答,无应答,远端进程可能已经退出
  3. 在Application生命周期终止时,也就是onTerminate方法里发送广播通知对方自己即将灭亡

通过轮训的方式,只要通过ps命令查询状态,无需A和B做进程间通信;心跳包应答检测的方式需要通过socket或者别的IPC机制来做通信。

守护进程可以是一个运行android app的进程(Dalvik进程),也可以是一个linux的原生进程,如果是Dalvik进程,当app被卸载时,进程会被退出,字节码被移除,无法再运行任何逻辑比如跳转浏览器页面。

如果守护进程是linux系统里fork一个新的进程,与app不在同一个进程空间,当app被关闭或者杀掉或者卸载的时候,不会影响守护的运行状态,也就是说守护还是处于运行状态,可以执行相应操作。因此守护可以监控app的运行状态,发现app停止运行时,可以发送命令启动app进程,保证app的生存,这对某些系统监控的app来说至关重要。而且linux上的进程,通过android上的PackageManger获取不到,也不会在app管理软件的运行软件之列,基本上不会被杀掉,守护本身可以相对可靠的生存。

本文介绍一下,如何在linux 上fork一个原生进程来守护Dalvik app的进程。

linux原生进程守护

介绍几个linux下的几个api




守护流程图

守护流程图

守护的程序代码

run_service的实现

编译成功后生成xxx,重命名为xxx.so,把文件拷贝到libs下,这样安装后该文件会被同动态库一起拷贝到data/data/app_package目录下,编写拷贝和chmod相关逻辑的代码,大概流程如下

  1. path = “/data/data/” +packageName; // 安装后的app路径
  2. 执行shell命令:dd if= path+lib/xxx.so of=path/xxx ;//拷贝到app路径下,重命名为xxx
  3. 赋可执行权限 chmod 777 path/xxx;
  4. 运行可执行文件 path/xxx -p process_name -a pkgname ..(别的参数)

需要注意的一点:

这里的操作都是通过执行shell来完成的,需要先cd到app 路径下,才会有读写权限。

编好代码打包测试时,通过app管理界面停止app的运行,看看app是否会被重新启动。

参考

http://www.cnblogs.com/caosiyang/archive/2012/06/25/2560976.html

http://blog.csdn.net/cashey1991/article/details/7942809

Android App 免杀教程相关推荐

  1. Android APP 快速开发教程(安卓)

    Android APP 快速开发教程(安卓) 前言 本篇博客从开发的角度来介绍如何开发一个Android App,需要说明一点是,这里只是提供一个如何开发一个app的思路,并不会介绍很多技术上的细节, ...

  2. 源码免杀教程 源码免杀思路详解

    绝对不一样的源码免杀教程!绝对不一样的免杀实战体验!清晰的思路!细致全面的思路详解!让你感到免杀原来可以这么简单!教你如何在源代码中找出被杀代码,修改代码从而达到免杀效果! 免杀之-网络攻防入门书籍推 ...

  3. 【转】RFire系列免杀教程

    RFire系列免杀教程第1到20课 RFire系列免杀教程, 木马免杀 文件名称:       [原创]RFire系列免杀教程第1课.rar 文件大小:       41.16MB 文件类型:     ...

  4. 道德网安-菜鸟免杀教程

    道德网安-菜鸟免杀教程 下载地址 https://pan.baidu.com/s/1VWO2RzElXOaQUmfaHM6P8w 创业资料/视频资料/安全相关 扫码下面二维码关注公众号回复 10017 ...

  5. 傻瓜式Android APP开发入门教程

    这篇文章主要介绍了Android APP开发入门教程,从SDK下载.开发环境搭建.代码编写.APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,android各种机子和rom的 ...

  6. gh0st3.6源码编译+++免杀教程

    这里有4个教程    可以去看看 gh0st3.6编译教程 http://www.3800hk.com/donghua/f/24166.html vc++6.0对gh0st驱动免杀教程.rar htt ...

  7. 黑鹰VIP免杀教程系列

    黑鹰VIP免杀教程系列 2007年07月06日 星期五 13:57 黑鹰免杀 黑鹰VIP免杀教程系列(1) 黑鹰VIP免杀教程系列(2) 黑鹰VIP免杀教程系列(3) 黑鹰VIP免杀教程系列(4) 黑 ...

  8. Android APP完整基础教程(13)应用资源-动画

    动画模式在android系统中被分为三类,分别为: tween(view) animation:补间动画 frame(drawable) animation:逐帧动画 property animati ...

  9. Android APP完整基础教程(17)图形系统-SurfaceView

    1 SurfaceView的绘图机制 @1 理解SurfaceView 为什么要使用SurfaceView,而不是直接使用View? 这里要考虑到动态场景和静态场景的差异,相对于动态场景: View组 ...

  10. Kail Linux渗透测试教程之免杀Payload生成工具Veil

    Kail Linux渗透测试教程之免杀Payload生成工具Veil 免杀Payload生成工具--Veil Kail Linux渗透测试教程之免杀Payload生成工具Veil,Veil是一款利用M ...

最新文章

  1. 作为一只Python爬虫:如何破解滑动验证码
  2. java排序——桶排序
  3. golang中的base64
  4. OpenGL equirectangular等矩形环境图的实例
  5. 终于搞定T43上的Access Connection了!
  6. 不限速下载工具Persepolis Download Manager中文免费版
  7. 泰山200机架服务器包含哪些型号_机柜的品牌有哪些?机柜如何安装布线?这次终于可以布好线了...
  8. 分类器 --- 手写数字识别(二元、多类)、多标签分类、多输出分类(图片清洗)
  9. cdr怎么做文字路径_CDR怎么在路径上打字?
  10. 使用reaver命令穷举PIN码破解WPA2-PSK加密的无线网络
  11. 算法分析-时间复杂度:大O、大Ω、大θ、小o、小ω
  12. 901.freeswitch常用命令
  13. a pubhub service
  14. 一种简单的2D Roguelike地图生成算法
  15. java 并发xmind_多线程+高并发+操作系统+网络+基础+调优+源码等xmind图整理好了
  16. 2011年5月51CTO壁纸点评活动获奖名单【已结束】
  17. [深度学习论文笔记]UNETR: Transformers for 3D Medical Image Segmentation
  18. PAT——Dating(详细讲解题目的意思和要求)
  19. matlab语言基础
  20. html中线的移动怎么设置彩铃,移动彩铃如何设置【方法步骤】

热门文章

  1. 人社部《劳动合同》通用范本模板
  2. 红外图分特点析及红外图像分割
  3. 基于最新导则下的生态环境影响评价技术方法及图件制作与案例实践
  4. 2022电工(技师)考试题库模拟考试平台操作
  5. matlab——imhist和histeq函数
  6. 知了课堂Day2——微信小程序基础02——wxss
  7. 好玩的C语言大全,好玩的c语言程序!
  8. 全球首个用户分享区块链+AI大数据体系,专业跨境医疗机构“海医通”发布XMC“海医链”
  9. bbs论坛 Android客户端简单设计
  10. Java、JSP小区车辆停车管理系统