Files
cmroubao/docs/tasks/T-002.md
T

5.5 KiB
Raw Blame History

id, title, phase, deps, status, created, context_ref, work_branch, write_paths
id title phase deps status created context_ref work_branch write_paths
T-002 建立测试设备基线和就绪检查 0
T-001
DONE 2026-07-25 04fa4a0994 main
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 变化和无崩溃。

验收要点

  • 记录测试设备 Android 版本、拼多多版本和肉包 App 版本。
  • App 能明确显示拼多多是否安装及版本。
  • App 能区分肉包无障碍“未启用”“已启用未连接”“已连接”。
  • App 能显示无障碍观察到的当前前台包名。
  • 拼多多页面出现登录、验证码或风控文本时返回可区分的阻塞类型。
  • 页面文本不写入日志、任务文档或 Git。
  • 登录阻塞判定和开始条件有本地 JVM 测试。
  • 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 检查通过。