## 1. Spec And API Validation - [x] 1.1 阅读现有 `SmsReceive` 实现,确认短信广播、收件箱兜底和诊断 UI 的当前状态 - [x] 1.2 查询 Android 15 前台服务、Doze/App Standby、`RECEIVE_SMS` hard restricted、小米后台自启动相关资料 - [x] 1.3 生成后台保活 OpenSpec proposal、design、tasks 和 capability specs - [x] 1.4 用 `npx openspec validate add-xiaomi-background-keepalive` 校验规格结构 - [ ] 1.5 后续提交或 push 前检查 diff,避免引入非预期 EOF newline 变化 ## 2. Manifest And Permission Plan - [x] 2.1 增加 `RECEIVE_BOOT_COMPLETED` 权限 - [x] 2.2 增加前台服务所需权限,按当前 targetSdk 兼容处理 - [ ] 2.3 如 targetSdk 升到 33+,补充 `POST_NOTIFICATIONS` 申请和诊断 - [x] 2.4 如使用直接请求电池优化白名单,增加 `REQUEST_IGNORE_BATTERY_OPTIMIZATIONS` - [x] 2.5 声明 `BootReceiver`,覆盖 `BOOT_COMPLETED`、`LOCKED_BOOT_COMPLETED`、`MY_PACKAGE_REPLACED` - [x] 2.6 声明 `SmsKeepAliveService`,避免声明 Android 15 从 boot 禁止启动的前台服务类型 ## 3. Keepalive Service - [x] 3.1 新增 `SmsKeepAliveService` - [x] 3.2 服务启动后立即创建通知渠道和低打扰常驻通知 - [x] 3.3 服务在规定时间内调用 `startForeground` - [x] 3.4 服务定期写入心跳状态,不执行耗时短信扫描 - [x] 3.5 服务停止或异常时写入明确诊断原因 - [x] 3.6 增加 UI 按钮开启/关闭常驻保活,并持久化用户选择 ## 4. Boot And Package Restore - [x] 4.1 新增 `BootReceiver` - [x] 4.2 收到开机或包替换广播时记录事件和时间 - [x] 4.3 如果用户已开启保活,尝试启动 `SmsKeepAliveService` - [x] 4.4 捕获前台服务启动限制异常并写入 `KeepAliveState` - [x] 4.5 在 UI 展示最近开机事件和服务恢复结果 ## 5. Xiaomi / HyperOS Setup Guide - [x] 5.1 增加标准应用详情页入口 - [x] 5.2 增加 Android 电池优化设置入口 - [x] 5.3 增加可选的直接请求忽略电池优化入口 - [x] 5.4 增加小米后台自启动设置入口,显式组件失败时 fallback - [x] 5.5 增加“我已开启自启动”人工确认状态 - [x] 5.6 增加“我已设置省电无限制”人工确认状态 - [x] 5.7 UI 明确说明人工确认项无法通过稳定公开 API 完全读取 ## 6. SMS Receiver Delivery Diagnostics - [x] 6.1 记录最近一次 `system_sms_broadcast` 到达时间 - [x] 6.2 记录最近一次 `sms_inbox_observer`、`sms_inbox_manual`、`sms_inbox_polling` 命中时间 - [x] 6.3 当收件箱兜底发现新验证码但广播未到达时,展示“疑似短信广播未投递” - [x] 6.4 在 UI 中列出 `onReceive` 不触发的排查清单 - [x] 6.5 增加 logcat 输出,区分权限缺失、body 为空、parser 失败、广播未到达 ## 7. Optional Native Experiment - [x] 7.1 第一轮 Java 保活方案真机验证前,不实现 native fork/daemon - [ ] 7.2 如用户仍要求尝试,新增 NDK heartbeat 实验开关 - [ ] 7.3 native heartbeat 只写本地诊断状态,不承担短信监听职责 - [ ] 7.4 文档记录 native 子进程被系统同组清理的限制 ## 8. Tests - [ ] 8.1 为 `KeepAliveStateStore` 增加状态读写测试 - [ ] 8.2 为 Boot action 处理逻辑增加单元测试 - [ ] 8.3 为设置 intent fallback 增加测试或可验证日志 - [x] 8.4 保持现有验证码解析测试通过 - [x] 8.5 不要求本轮编译;代码完成后再按用户要求通知 ## 9. Xiaomi 12S / HyperOS 3 Device Validation - [ ] 9.1 手动开启小米自启动 - [ ] 9.2 手动设置省电策略为无限制 - [ ] 9.3 开启常驻通知,后台 30 分钟后发送验证码短信 - [ ] 9.4 锁屏 30 分钟后发送验证码短信 - [ ] 9.5 重启手机,确认保活服务是否自动恢复 - [ ] 9.6 重启后未打开 app 直接发送第一条短信,记录广播是否到达 - [ ] 9.7 手动 force-stop 后发送短信,确认不承诺接收,并记录诊断表现 - [ ] 9.8 如 `onReceive` 不到但收件箱有短信,记录 HyperOS 设置、权限状态和 logcat ## 10. Delivery Criteria - [x] 10.1 OpenSpec validate 通过 - [x] 10.2 相关上下文逻辑分析通过 - [x] 10.3 相关测试通过 - [x] 10.4 代码实现完成后通知用户,不强制编译