countrysideboy

Results 27 comments of countrysideboy

目前已知问题: 1.好像压不住关联唤醒,压不住广播 2.使用冻结进程的方式,原脚本是用kill -19的方式,现在换成cgroup feeeze的方式,但从日志看,进程似乎仍会anr。 也许要写Xposed模块hook相关操作才能搞定上面的问题,但要处理后台自启,广播,wakelock,alarm,想想就麻烦,期待作者出暴力压制模式。目前thanox的权限管理够好用了,要是能压制后台,原生系统就更省电了。

看来研究得很深入啊。一开始我是直接冻结整个uid 而非pid,但是发现应用异常退出后,无论是否解冻,app都无法再打开,很奇怪,才转而冻结pid

至于kill -19的方式,可能比较通用,但会anr,我试过去hook相关函数但没有成功。 另外就算能冻结成功,唤醒锁,闹钟,广播需要解决,不然还是会被关联唤醒。

> 以下为使用kill方式冻结的脚本,做了一些禁用广播接收器方面的尝试 > > 情景模式脚本1 > > ```json > [ > { > "name": "ForceIdle: continue App", > "description": "切回前台,取消压制", > "priority": 1, > "condition": "frontPkgChanged == true && globalVarOf$pause.contains(to)",...

> OP_WAKE_LOCK应该是没用的 OP_RUN_ANY_IN_BACKGROUND比OP_RUN_IN_BACKGROUND限制多 下面的广播服务提供者阻止,不知道没有NoANR能不能正常了 初步测试了一下,不使用NoANR模块好像可以,thanox作者似乎有处理这个问题。

> 有看过/data/anr的日志吗 昨天我把文件清空了,要测久一点才能确认了

> 用Thanox的阻止广播还有服务和提供者,会导致比如美团支付使用支付宝,而支付宝以及被阻止了,就会显示找不到支付宝 是吧,我试了下闲鱼跳转淘宝授权登录,好像也不行

> 冻结APP之后,直接锁屏,触发息屏广播,过个几秒,看看/data/anr有没有日志,如果有就是广播阻止的不彻底,如果没有,广播就成功阻止了,然后还有服务的ANR,就是挂后台,挂久一点,如果没有出现,那就没啥问题了,提供者的ANR我没看过了,NoANR去掉广播之后,屏蔽NoANR就没有任何问题了,所以我就没继续研究了 测试了几下,暂时没发现有文件。

> 还有就是,感觉15s延迟是不是太久了,进入后台那一会是最活跃的,如果改成3s还能不能正常,会不会就触发ANR了 我试试。等待时间久些,是希望程序能进缓存。之前测试,短时间内发送make-uid-idle没有效果,要有那么一段时间后执行才有效

写了一版比较特殊的版本,不需要su.exe插件,不需要添加全局变量了(以前的脚本需要添加pause变量且加入app列表)。 开关应用是否墓碑的方式为:使用系统自带的电池设置,将目标app的“管理电池用量”设置为“受限”即可。 缺点是无法批量添加app,提供一种思路,权当系统鸡肋电量限制模式的增强版。 备注:需要安卓10以上。 情景模式脚本1 ```json [ { "name": "ForceIdle: continue App", "description": "切回前台,取消压制", "priority": 1, "condition": "frontPkgChanged == true", "actions": [ "if(thanos.getActivityManager().isBlockAllService(to)){thanos.getActivityManager().setBlockAllService(to,false)};", "if(thanos.getActivityManager().isBlockAllReceiver(to)){thanos.getActivityManager().setBlockAllReceiver(to,false)};", "if(thanos.getActivityManager().isBlockAllProvider(to)){thanos.getActivityManager().setBlockAllProvider(to,false)};", "if(context.getSystemService(context.APP_OPS_SERVICE).unsafeCheckOp(android.app.AppOpsManager.OPSTR_RUN_ANY_IN_BACKGROUND, thanos.getPkgManager().getUidForPkgName(to), to) == android.app.AppOpsManager.MODE_IGNORED){foreach(proc:context.getSystemService(context.ACTIVITY_SERVICE).getRunningAppProcesses()){if(proc.processName.contains(to)){android.os.Process.sendSignal(proc.pid,18);}};...