diff --git a/T-002.-.md b/T-002.-.md new file mode 100644 index 0000000..13ea6f9 --- /dev/null +++ b/T-002.-.md @@ -0,0 +1,112 @@ + +> 同步来源:[`docs/tasks/T-002.md`](/chengma/mroubao/src/commit/afc651f75a3abc2676bb13aa8a80f6aa6a25a72e/docs/tasks/T-002.md) · commit `afc651f75a3a` + +--- +id: T-002 +title: 建立测试设备基线和就绪检查 +phase: 0 +deps: + - T-001 +status: DONE +created: 2026-07-25 +context_ref: 04fa4a099465a74d68a6aae6c23df0c556d9e7cf +work_branch: main +write_paths: + - android-buyer/app/build.gradle.kts + - android-buyer/app/src/main/AndroidManifest.xml + - android-buyer/app/src/main/java/com/roubao/autopilot/MainActivity.kt + - android-buyer/app/src/main/java/com/roubao/autopilot/accessibility/** + - android-buyer/app/src/main/java/com/roubao/autopilot/readiness/** + - android-buyer/app/src/main/java/com/roubao/autopilot/ui/screens/DeviceReadinessScreen.kt + - android-buyer/app/src/main/java/com/roubao/autopilot/utils/CrashHandler.kt + - android-buyer/app/src/main/res/values/strings.xml + - android-buyer/app/src/main/res/values-en/strings.xml + - android-buyer/app/src/main/res/values/themes.xml + - android-buyer/app/src/main/res/values-v27/themes.xml + - android-buyer/app/src/main/res/xml/buyer_accessibility_service.xml + - android-buyer/app/src/test/** + - docs/current-state.md + - docs/03-tech-stack.md + - docs/tasks/T-002.md + - progress.md +--- + +## 问题 / 背景 + +T-001 证明 Android 工程能够构建和启动,但 App 仍只判断 Shizuku,无法回答采购流程 +开始前最重要的几个问题:拼多多是否安装、肉包无障碍是否启用、当前前台 App 是什么, +以及拼多多页面是否出现登录、验证码或风控阻塞。没有统一快照时,后续搜索探针只能在 +未知设备状态下失败。 + +## 关联需求与交互 + +- 功能:F-003 采购 App 与设备就绪检查。 +- 用户故事:US-003 安全领取下一条任务、US-006 安全失败和可恢复。 +- 交互:Android“设备”页。 +- 架构:Android 自动化适配器与本地诊断层。 + +## 方案 + +1. 建立不依赖 Android 框架的就绪模型和登录阻塞分类器。 +2. 增加最小 `AccessibilityService`,只读取拼多多页面文本,不记录原文,也不执行 + 点击;限制节点遍历数量。 +3. Android 状态采集器读取系统/App/拼多多版本、无障碍启用和连接状态、最近前台 + 包名及最近一次拼多多阻塞分类。 +4. 新增“设备”页作为 App 首屏,提供刷新、打开无障碍设置和打开拼多多入口。 +5. 使用本地 JVM 测试覆盖阻塞优先级和就绪原因,使用真实设备验证安装、启用、前台 + App 变化和无崩溃。 + +## 验收要点 + +- [x] 记录测试设备 Android 版本、拼多多版本和肉包 App 版本。 +- [x] App 能明确显示拼多多是否安装及版本。 +- [x] App 能区分肉包无障碍“未启用”“已启用未连接”“已连接”。 +- [x] App 能显示无障碍观察到的当前前台包名。 +- [x] 拼多多页面出现登录、验证码或风控文本时返回可区分的阻塞类型。 +- [x] 页面文本不写入日志、任务文档或 Git。 +- [x] 登录阻塞判定和开始条件有本地 JVM 测试。 +- [x] Debug APK 构建、测试和真实设备 smoke 通过。 + +## 边界 + +- 不执行拼多多搜索、点击、滑动或候选采集。 +- 不尝试绕过登录、验证码或风控。 +- 不把“没有发现登录文案”等同于账号一定已登录。 +- 不移除现有 Shizuku 路径;本任务只建立采购主路径所需的无障碍基线。 + +## 执行记录 + +### 2026-07-25:任务开始 + +- 基于 T-001 提交 `04fa4a0` 开始。 +- 已知测试设备为 OnePlus PKG110、Android 16/API 36;拼多多已安装,无障碍服务 + 尚未实现。 + +### 2026-07-25:实现和验证完成 + +- 新增 `BuyerAccessibilityService`。服务只遍历拼多多可访问节点,单次最多 300 个, + 仅保存 `NONE`、`LOGIN_REQUIRED`、`VERIFICATION_REQUIRED`、`RISK_CONTROL` + 分类和观察时间;页面原文不写入日志或持久化。 +- 新增纯 Kotlin 就绪模型和分类器,以及 Android 状态采集器;开始条件要求拼多多 + 已安装、肉包无障碍已启用并连接,且没有已识别的登录/验证码/风控阻塞。 +- 新增“设备”首屏,展示设备、肉包、拼多多、无障碍、当前前台 App 和登录阻塞, + 提供刷新、无障碍设置和打开拼多多入口。查看检查页时前台必然是肉包,因此前台 + 包名只作为事实展示,不作为设备基线阻塞。 +- 停止 App 启动时自动弹出 Shizuku 授权;Shizuku 仍保留为兼容路径,只在用户进入 + 原有功能并主动刷新时申请。 +- 修复导入基线的两个 minSdk lint 错误:API 26/27 安全读取版本号,并把 API 27 + 导航栏主题属性放入限定资源。 +- 真机基线:OnePlus PKG110,Android 16/API 36;肉包 `1.4.2 (7)`;拼多多 + `8.17.0 (81700)`。 +- 真机先验证“未启用”阻塞,再在保留 Microsoft 投屏无障碍服务的情况下启用肉包 + 服务;系统显示服务已绑定且无崩溃。强制停止时观察到“已启用未连接”,重新切换 + 服务后恢复“已启用并连接”。 +- 打开拼多多后系统前台为 `com.xunmeng.pinduoduo/.ui.activity.HomeActivity`, + 观察器返回 `NONE`;返回肉包后界面显示 + `未发现阻塞(不代表已登录)`,没有把该结果当作登录确认。 +- `.\gradlew.bat lintDebug test assembleDebug --no-daemon`:成功。 +- 本地 JVM 测试按 Debug/Release 两个变体执行共 10 次,0 failure、0 error、 + 0 skipped。 +- 最新 Debug APK 大小为 10,402,303 字节,SHA-256 为 + `464382CE98604FF0E81F592307660C399D018A14106639B3D25E246949CF225B`; + 更新安装、Activity 启动、服务重连和 logcat crash 检查通过。