NoActive墓碑是一款由myflavor开发的XP模块,通过该软件可以帮助用户对安卓手机后台的应用进行管理和控制,让安卓后台CPU不再活跃,达到IOS墓碑后台机制的效果,当你的程序在后台但是没有关闭时,系统会对该程序进行冻结,把它保留在RAM中但是断开了它与处理器的联系,不让它执行任何操作。在需要时再打开可以达到快速加载的效果。
软件功能
系统框架:
1、Hook应用切换事件,冻结切换至后台的应用,解冻切换至前台的应用
2、Hook广播分发事件,屏蔽被冻结的应用接收广播,从而避免触发广播ANR
3、Hook计算oom_adj事件,修改后台应用的oom_adj,白名单主进程500子进程700,冻结名单主进程700+子进程900+
4、Hook系统ANR事件,由于冻结之后,应用无法做出响应被系统认为是ANR,所以需要屏蔽ANR避免系统误杀被冻结的APP
5、Hook系统是否开启暂停执行已缓存变量获取,由于系统自带的暂停执行已缓存在收到广播后可能解冻再次活跃
电量和性能(MIUI):
1、Hook清理APP事件,将该方法置空解决锁屏或夜间杀后台
2、禁用millet,该功能与NoActive重复
冻结方式说明:
目前Linux进程冻结方式有Kill -19、Kill -20、Cgroup Freezer V1、Cgroup Freezer V2
Kill -19和Kill -20兼容性最好,但是存在Bug,进程还在依然重载
Google官方使用Cgroup Freezer V2
NoActive仅仅作用于系统框架,不是Root权限,权限不足
Kill使用Android的Process.send,该方法为安卓封装间接调用Kill,所以可能存在部分系统19有效或者20有效,需要自测
Cgroup Freezer V1和V2采用NoActive参考millet自行实现并封装,或V2调用安卓Process.setProcessFrozen实现
所以NoActive支持5种冻结方式分别为Kill -19、Kill -20、Cgroup Freezer V1(NoActive)、Cgroup Freezer V2(NoActive)、Cgroup Freezer V2(系统API)
由于对System权限不足导致无法读取配置判断Cgroup Freezer版本,故Hook获取系统是否支持暂停执行已缓存来判断V2、其余皆为V1,如果测试没有效果,或者冻结error报错,请选择Kill方式,配置方式参考下面的配置文件说明。
配置文件说明:
目录 /data/system/NoActive
即时生效配置:
blackSystemApp.conf 系统黑名单(系统APP默认白名单)
killProcess.conf 杀死进程名单(后台3S杀死进程)
whiteApp.conf 白名单APP(用户APP默认黑名单)
whiteProcess.conf 白名单进程(添加白名单APP无需添加)
重启生效配置:
debug 开启调试日志
disable.oom 禁用修改oom_adj功能
kill.19 使用Kill -19冻结
kill.20 使用kill -20冻结
freezer.v1 使用Cgroup Freezer V1(NoActive)冻结
freezer.v2 使用Cgroup Freezer V2(NoActive)冻结
freezer.api 使用Cgroup Freezer API(系统API)冻结
color.os ColorOS专属配置(特殊oom_adj方式)
日志说明:
日志级别分为debug(调试信息)、info(基本信息)、warn(警告信息)、error(错误信息)
更新日志
v1.0-Alpha
冻结后释放唤醒锁
v0.9.9
2022.8.10 00:10 更新
新增黑白名单标识
2022.8.10 08:30 更新
修复电量性能少Hook一处
v0.9.8
优化切换事件
去除修改oom_adj功能(导致Sanboxed进程被LMK杀后闪退)
v0.9.7
新增忽略前台选项
特别说明
软件信息
- 包名:cn.myflv.noactive
- MD5:FC9F4DF59F339D929D2421D1943842D8