
当初用Nexus的时候,用过root下的绿色守护+冰箱。毕竟2G内存+原生rom,根本经不起折腾。
几个月前也用过非root的黑域。当时黑域还是开源的,但是当时黑域的部分核心代码已经闭源了。不过还是顺着git节点找到了核心代码,简单研究了一下黑域的原理。
简单来说黑域就是通过监听系统Log来分析应用是否是用户意识形态上的被关闭(返回键退出应用),如果判断是,那么如果黑域监听到了试图再次非法启动的进程,它会立马Kill这个进程。
我记得当时用,效果还算不错,毕竟非root玩家也可以用,对于深度定制的系统是个福音。不过也会出现一些app偶尔失效的情况。root的话,效果绝对更好。
黑域倾入性低,不会像xposed那样去侵入你的系统(zygote),它仅仅是在使用的时候刷入一个shell脚本。这个brevent.sh脚本会在用户文件系统增加一个app_porcess32文件的软链接同时复制一个so库(libbrevent.so),这样黑域就拥有了读取系统Log,强制休眠,kill其他应用的权限,这也是为什么每次重启都需要重新通过adb刷这个脚本进去的原因,毕竟非root。在启动黑域之后,会启动一个IntentService来加载这个so库,这个so库会加载另一个so库(libread.so),用来监听以及回调Java层的事件回调函数。并且在用户空间通过app_porecess32的软链接fork了一个新进程(服务端),这个进程跑的純Java代码代码就是黑域的服务端,用来分析系统Log,以及一些客户端的配置响应。客户端与服务端进程通过Socket进行通信。其中最重要的就是分析系统事件,他一共只对六个事件感兴趣:
AM_FOCUSED_ACTIVITY, AM_NEW_INTENT, AM_PAUSE_ACTIVITY, AM_PROC_START, NOTIFICATION_CANCEL_ALL, POWER_SCREEN_STATE。
举个列子,如果收到AM_PROC_START事件,表示某个组件已经启动完毕。服务端立马通过Log中的componentName + uid去判断这个组件是否已经被标识为不可启动,如果是的话,会立马调用ams去kill掉。
黑域大概的原理就是这样。研究的比较浅,可能会有很多问题请指出。
冰箱这种app就比较狠了。。直接让你的手机认为被禁用的app处于未安装的状态,人间蒸发。。
其实现在一些第三方rom优化的也不错了。比如MIUI,几乎不存在太多保活进程,除了一些系统白名单的App...额,这都是厂商之间的py交易。
Ps:
有同学说xposed支持了7.0+,搜了一下,目前是有一个非官方版本的xposed for N
来来来,非官方版本的Android7.0/7.1系统Xposed框架已经发布!SDK24/25均已支持 - Xposed框架中文站
也有随之升级的原基于xposed的“阻止运行”插件——绿色运行
Xposed框架模块 - 绿色运行
这是黑域作者的访谈录:黑域少数派幕后原稿
今天看到Android8.0正式版发布了。看到Android原生rom对流氓后台服务越来越强硬,很激动!
后台执行限制 | Android Developers
