4.2 KiB
4.2 KiB
1. Spec And API Validation
- 1.1 阅读现有
SmsReceive实现,确认短信广播、收件箱兜底和诊断 UI 的当前状态 - 1.2 查询 Android 15 前台服务、Doze/App Standby、
RECEIVE_SMShard restricted、小米后台自启动相关资料 - 1.3 生成后台保活 OpenSpec proposal、design、tasks 和 capability specs
- 1.4 用
npx openspec validate add-xiaomi-background-keepalive校验规格结构 - 1.5 后续提交或 push 前检查 diff,避免引入非预期 EOF newline 变化
2. Manifest And Permission Plan
- 2.1 增加
RECEIVE_BOOT_COMPLETED权限 - 2.2 增加前台服务所需权限,按当前 targetSdk 兼容处理
- 2.3 如 targetSdk 升到 33+,补充
POST_NOTIFICATIONS申请和诊断 - 2.4 如使用直接请求电池优化白名单,增加
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS - 2.5 声明
BootReceiver,覆盖BOOT_COMPLETED、LOCKED_BOOT_COMPLETED、MY_PACKAGE_REPLACED - 2.6 声明
SmsKeepAliveService,避免声明 Android 15 从 boot 禁止启动的前台服务类型
3. Keepalive Service
- 3.1 新增
SmsKeepAliveService - 3.2 服务启动后立即创建通知渠道和低打扰常驻通知
- 3.3 服务在规定时间内调用
startForeground - 3.4 服务定期写入心跳状态,不执行耗时短信扫描
- 3.5 服务停止或异常时写入明确诊断原因
- 3.6 增加 UI 按钮开启/关闭常驻保活,并持久化用户选择
4. Boot And Package Restore
- 4.1 新增
BootReceiver - 4.2 收到开机或包替换广播时记录事件和时间
- 4.3 如果用户已开启保活,尝试启动
SmsKeepAliveService - 4.4 捕获前台服务启动限制异常并写入
KeepAliveState - 4.5 在 UI 展示最近开机事件和服务恢复结果
5. Xiaomi / HyperOS Setup Guide
- 5.1 增加标准应用详情页入口
- 5.2 增加 Android 电池优化设置入口
- 5.3 增加可选的直接请求忽略电池优化入口
- 5.4 增加小米后台自启动设置入口,显式组件失败时 fallback
- 5.5 增加“我已开启自启动”人工确认状态
- 5.6 增加“我已设置省电无限制”人工确认状态
- 5.7 UI 明确说明人工确认项无法通过稳定公开 API 完全读取
6. SMS Receiver Delivery Diagnostics
- 6.1 记录最近一次
system_sms_broadcast到达时间 - 6.2 记录最近一次
sms_inbox_observer、sms_inbox_manual、sms_inbox_polling命中时间 - 6.3 当收件箱兜底发现新验证码但广播未到达时,展示“疑似短信广播未投递”
- 6.4 在 UI 中列出
onReceive不触发的排查清单 - 6.5 增加 logcat 输出,区分权限缺失、body 为空、parser 失败、广播未到达
7. Optional Native Experiment
- 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 增加测试或可验证日志
- 8.4 保持现有验证码解析测试通过
- 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
- 10.1 OpenSpec validate 通过
- 10.2 相关上下文逻辑分析通过
- 10.3 相关测试通过
- 10.4 代码实现完成后通知用户,不强制编译