feat(android): add device readiness checks
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
| Android 构建链 | Gradle 8.2;AGP 8.2.0;Kotlin 1.9.20;JVM target 17 | 已验证 | 已补齐上游缺失的 `gradlew.bat`,不依赖全局 Gradle。 |
|
||||
| Android SDK | compileSdk/targetSdk 34;minSdk 26;SDK Build Tools 34.0.0 | 已验证 | 支持 Android 8.0+;本机使用 Command-line Tools 22.0。 |
|
||||
| Android UI | Jetpack Compose + Material 3;Compose Compiler 1.5.5 | 上游已核实 | Compose BOM 为 2023.10.01。 |
|
||||
| Android 自动化 | 项目目标以 `AccessibilityService` 为主,Shizuku 为兼容/增强路径 | 目标已定,待实现 | 上游 `main` 使用 Shizuku 13.1.5;无障碍实现位于独立开发分支,不能把它误认为主分支现状。 |
|
||||
| Android 自动化 | 项目目标以 `AccessibilityService` 为主,Shizuku 为兼容/增强路径 | 就绪观察基线已实现,动作待实现 | T-002 已实现只读前台/登录阻塞观察;搜索、点击和安全动作门禁由 T-101 开始实现。上游 `main` 仍保留 Shizuku 13.1.5。 |
|
||||
| 第一层任务源 | UTF-8 四行蝦皮订单文本 + 同订单号 JPEG | 首份样例已核实,待实现 | 使用 Debug/测试专用 `TaskSource`;原始数据和生成物不得提交。 |
|
||||
| Android 长任务 | 前台服务 + 持续通知 | 计划采用 | 降低执行中被系统挂起的风险,仍需处理进程死亡恢复。 |
|
||||
| 后端语言 | Go 1.23.0 | MVP 已定 | 与现有本机工具链一致;构建测试必须设置 `GOTOOLCHAIN=local` 防止静默升级。 |
|
||||
|
||||
+15
-9
@@ -5,22 +5,27 @@
|
||||
## 当前快照
|
||||
|
||||
- 日期:2026-07-25
|
||||
- 阶段:T-001 Android 可运行基线完成,准备执行 T-002 设备就绪基线
|
||||
- Git:已初始化,当前分支为 `main`,文档和初始化脚本纳入首个基线提交
|
||||
- 阶段:T-002 测试设备基线和就绪检查完成,准备执行 T-003
|
||||
- Git:当前分支为 `main`;T-001 和 T-002 均已纳入 Git 历史
|
||||
- 生产代码:`android-buyer/` 已接入 Roubao Android 源码
|
||||
- Android:固定 `main@c8a6d7f03422eb01744b01f3ee77bf7757741f7e`;MIT 许可证已保留
|
||||
- 后端:已决定使用 Go 1.23.0 + Gin 1.11.0;Go Blueprint v0.10.11 骨架尚未接入
|
||||
- 本机 Android 工具:JDK 17.0.13、Command-line Tools 22.0、SDK 34、
|
||||
Build Tools 34.0.0、Platform Tools/ADB 37.0.0;用户级 SDK 环境变量已设置
|
||||
- Android Studio:未安装;`winget` 静默安装卡住后已终止,不阻塞命令行构建
|
||||
- 测试:Gradle `test` 成功;上游没有 `test/androidTest` 测试源
|
||||
- 测试:`lintDebug test assembleDebug` 成功;T-002 新增 5 个纯 Kotlin 测试,
|
||||
Debug/Release 两个变体共执行 10 次且全部通过
|
||||
- 测试设备:OnePlus PKG110,Android 16/API 36;肉包 `1.4.2 (7)`;拼多多
|
||||
`8.17.0 (81700)`
|
||||
- 设备就绪:肉包采购无障碍已启用并连接;可观察前台包名;拼多多首页未发现登录、
|
||||
验证码或风控文案,但该结果不等于账号已确认登录
|
||||
- 版本控制内数据:只有 `deepseek总结.txt` 背景摘要和本套项目文档
|
||||
- 本地私有样本:仓库根目录存在一组未跟踪、已本地排除的同名蝦皮文本/JPEG;
|
||||
已核实 UTF-8 四行字段格式和图片可解码,真实内容未纳入 Git
|
||||
- 标准启动路径:`$env:RUN_START_COMMAND="1"; .\init.ps1`
|
||||
- 标准验证路径:`.\init.ps1`
|
||||
- 当前 blocker:T-002 尚未完成 Shizuku 服务/授权、目标无障碍服务和拼多多登录状态
|
||||
检查;蝦皮样本正式私有目录、更多图片类型和一单多 SKU 规则未确认;VLM 供应商和
|
||||
- 当前 blocker:拼多多账号是否满足后续搜索流程仍需在 T-101 用页面状态确认;
|
||||
蝦皮样本正式私有目录、更多图片类型和一单多 SKU 规则未确认;VLM 供应商和
|
||||
测试凭证未确认
|
||||
|
||||
## 当前目录
|
||||
@@ -30,6 +35,7 @@
|
||||
| `AGENTS.md` | 已有 | agent 权威入口 |
|
||||
| `docs/` | 已有 | Harness Coding 文档 |
|
||||
| `docs/tasks/T-001.md` | DONE | Android 可构建、可安装、可启动基线 |
|
||||
| `docs/tasks/T-002.md` | DONE | 设备版本、无障碍、前台和登录阻塞就绪检查 |
|
||||
| `deepseek总结.txt` | 已有 | 历史讨论摘要,不是正式需求权威 |
|
||||
| `android-buyer/` | 已有 | Roubao `main` 固定 commit 的 Android 基线 |
|
||||
| `backend-api/` | 待建 | Go-Gin、管理 Web 和数据目标目录 |
|
||||
@@ -37,9 +43,9 @@
|
||||
|
||||
## 任务摘要
|
||||
|
||||
- 已完成:T-001 初始化 Git 并接入 Roubao Android 基线。
|
||||
- 已完成:T-001 Android 基线;T-002 测试设备基线和就绪检查。
|
||||
- 正在进行:无。
|
||||
- 下一个可领取任务:T-002 建立测试设备基线和就绪检查。
|
||||
- 下一个可领取任务:T-003 建立 Android workflow 测试骨架。
|
||||
|
||||
## 当前可运行内容
|
||||
|
||||
@@ -50,8 +56,8 @@ $env:RUN_START_COMMAND = "1"
|
||||
.\init.ps1
|
||||
```
|
||||
|
||||
2026-07-25 已在 PKG110、Android 16/API 36 上用第二条命令完成 Debug APK 安装和
|
||||
冷启动;画面停在预期的 Shizuku 使用指南,进程存活且 logcat 无崩溃。
|
||||
2026-07-25 已在 PKG110、Android 16/API 36 上完成 Debug APK 更新安装和启动;
|
||||
首屏为设备就绪检查,肉包采购无障碍服务已绑定,进程存活且 logcat 无崩溃。
|
||||
|
||||
## 维护规则
|
||||
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
---
|
||||
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 检查通过。
|
||||
Reference in New Issue
Block a user