blocker 中文文档 下载 App

PM 方式直接改组件状态 为什么效果立竿见影但组件会复活

PM 路线的原理:写 package_restrictions.xml

PackageManager(简称 PM)方式是 Bloker 两种控制器之一。它调用 Android 系统的 setComponentEnabledSetting() API,或者直接执行 pm disable 命令行,把组件的启用状态写入 /data/system/users/0/package_restrictions.xml 这个系统文件。

效果:立竿见影

PM 方式改完组件状态后,组件的启用/禁用状态立即生效,系统层面就知道这个组件被禁了,任何应用尝试启动它都会拿到一个"组件不可用"的结果。

在 Bloker 界面上,你点一下组件的开关,开关状态立刻切换(变灰或变绿),这就是 PM 方式的即时反馈。

问题:应用能把禁用的组件"复活"

这是 PM 方式固有的、无法在 Bloker 层面解决的缺陷。

原理是这样的:

  1. 应用尝试启动一个被 PM 禁用的组件
  2. Android 系统抛出一个异常(ActivityNotFoundException 等)
  3. 应用开发者在代码里捕获了这个异常
  4. 应用调用 setComponentEnabledSetting() 把自己的组件重新启用
  5. 下次你打开 Bloker 看,开关又被拨回去了

这不是 Bloker 的 bug,是 Android 系统的设计允许应用这样做——应用管理自己的组件状态是合法行为,PM 方式改变的只是系统层面的状态,但应用在自己的进程里仍然可以修改。

哪些应用会复活组件

怎么判断你的 PM 规则有没有生效

关掉组件后,不要立刻回去看 Bloker 的开关——等一会儿(比如打开应用跑一圈,或者过几个小时)再回去看。如果开关被自动打开了,说明这个应用有自恢复逻辑,你需要换 IFW 方式(见下一组)。

PM 方式的其他优点