Skip to content

Releases: WayneShao/StatusBarForceClose

0.3.0

Choose a tag to compare

@github-actions github-actions released this 19 Aug 05:33

新增

  • 新增原生设置界面,可查看 SystemUI 连接、RootService、SystemUI 后端能力和最近一次成功执行的后端与耗时。
  • 新增自动、Root 优先、系统界面优先、仅 Root、仅系统界面五种执行模式。
  • 新增“后台保护”,由模块记录并可逆管理自己实际修改的 Doze 白名单和后台 AppOps。
  • 新增“隐藏桌面图标”。默认保持显示;隐藏后仍可从 LSPosed 模块设置入口打开,覆盖安装会保留当前选择。

执行与恢复

  • SystemUI 持续绑定带协议版本、进程 generation 和随机 session token 的 Bridge,拒绝旧会话及非 SystemUI 调用。
  • Bridge 使用 libsu 6.0.0 预连接 RootService,减少双击后的等待时间。
  • 在任务切换、亮屏和解锁事件中按 5 秒冷却恢复可恢复的 root 连接,不建立常驻重试循环。
  • SystemUI 启动时一次性判断自身强停能力;权限拒绝后对当前进程熔断,避免重复尝试无效路径。

兼容性

  • Xiaomi 17 Ultra for Leica:HyperOS 4、Android 17 / SDK 37。
  • OnePlus 13T (PKX110):ColorOS 16、Android 16 / SDK 36。
  • 继续使用 libxposed API 102,静态作用域只有 com.android.systemui
  • 不修改、重签、替换或重新打包任何厂商 APK,也不修改系统分区文件。

升级说明

  • 可以从正式签名的 0.2.0 直接覆盖安装。
  • 升级后请重启 SystemUI 或重启设备,使新的 Hook 代码载入。
  • 首次打开设置页时会请求一次 root 连接;KernelSU 可能仍需在管理器中手动授权。
  • Debug 构建保留结构化诊断;正式 Release 在编译期关闭诊断并由 R8 移除相关分支。

0.2.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 02:43

新增

  • 新增 OnePlus 13T (PKX110) / ColorOS 16 支持。模块在检测到已验证的 Oplus SystemUI 结构时,Hook PhoneStatusBarView.onFinishInflate() 并附加不消费触摸事件的监听器。
  • 保留 Xiaomi 17 Ultra for Leica / HyperOS 4 已验证的 dispatchTouchEvent Hook。两种入口共用同一套双击检测、前台任务解析、用户 ID 传递和动态 Toast。

强制停止后端

  • 将主执行路径统一为 libsu 6.0.0 RootService。SystemUI 只负责发送目标包名和真实 Android 用户 ID;模块进程启动 root 进程,由 root 进程取得 ActivityManager Binder 并调用 forceStopPackage(packageName, userId)
  • 模块桥接 Service 根据 Binder 调用 UID 查询包名,只接受 com.android.systemui,不向其他应用开放强制停止能力。
  • 保留 SystemUI Binder 作为 RootService 失败后的兼容回退,但跨厂商稳定使用需要设备已 root,并向本模块授予 root 权限。
  • 删除已证明在 ColorOS SystemUI 中不可用的直接 su 执行路径和 ContentProvider 实验路径。

实机验证

  • Xiaomi 17 Ultra for Leica (nezha / 25128PNA1C):HyperOS OS4.0.0.10.XPACNXM、Android 17 / SDK 37,选择 MIUI_DISPATCH,RootService root 进程记录为 uid=0,成功强制停止微信并显示“已强制关闭微信”。
  • OnePlus 13T (PKX110):ColorOS 16、PKX110_16.0.10.500(CN01)、Android 16 / SDK 36,选择 OPLUS_INFLATE_LISTENER,RootService 成功强制停止微信并显示同名 Toast。
  • 两台设备使用同一个 0.2.0 Debug APK 分别覆盖安装并重启 SystemUI;验证期间 lspdsystem_server 保持稳定。
  • 真实用户 ID 会原样传递到 root 后端。用户 999 等多用户输入已由单元测试覆盖,本次说明不把它描述为新增实机验证。

包装与安全边界

  • 最低系统版本由 SDK 37 调整为 SDK 36,targetSdk 保持 37,继续使用 libxposed API 102。
  • APK 仍然没有桌面图标、Activity、设置界面、Provider、Receiver 或 Android 权限;新增的唯一组件是 SystemUI 显式绑定的 ForceStopBridgeService
  • 未识别的 SystemUI 类结构会 fail closed,不安装模糊 Hook。
  • 不修改、重签、替换或重新打包任何厂商 APK,也不修改系统分区文件。
  • Debug 构建保留完整分层日志;正式 Release 关闭诊断并由 R8 移除相关分支。

升级说明

  • 可以从正式签名的 0.1.00.1.1 直接覆盖安装。
  • 首次使用 0.2.0 时,请向模块授予 root 权限。
  • 升级后需要重启 SystemUI 或重启设备,使新 Hook 与 RootService 桥接代码载入。
  • 从早期 Android Debug 证书 APK 切换到正式签名版本时,通常需要先卸载 Debug 版。

0.1.1

Choose a tag to compare

@github-actions github-actions released this 17 Aug 13:49

修复

  • 修复 HyperOS 双开应用被错误按主用户 0 处理的问题。模块现在从实际前台任务读取 Android userId,并将同一个用户 ID 传给 root 和 Binder 两条强制停止路径;小米双开用户 999 不再被改写成 0
  • 明确保证“系统设置”不受保护,并从保护名单移除模块自身。它们位于前台时,现在会和普通应用一样执行强制停止。

安全行为

  • 继续保护 Android 核心、系统界面、MiuiHome 和当前输入法,避免关闭手势宿主或关键交互进程。
  • 当前台任务没有可用的真实用户 ID 时停止本次操作,不回退到主用户,避免关闭错误用户空间中的同包应用。
  • Debug 构建会记录任务 ID、包名、任务类和解析出的用户 ID;Release 构建继续由 R8 移除诊断日志。

兼容性

  • 面向 HyperOS 4、Android 17 / SDK 37。
  • 使用 libxposed API 102,静态作用域仍只有 com.android.systemui
  • 不修改、重签、替换或重新打包任何小米 APK,也不修改系统分区文件。
  • 双开用户 0999、其他有效用户及异常输入路径已经过 JVM 单元测试覆盖;当前已验证环境表仍保留 0.1.0 的实机记录,不把单元测试描述为新增实机验证。

升级说明

  • 从正式签名的 0.1.0 可以直接覆盖安装。
  • 升级后需要重启 SystemUI 或重启设备,使新 Hook 代码载入。
  • 从早期 debug 签名 APK 切换到正式版本时,仍需先卸载 debug 版本。

0.1.0

Choose a tag to compare

@github-actions github-actions released this 17 Aug 09:37

主要功能

  • 双击状态栏后强制停止当前前台普通应用。
  • 优先尝试 su -c am force-stop;SystemUI 的 SELinux 域不能执行 su 时,自动回退到 ActivityManager Binder。
  • 成功后显示 已强制关闭<应用名>,应用名来自实际被停止应用,不写死具体软件。
  • 保持单一职责:没有桌面图标、Activity、设置界面、Service、Receiver 或 Provider,静态作用域仅包含 com.android.systemui
  • 不修改、重签、替换或重新打包任何小米 APK,也不修改系统分区文件。

项目缘起

我以前很依赖 CustoMIUIzer 的“双击状态栏关闭当前应用”功能。升级到 HyperOS 4 后,原功能因 SystemUI Hook 点变化而失效,因此单独实现了这个 API102 模块,避免与综合模块的其他功能和后续适配进度耦合。

实机验证

在 Xiaomi nezha(25128PNA1C)、HyperOS OS4.0.0.10.XPACNXM、Android 17(SDK 37)、LSPosed 2.1.1-it(libxposed API 102)上验证:

  • SystemUI Hook 正常安装,双击识别正常。
  • 前台应用名称和包名解析正常。
  • su 路径因 SystemUI SELinux 限制返回失败后,Binder 回退成功强制停止应用商店。
  • 动态 Toast 正确显示“已强制关闭应用商店”。
  • 操作过程中 SystemUI 没有崩溃或重启。
  • 16 个单元测试全部通过,Android lint 无问题。

以上结果只证明当前实机与系统构建;其他 HyperOS 4、Android 或 SystemUI 版本尚未宣称兼容。

安装

  1. 安装 StatusBarForceClose-0.1.0.apk
  2. 在支持 libxposed API 102 的 LSPosed 实现中启用模块。
  3. 保持作用域为“系统界面” (com.android.systemui)。
  4. 重启 SystemUI 或重启设备,使首次 Hook 生效。

早期测试使用 debug 证书;从 debug APK 切换到本次正式签名版本时需要先卸载旧包。后续正式版本将持续使用同一证书,可以直接覆盖升级。

兼容性与日志

  • 当前最低和目标 SDK 均为 37。
  • 当前 Hook 点依赖 HyperOS 4 SystemUI 的 PhoneStatusBarView 类层级;结构不匹配时会停止安装 Hook,不对未知实现做模糊尝试。
  • release 构建已在编译期关闭诊断,并由 R8 移除 debug 日志分支。
  • 需要排障时请使用对应提交的 debug Actions artifact,并提交完整的同一次 requestId 日志。