Repository navigation
Releases: Shmily0826/Appause
Release list
v0.5.48 Public Beta
Appause v0.5.48 is a free public beta for Android 8.0 and later.
Download Appause-v0.5.48.apk below and install it over your existing Appause installation. Do not uninstall first: uninstalling removes local groups and statistics.
What's changed
- Fixed the pause screen appearing again after Cancel sends you home or after you open a recommended app.
- A genuine quick reopen of the target app still starts a new pause. The fix distinguishes late window events from a new open and rechecks exits that happen during an asynchronous lookup.
- No new permissions, dependencies or data collection.
Installation details
- Package:
com.appause.android - Version:
0.5.48/ versionCode100 - Minimum Android: 8.0 (API 26)
- APK size: 12,293,758 bytes
- SHA-256:
b6117fd4fe5ee1d8b2d9d421bdb8573bd1a515a61ac12932acbdd31240eadded - Same signing certificate as v0.5.47; supports an in-place update.
Verification
- PASS: Debug and Release builds; 305 unit tests in each variant; lintDebug and lintRelease with 0 errors.
- PASS: the original Cancel bug was reproduced on a Xiaomi HyperOS phone running Android 16. With the fix, Cancel stayed on Home, a quick reopen was intercepted, and opening Shanbay did not bring the pause screen back. The final versioned APK was installed in place on that phone.
- PASS: Android 14 emulator upgrade, group creation, interception, Cancel, reopen and Home escape smoke checks.
- NOT TESTED this release: a fresh-install onboarding run, the full 3-minute leave cycle, temporary-pass expiry, and other physical devices/ROMs.
The Lanzou mirror is being updated. Until that is confirmed, use the GitHub APK attached below.
中文
修复了点击「取消」返回桌面、或跳转推荐应用后,暂停页又弹出一次的问题。主动重新打开目标应用时,仍会正常拦截。本次没有新增权限、依赖或数据收集。
下载下方 Appause-v0.5.48.apk,直接覆盖安装,不要先卸载,以免清除本机分组和统计。
蓝奏云正在同步新版,完成前请使用本页下方的 GitHub 安装包。小米 / HyperOS 首次打开推荐应用时,如系统询问关联启动权限,请选择「始终允许」。
v0.5.47 Public Beta
Appause v0.5.47 is a free public beta for Android 8.0 and later.
Download Appause-v0.5.47.apk below and install it over your existing Appause installation. Do not uninstall first: uninstalling removes local groups and statistics.
China mirror: Lanzou, password 1234. Both channels provide the same APK.
What's changed
- Fixed: after tapping a recommended app on the pause screen, the pause screen could briefly appear again over the app you picked. On some phones (seen on Xiaomi HyperOS) the app you left reports a late window change about a second after you leave it, and Appause treated that as a new open. Appause now ignores that app for 2 seconds after you jump away.
Installation details
- Package:
com.appause.android - Version:
0.5.47/ versionCode99 - Minimum Android: 8.0 (API 26)
- APK size: 12,293,758 bytes
- SHA-256:
fce5768b64052e6d8d860dbc97b170e9ff573314b3a8100f93272e450e7e3309
The APK uses the same signing certificate as v0.5.46. It was installed over v0.5.46 on one Xiaomi HyperOS phone running Android 16, where interception, Cancel, Continue and jumping to a recommended app were checked; this does not cover every device or long-running scenario.
On Xiaomi/HyperOS, the first time you tap a recommended app the system may ask whether Appause may open it. Choose Always allow.
中文
本次更新修复一个问题:在暂停页点推荐应用跳转后,暂停页有时会在你选的应用上再闪一次。部分手机(小米 HyperOS 上可复现)会在离开目标应用约 1 秒后补发一个窗口事件,Appause 之前把它当成了重新打开。现在跳转后 2 秒内会忽略这个应用的事件。
小米/HyperOS 上第一次点推荐应用时,系统可能会询问是否允许 Appause 打开该应用(关联启动),请选择「始终允许」。
国内可使用上方蓝奏云,密码 1234,下载 Appause-v0.5.47.apk。GitHub 与蓝奏云使用同一安装包。更新时直接覆盖安装,请勿先卸载,以免清除本机分组和统计。
v0.5.46 Public Beta
Appause v0.5.46 is a free public beta for Android 8.0 and later.
Download Appause-v0.5.46.apk below and install it over your existing Appause installation. Do not uninstall first: uninstalling removes local groups and statistics.
China mirror: Lanzou, password 1234. Both channels provide the same APK.
What's changed
- Added Show Temporary Pass in Settings → Pause behavior, enabled by default. Turn it off to hide the option after the cooldown.
- Fixed an app-picker crash caused by apps with multiple launcher entries.
- Recover from corrupted settings instead of repeatedly crashing at startup. Recovery resets settings and onboarding; groups and statistics remain in their separate database.
- Includes the notification, cooldown, Pro-state and accessibility reliability improvements described in the repository's release notes.
Installation details
- Package:
com.appause.android - Version:
0.5.46/ versionCode98 - Minimum Android: 8.0 (API 26)
- APK size: 12,293,758 bytes
- SHA-256:
ab455551b07503a9c3663e6f88759955251c42dd526888c0c874df53506fb927
The APK uses the same signing certificate as v0.5.45. Its core interception and in-place upgrade flows were checked on one Xiaomi HyperOS phone running Android 16; this does not cover every device or long-running scenario.
中文
本次更新新增「显示临时放行」开关,修复应用选择列表重复入口导致的崩溃,以及设置文件损坏造成的启动死循环。其他改进详见仓库发布说明。
国内可使用上方蓝奏云,密码 1234,下载 Appause-v0.5.46.apk。GitHub 与蓝奏云使用同一安装包。更新时直接覆盖安装,请勿先卸载,以免清除本机分组和统计。
Appause v0.5.45 Public Beta
English
Appause remains a free public beta. Core features are permanently free; there is no subscription or paid edition.
- Onboarding is shorter: choose a language, then review three access setup steps. Accessibility is required; Usage access is recommended to improve foreground detection; Overlay is an optional fallback.
- Open Pro status from Home or Settings. Free users may opt into one seven-day trial per device. The active trial page shows the remaining time and does not show lifetime-code entry.
- After the trial expires, you can request a free, manually issued lifetime code through Settings → Feedback, then apply it on the Pro page. Lifetime access shows status only. There is no automatic charge.
- Pro features remain staged experimental features; they are not required for Appause's core use.
The trial-to-lifetime ordering is enforced by the Android client. The Worker still accepts generic admin-issued lifetime codes that are not linked to a trial when called outside this client.
简体中文
Appause 仍处于免费公测阶段。核心功能永久免费,没有订阅或付费版本。
- 新手引导已精简为选择语言及三项权限设置说明:无障碍服务为必要项;建议开启使用情况访问以改善前台应用识别;悬浮窗权限仅作为可选备用方式。
- 可从主页或设置进入 Pro 状态页。免费状态下,你可以自愿开启本设备唯一一次 7 天试用;试用期间显示剩余时间,不显示永久码兑换入口。
- 试用到期后,可通过「设置 → 反馈」免费申请人工签发的永久激活码,再到 Pro 页面兑换。永久授权状态只显示状态信息,不会自动扣费。
- Pro 功能仍是分阶段开放的实验功能,不影响 Appause 核心功能的免费使用。
试用到期前后的顺序由 Android 客户端限制。若绕过客户端直接调用 Worker,Worker 仍接受未关联试用记录的通用管理员签发永久码。
Appause v0.5.44 Public Beta
Appause v0.5.44 is the first Public Beta release.
Highlights
- Focus groups and cooldowns for deliberate app openings.
- Temporary Pass, safe Home escape, and a bounded pause overlay.
- Appause Pro 7-day trial and optional activation-code unlock, started only by the user.
- Accessibility health reporting now reconciles live service evidence and remains fail-closed without it.
Setup
- Download
Appause-v0.5.44.apkand install it over an existing Appause install; do not uninstall if you want to keep local groups and settings. - Enable Appause in Android Accessibility settings.
- On Xiaomi/HyperOS, allow Autostart and set battery use to Unrestricted; locking Appause in Recents may also help background reliability.
- Usage Access is recommended for more accurate foreground checks. Display-over-other-apps is an optional fallback only when needed.
Known limitations
OEM background-management behavior varies. Xiaomi/HyperOS and similar ROMs may require the setup steps above for reliable background interception. This Public Beta includes bounded physical smoke coverage, not a claim of exhaustive device/OEM QA.
Privacy and feedback
Appause is local-first: no account, ads, analytics SDK, or cloud sync. See the privacy policy and install guide. Report issues through GitHub Issues.
APK SHA-256: B2073E9138EEDF0FD3E31343304C04CFD6DB0D5CC199FBF69E961F34D68FA369
Appause v0.5.43
本次更新 (v0.5.43) — Pro 试用重试兼容性修复
- 版本更新:版本为
0.5.43,Android versionCode 为95;公开 APK 使用Appause-v0.5.43.apk。 - 修复试用重试:试用已经成功开始后,Worker 重试会保留原始七天窗口但重新签发 token。Appause 现在接受这种合法重试,同时继续校验签名、设备绑定、Pro/trial、过期时间和完整七天窗口。
本次更新 (v0.5.43) — English summary
- Public APK:
Appause-v0.5.43.apk, packagecom.appause.android, versionCode95. - Fixed legitimate Pro trial retries: the Worker may preserve the original seven-day window while re-signing a retry token with a newer
iat. Appause accepts that contract while retaining signature, device-binding, Pro/trial, expiry, and exact seven-day-window validation.
Appause v0.5.42
本次更新 (v0.5.42) — 统计页闪退修复
- 版本更新:版本为
0.5.42,Android versionCode 为94;公开 APK 使用Appause-v0.5.42.apk。 - 修复统计页闪退:自 v0.5.39 起(8 月 28 日的内部改动引入),任何用户点开「统计」页面都会立即闪退。
原因是统计页的 ViewModel 增加了带默认值的测试注入参数后,系统默认工厂无法再通过反射创建它。
本次恢复了对默认工厂可见的构造函数,测试注入通道不受影响。已在真机上验证:统计页正常打开,
记录、图表与 Top Apps 全部正常渲染。 - 包含 v0.5.41 的全部修复:暂停屏窗口叠加(冷却 ≥ 31 秒时,目标应用自己切换页面即可触发重复拦截、
旧暂停屏无法关闭)等。
本次更新 (v0.5.42) — English summary
- Public APK:
Appause-v0.5.42.apk, packagecom.appause.android, versionCode94. - Fixed the stats-screen crash: since v0.5.39 (introduced by the August 28 internal change), opening the Statistics screen crashed
immediately on every device and both builds. Adding default-valued test-seam parameters to the ViewModel
constructor stopped the default factory from reflectively instantiating it. The default-factory-visible
constructor is restored while the test seams are unchanged. Verified on device: the stats screen opens
normally with records, charts, and Top Apps rendering correctly. - Also carries everything from v0.5.41: the pause-overlay stacking fix (with a cooldown of 31 seconds or
more, the target app switching one of its own pages was enough to trigger duplicate interception and an
unremovable pause window), and the other post-v0.5.40 changes.
🇨🇳 中文
Appause v0.5.41
Appause v0.5.41 — 发布说明 (Release Notes)
复制本文件内容粘贴到 GitHub Release 的 Description 即可。
下载链接:https://github.com/Shmily0826/Appause/releases/download/v0.5.41/Appause-v0.5.41.apk
Source note: this is the first release built from the current
main, so it
carries the changes made after the v0.5.40 tag (the one-tap seven-day trial
among them). The v0.5.40 notes are kept below as the historical record.
🇨🇳 中文
本次更新 (v0.5.41) — 暂停屏窗口叠加修复
- 版本更新:版本为
0.5.41,Android versionCode 为93;公开 APK 使用Appause-v0.5.41.apk。 - 修复重复拦截与暂停屏叠加:在暂停屏显示的看门狗(30 秒)早于倒计时结束时,拦截状态会被提前释放。
此后目标应用只要产生一次前台事件就会再次拦截,并叠加一个新的暂停屏,而先前的暂停屏无法再被关闭。
目标应用自己切换页面就足以触发,不需要用户做任何操作。现在只要主用的 2032 暂停窗口仍在屏幕上,
看门狗不会释放拦截状态。 - 30 秒硬上限仅保留给 2038 兜底窗口:该窗口可能被目标应用隐藏,需要上限兜底。因此 HyperOS 上
「窗口已挂载但不可见」的既有修复保持不变,没有被回退。 - 其余改动:一键七天试用、横屏暂停屏布局、系统 Home/返回/最近任务的导航处理、调试版激活覆盖
等自 v0.5.40 标签以来的改动,一并进入本版本。
本次更新 (v0.5.41) — English summary
- Public APK:
Appause-v0.5.41.apk, packagecom.appause.android, versionCode93. - Fixed duplicate interception and pause-screen stacking. With a cooldown longer than 30 seconds, the guard
watchdog released the interception guard while the countdown was still running; a single foreground event
from the target app then produced a second interception and attached a second pause window, leaving the
first window impossible to remove. The app switching one of its own pages is enough to trigger it, with no
user action required. The guard is now kept for as long as the primary 2032 pause window is attached. - The 30-second hard cap now applies only to the hideable 2038 fallback window, so the existing
"attached but hidden" fix for HyperOS is preserved rather than regressed. - Also included since the v0.5.40 tag: the one-tap seven-day trial, the adaptive landscape pause layout,
Home/Back/Recents navigation handling, and the debug-only activation override.
Appause v0.5.40
Appause v0.5.40 — 发布说明 (Release Notes)
复制本文件内容粘贴到 GitHub Release 的 Description 即可。
下载链接:https://github.com/Shmily0826/Appause/releases/download/v0.5.40/Appause-v0.5.40.apk
🇨🇳 中文
本次更新 (v0.5.40) — 导航逃生、临时通行与权限生命周期可靠性
- 版本更新:版本为
0.5.40,Android versionCode 为92;公开 APK 使用Appause-v0.5.40.apk。 - 阻断页安全:Cancel 可退出阻断页;系统 Home/Back/Recents 导航保持可用,Appause 不会困住或劫持用户,减少残留页面和错误重拦截。
- 临时通行与重拦截:Temporary Pass 按应用和有效期处理;取消后的快速重开与通行到期后的再次拦截保持独立、可恢复。
- 权限与生命周期:无障碍权限启用状态与服务连接状态分开显示,并在服务生命周期变化后提供明确的恢复路径。
本次更新 (v0.5.40) — English summary
- Public APK:
Appause-v0.5.40.apk, packagecom.appause.android, versionCode92. - Cancel exits the blocker; system Home, Back, and Recents navigation remains usable without Appause trapping or hijacking the user, reducing stale surfaces and incorrect re-interception.
- Temporary Pass expiry and post-Cancel quick reopen remain separate from ordinary bypass state so interception can recover reliably.
- Accessibility permission and service-connection lifecycle are reported separately, with an explicit recovery path when service health is not confirmed.
本次更新 (v0.5.39) — 发布隔离与拦截可靠性
- 发布包更新:版本为
0.5.39,Android versionCode 为91;公开 APK 使用Appause-v0.5.39.apk,不把内部 versionCode 放入文件名。 - 拦截可靠性:同步暂停页显示请求,并在启动器事件切换时增加短暂稳定窗口,减少离开目标应用后残留暂停页或错误重触发。
- Pro 生产安全:生产许可证继续使用设备绑定校验;公开 Release 不包含调试许可证工具或调试诊断资源。
- Release 隔离:Release 包不可调试;Diagnostics、调试诊断收集器、调试 FileProvider 及相关 Pro 测试控件仅存在于 Debug 包。
- 发布验证:完成 Android/Worker 自动化验证、Release 打包与签名检查,以及真实 Android 设备上的安装和运行状态冒烟验证。预发布 RC 曾验证暂停页、继续、取消和系统导航;发布 APK 的专项目标拦截复测仍留有人工缺口。
本次更新 (v0.5.39) — English summary
- Public APK:
Appause-v0.5.39.apk, packagecom.appause.android, versionCode91. - Synchronized pause-overlay show requests and added a short launcher-event settle window to improve abandonment cleanup and avoid incorrect re-triggering.
- Production Pro licenses remain device-bound and locally verified after activation.
- Diagnostics, debug collectors, debug FileProvider resources, and Pro debug controls are isolated from the non-debuggable Release APK.
- Automated, packaging, signing, and physical-device install/runtime smoke checks passed. A dedicated post-release interception run against an already-configured target app remains a manual gap; earlier RC evidence is recorded separately.
本次更新 (v0.5.38) — 先体验再授权 + 发布说明校正
- 首次引导改为价值优先:语言选择后先展示真实暂停页预览,再说明产品作用和隐私边界,之后才进入权限设置,减少第一次使用时连续授权带来的压力。
- 隐私说明提前:在请求无障碍服务前明确说明,Appause 只识别当前打开的应用,不读取屏幕内容、聊天记录或账号信息。
- 中文表达优化:引导页改用「等待时间」「提醒页面」等更自然的说法,英文内容同步更新。
- 界面无障碍与本地化修正:诊断页标题、返回和刷新说明改用资源文案;设置页图标补充可读说明。
- 安装与隐私文档校正:显示悬浮窗是可选兼容性备用权限,不再写成必需;更新时应直接覆盖安装,不能先卸载;用户主动发送反馈前会看到诊断内容,其中可能包含分组名和应用包名。
- 发布资料更新:README、安装指南、隐私政策、酷安材料、中英文截图和国内/海外收款路线说明与当前实现保持一致。
本次更新 (v0.5.37) — 无障碍覆盖层稳定拦截 + 反馈自带诊断
- 悬浮窗权限改为「可选」:暂停屏走无障碍覆盖层(TYPE_ACCESSIBILITY_OVERLAY,小红书无法藏掉),通常不需要「显示悬浮窗」权限。引导页与设置页已说明:若发现暂停页不显示、或拦截没有生效,再回来开启它重试。未开启时不再显示为红色告警。
- 反馈自动附带诊断状态:在「设置 → 反馈」提交问题(bug / 建议)时,会自动附带本机结构化诊断状态(无障碍服务是否在运行、总开关、电池豁免、悬浮窗权限、最近一次拦截判定、被控应用最近判定、阻断界面方式、分组数等)。通过邮件 / GitHub / Appause 发送都会带上,你收到反馈就能直接看到「为什么没拦住」,无需让用户手动开诊断页复制。说明卡已注明:不含任何应用使用记录或隐私内容。
- 文案优化:引导页去掉「分心应用」等不准确表述(改为「目标应用」),并整体润色更通顺;权限说明同步更新。
- 细节修复:新建/编辑分组页滑块内缩、冷却输入更紧凑、分组名为空时的错误提示时机更合理、Pro 锁定区合并为单个升级按钮;统计页「原因分析」进度条去掉误绘的悬浮端点。
- 调试工具(仅 Debug 版):诊断页新增「重新开启引导页」按钮(与开关 Pro 并列),方便反复测试引导流程。Debug 包(
com.appause.android.debug)才有,Release 包不含。
本次更新 (v0.5.29) — 新增「电池优化」警告 + 校正权限说明
- 首页新增醒目的「电池优化未关闭」红色警告:在 HyperOS / 小米上,若 Appause 的电源限制是「智能」(未豁免省电),系统会在后台杀掉无障碍服务、且不会自动重启——表现就是最经典的那句抱怨:「第一次打开被限制的应用不拦截,切回 Appause 才拦,再开才正常」。以前只有 debug 诊断页提了一句,普通用户根本看不到。现在只要没设成「无限制」,首页顶部就常驻这条红色警告,点一下直接跳到「电池优化」设置,把坑挡在前面。
- 校正权限说明(重要):之前首页把「显示悬浮窗」列为必开权限,这是错的。停顿屏用的是
TYPE_ACCESSIBILITY_OVERLAY(2032)覆盖层,小红书无法藏掉它,且不需要「显示悬浮窗」权限;反而授予它会让部分路径回退到 2038、被小红书藏掉。正确的权限要求见下方「必须开启的权限」。 - 诊断页(debug)也新增「电池优化(省电策略)」状态行,并写入诊断报告。
- 升到 v0.5.29 / 81。
✅ 必须开启的权限(首次使用请逐项确认)
- 无障碍服务(必须) — 系统「设置 → 无障碍 → Appause」打开开关。这是 Appause 检测前台 app 的唯一方式。
- 电池优化 = 无限制(必须) — 系统「设置 → 应用 → Appause → 电池 → 无限制」。不设这个,拦截会静默失效(服务被后台杀掉且不重启)。v0.5.29 首页会直接警告你。
- 使用情况访问(强烈建议) — 系统「设置 → 隐私 / 安全 → 使用情况访问 → Appause」。让前后台判定最准;不授权也能拦,但可能误判前台 app。
⚠️ 不需要「显示悬浮窗(悬浮窗 / 在其他应用上层显示)」:新版停顿屏用无障碍覆盖层(2032),小红书藏不掉它,且无需该权限。授予它反而可能让停顿屏走 2038 被小红书藏掉。额外建议(小米 / HyperOS):在「最近任务」把 Appause 卡片锁定,并在应用设置里允许自启动,服务更稳。
本次更新 (v0.5.28)(已被 v0.5.29 取代,但 2032 窗口类型修复保留)
- 彻底修好「第一次打开小红书不拦截 / 看不到停顿屏」:根因是悬浮窗窗口类型选错。反编译能用的 release(base.apk / v0.5.1)证明它用
TYPE_ACCESSIBILITY_OVERLAY(2032),而小红书的setHideOverlayWindows()会把TYPE_APPLICATION_OVERLAY(2038) 藏掉。v0.5.28 把 2032 设为唯一优先类型。该修复在 v0.5.29 中保留。
本次更新 (v0.5.27)(已被 v0.5.28 的根因修复取代)
- 曾把悬浮窗改回 2038 优先——但实测 2038 在 HyperOS/小红书 上被
setHideOverlayWindows藏掉,故 v0.5.28 改用 2032 优先。(0.5.27 仍贡献了守卫宽限 8s→1.5s + 30s 硬上限的修复,已保留。)
本次更新 (v0.5.26)(已被 v0.5.27 回退)
- 原方案:停顿屏改用真正前台 Activity(PauseActivity)。实测在 HyperOS 上小红书会重新前台盖住 Activity、且守卫卡死,故 v0.5.27 改回悬浮窗优先方案。
本次更新 (v0.5.25)
- 修好「第一次打开小红书不拦截」:v0.5.24 偶尔出现——首次打开 xhs 停顿屏不弹,切去 Appause 再切回来才拦,第三次起正常。根因是去重守卫(
lastForegroundPackage相等就静默跳过)记了过期的「当前前台 = xhs」:HyperOS 吞掉「离开 app」的窗口事件,且getForegroundPackage()对受控 app 不可信(后台的 xhs 也可能被报成前台),于是下次真开 xhs 时被当成「同 app 内切换」直接吞掉,没有日志、没有拦截。修法两条:(1) 去重守卫改为只在「上一条事件也是同一个 app」时才跳过——这能区分「真重开(离开过→上一条是别的应用)」和「app 内切页(feed→笔记)」;(2) 前台轮询器不再用getForegroundPackage()给受控 app 重新「确认前台」,避免它把后台的 xhs 误报成前台、污染去重状态。停顿屏现在每次真开都弹。升到 v0.5.25 / 77。
本次更新 (v0.5.24)
- 彻底修好「回到 Appause 才拦截 / xhs 和 bilibili 都不拦」:v0.5.23 的诊断直接证明——这台 HyperOS 上系统用量日志对这两个 app 根本不可信:开 xhs 时无障碍事件已经是
event=com.xingin.xhs,但getForegroundPackage()却返回com.appause.android.debug(Appause 自己!),wasResumedRecently(xhs)也是 false,于是确认逻辑把 xhs 判定为误报跳过;bilibili 只能靠wasResumedRecently在 600ms 复查那一刻拦到,但那时你已经回 Appause 了,停顿屏弹在了 Appause 里。根因就是「不可信的用量日志 + 600ms 延迟」。v0.5.24 直接信任无障碍事件:事件一到就立刻拦截(事件包名就是真前台),唯一的抑制只剩「最近任务重放」风暴守卫,且阈值从 2 个真实包提高到 3 个(BURST_MIN_DISTINCT=3)——真开一个 app 顶多 1 个、从另一个被控 app 直接切过来最多 2 个真实包,都碰不到 3,所以真启动永不误杀;而 HyperOS 的「重放」同一瞬间炸出一堆缓存任务(≥3 个真实 app),仍会被正确挡掉。停顿屏现在在 app 还显示在屏幕上时就盖上去,不再等你切回 Appause。升到 v0.5.24 / 76。 - 顺手把你之前要的「步骤 6.5 满诊断日志」保持下来:会打出
6.5 event=… burstSuppress=… burstReal=…,配合overlay added while fg=… type=…,一眼能看清拦没拦、为什么。
本次更新 (v0.5.23)
- 回退 v0.5.11–v0.5.22 的「数包数风暴守卫」——它是误杀真启动的元凶:你分组里 xhs 和 bilibili 都在,开 xhs 时无障碍事件簇里天然就有两个真实包,被守卫误判成「最近任务重放」直接 SKIP,所以两个 app 都不拦。对照 git 历史(tag v0.5.1 / commit 0c2504f,即你手机上能用的 release base.apk)确认:v0.5.1 根本没有这个守卫,拦截稳定。v0.5.23 把步骤 6.5 完整恢复成 v0.5.1 的用量日志确认逻辑(立即查,不一致则等 600ms 复查一次,仍不一致才算误报→跳过;未授权用量访问则直接放行)。
- 新增
wasResumedRecently兜底(只增不减拦截):HyperOS 用量日志的「当前最前」可能滞后于一次极短的打开,但 RESUMED 事件仍证明用户确实打开了 app。现在即便「当前最前」读错,只要最近 5s 内有被控 app 的 RESUMED 就照样拦截——通知/最近任务重放不会产生 RESUMED,不会被误拦。 - 步骤 6.5 加满诊断日志(你要求的):打出
6.5 #1 event=… usageLog=… burstSuppress=…与6.5 #2 usageLogRetry=… resumedRecently=…,方便直接看清楚「系统用量日志到底返回了什么、为什么拦/不拦」。风暴守卫现在只记录、不再门控。 - 升到 v0.5.23 / 75。
本次更新 (v0.5.22)
- 照你手机上能用的 release(base.apk, v0.5.1)逐字节对齐修复:反编译对比发现 base.apk 的代码和 debug 完全一样,差别在运行时权限——release 版没开「使用情况访问」,所以它的确认逻辑直接跳过、事件一到立刻拦截;而 debug 版开了「使用情况访问」,确认逻辑去读 HyperOS 的用量日志(已证实它根本不记录小红书的 RESUMED),结果要么误判、要么拖慢 200–600ms,停顿屏弹出来时已经错过时机。v0.5.22 彻底不用用量日志确认:事件簇沉降 60ms(只够识别最近任务重放)就立刻拦截,和 release 一样快。升到 v0.5.22 / 74。
- 停顿屏恢复悬浮窗优先(2038),与 base.apk 一致:之前的失败是拦截太晚,不是悬浮窗类型不对。现在拦截几乎即时,悬浮窗在小红书窗口还没站稳时就盖上。addView 失败再退 2032 → PauseActivity。
- 修复 AlarmManager SecurityException:Android 14+ 无 SCHEDULE_EXACT_ALARM 权限会抛异常,PauseActivity 兜底改用手头就有的 Handler 重拉(无需权限)。
- 真正修好「在 rednote/小红书 里看不到停顿屏、切回 Appause 才看到」:对照能成功的旧版 v0.4.7(诊断 2026-08-06 14:36)发现根因——旧版悬浮窗
addView抛BadTokenException→ 回退到 PauseActivity(一个 Activity),而 Activity 不受setHideOverlayWindows影响、小红书藏不了,所以停顿屏稳稳盖在小红书上面(实测停了 65s)。后来你授予了「显示悬浮窗」权限,TYPE_APPLICATION_OVERLAY的addView不再抛异常、直接成功,于是代码用悬浮窗、不再回退到 PauseActivity——但小红书会调Window.setHideOverlayWindows()把TYPE_APPLICATION_OVERLAY藏起来,悬浮窗加成功了却看不见。这就是"自从某版本后就不能正常拦截"的真相:不是拦截逻辑坏了,是悬浮窗成功反而绕过了能用的 PauseActivity。修复:① 优先用TYPE_ACCESSIBILITY_OVERLAY(无障碍叠层,setHideOverlayWindows对它无效,小红书藏不了);② 若它抛异常,直接回退 PauseActivity(不再试会被藏的TYPE_APPLICATION_OVERLAY),恢复 v0.4.7 那条被验证可用的路径。用 service 原始 context 取 WindowManager 以保住无障碍 token。另加诊断日志overlay added while fg=… type=…印证。升到 v0.5.20 / 72。 - 附带保留 v0.5.19 的时序改进(确认窗口从 600ms 缩到 ~200ms),让停顿屏在可见时也更跟手。
本次更新 (v0.5.19)
- 停顿屏现在"打开 app 的瞬间"就弹,不再要等 600ms、看起来像"切回 Appause 才拦":v0.5.18 虽然识别出了真启动,但仍沿用 v0.5.1 的 600ms 用量日志二次确认延迟——而窗口事件比用量日志早几百毫秒到达,于是判定要等 600ms 后才落。若你在这 600ms 内切回了 Appause(实测你确实常常这么做:16:20:14.125 开小红书,16:20:14.288 就回 Appause),停顿屏就弹在 Appause 里,而不是小红书里,看起来像"只在切回 Appause 后才拦"。v0.5.19 改为:事件簇形状本身就是结论——真启动的簇只有"被控 app 1 个真实包 + 启动器 + 系统组件",开 app 的瞬间就已定型。现在只等约 200ms(刚好让"最近任务重放"的第二个真实包露出面)就拦截,比 600ms 快近 3 倍,且仍然能正确拦掉重放、仍然不受你切回 Appause 的影响。升到 v0.5.19 / 71。
- 彻底修好「开了又立刻回 Appause 看诊断 → 不拦截」:v0.5.17 改成查"被控 app 最近有没有真正 RESUMED(被打开过)",但实测发现 HyperOS 上极短时间的打开(<~200ms)根本不会在用量日志里留下 RESUMED 记录——而你开小红书后往往不到 200ms 就跳回 Appause 抓报告,于是
wasResumedRecently返回 false,照样被跳过(诊断实测:09:05:24.657 开小红书,09:05:24.814 就回 Appause,仅隔 157ms)。v0.5.18 改用三个互相独立的信号任一成立即拦截:① 600ms 后用量日志仍显示被控 app 在最前;② 用量日志里查到被控 app 的 RESUMED;③ 无障碍事件簇本身是"真启动"形状(被控 app + 启动器 + 系统组件 = 只有 1 个真实 app),而不是"最近任务重放"形状(同一瞬间炸出 2+ 个真实 app)。第 ③ 个信号读的是无障碍事件簇、不依赖用量日志,所以"开了就拦,回去早也不影响"这次真正成立。通知和最近任务重放仍会被 ③ 正确识别并忽略。 - 风暴守卫恢复参与判定,但不再单独门控:旧版"数包数"风暴守卫(isBurstSuppressed)重新接回,但只作为上面 ③ 这一路信号,且是「三选一」的其中一项——它能帮忙拦掉明确的"最近任务重放",却再也无法单独把一次真启动误杀(这是 v0.5.11–14 反复踩坑的根因)。同时把 Appause 自己的包排除在"真实 app"计数外,避免从 Appause 里点开被控 app 被误判为重放。
- 暂停屏文案保持单行"给自己几秒,再决定是否继续。"不变。升到 v0.5.18 / 70。
本次更新 (v0.5.17)
- 拦截现在"开了就拦",不再被你自己回 Appause 看诊断的操作误杀:之前步骤 6.5 在 600ms 宽限后复查"当前前台是不是被控 app",而你的测试习惯是开小红书后立刻跳回 Appause 抓报告——此时系统前台已变成 Appause,于是被判定"不是真前台"而跳过(诊断里显示
SKIP: not actually foreground (real=com.appause.android.debug))。现改为复查"被控 app 在最近窗口里有没有真正 RESUMED(被打开过)",只要真打开过就拦,回去早也不影响。通知、最近任务重放仍不会产生被控 app 的...
Appause v0.5.39
中文
- 提升暂停拦截在启动器事件与悬浮层显示请求时序下的稳定性,改善部分 OEM 场景。
- 将 Diagnostics 与 Pro 调试工具严格隔离到 Debug 构建;Release 不包含诊断页面、Provider 或调试资源。
- 强化 Pro 许可证的设备绑定与生产校验,保持生产环境 fail-closed。
- 优化引导、主页与统计流程,并更新 v0.5.39 Release packaging。
自动化验证:Debug 单元测试、Release lint、Debug/Release APK 构建和 Release AAB 构建均通过。
APK SHA-256:CC05A6B742018D907D71D1BD3F07B3044ACCD6AD4AB582F900EA55E1A1248A3F
English
- Improved pause interception stability around launcher events and overlay show-request timing, including selected OEM scenarios.
- Isolated Diagnostics and Pro debug tools to Debug builds; Release no longer contains the diagnostics screen, provider, or debug resources.
- Strengthened device binding and production verification for Pro licenses while keeping production checks fail-closed.
- Refined onboarding, Home, and Stats flows and updated v0.5.39 release packaging.
Automated validation: Debug unit tests, Release lint, Debug/Release APK builds, and the Release AAB build all passed.
APK SHA-256: CC05A6B742018D907D71D1BD3F07B3044ACCD6AD4AB582F900EA55E1A1248A3F