docs: import wiki at afc651f75a3a

ila
2026-08-07 16:36:22 +08:00
parent 553464dae2
commit 85d6066e36
+112
@@ -0,0 +1,112 @@
<!-- docs-wiki-sync:docs/tasks/T-002.md@afc651f75a3abc2676bb13aa8a80f6aa6a25a72e -->
> 同步来源:[`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 检查通过。