Page:
T-101
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
1
T-101
ila edited this page 2026-08-07 16:36:23 +08:00
Table of Contents
同步来源:
docs/tasks/T-101.md· commitafc651f75a3a
id: T-101 title: 固定任务跑通拼多多关键词搜索 phase: 1 deps:
- T-002
- T-003
status: DONE
created: 2026-07-25
context_ref:
1c1c158149work_branch: main write_paths: - android-buyer/app/build.gradle.kts
- 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/pinduoduo/**
- android-buyer/app/src/main/java/com/roubao/autopilot/ui/screens/SearchProbeScreen.kt
- android-buyer/app/src/main/java/com/roubao/autopilot/workflow/**
- android-buyer/app/src/test/java/com/roubao/autopilot/pinduoduo/**
- android-buyer/app/src/test/java/com/roubao/autopilot/workflow/WorkflowRunnerTest.kt
- docs/00-ai-start-here.md
- docs/02-requirements.md
- docs/03-tech-stack.md
- docs/04-architecture.md
- docs/05-coding-rules.md
- docs/current-state.md
- docs/tasks/T-101.md
- progress.md
问题 / 背景
Phase 0 已证明设备、无障碍、workflow 和任务输入可用,但尚未让肉包执行任何真实 拼多多动作。最高风险假设是:在拼多多 8.17.0 上,能否只依赖可访问性语义稳定打开 搜索、输入固定关键词并确认进入结果页,同时对异常页面安全停止。
关联需求与交互
- 功能:F-004 的关键词搜索部分、F-007 安全失败。
- 用户故事:US-004、US-006。
- 交互:Android“探针”页,用户显式点击开始和停止。
- 架构:
WorkflowRunner+PinduoduoSearchAutomation+ 无障碍 driver。
方案
- 使用固定脱敏关键词,不读取真实订单标题,也不调用 VLM。
- 把页面文本分类和搜索 workflow adapter 保持为纯 Kotlin 可测边界。
- 无障碍 driver 只对
com.xunmeng.pinduoduo操作,使用 resource ID、editable、 文本和 content description,不使用屏幕坐标。 - 步骤为打开 App、进入搜索、输入并提交、验证结果页;每步有 timeout 和最多一次 retry。
- 登录、验证码、风控、支付边界立即
BLOCKED;未知页面连续观察后安全停止。 - Android“探针”页展示当前步骤、终态和停止按钮;不执行商品点击或下单。
验收要点
- 用户显式点击后打开拼多多并提交固定关键词。
- 成功条件是识别到搜索结果页,不以“点击已发出”冒充成功。
- 全流程不用坐标,不进入商品详情、不提交订单、不支付。
- 登录、验证码、风控、未知页和支付边界产生可区分的
BLOCKED。 - 每步 timeout、retry 和用户停止由 T-003 runner 执行。
- 页面分类和 adapter 使用 Fake driver 有自动化测试。
- 拼多多 8.17.0 真机 smoke 通过并保存不含私有内容的证据。
lintDebug test assembleDebug通过。
边界
- 不从真实 Shopee 标题生成搜索词;固定词只验证页面自动化。
- 不浏览候选、不点击商品、不滚动结果列表。
- 不使用 Shizuku shell、ADB 坐标、OCR 或 VLM 作为降级。
- 不绕过登录、验证码、风控或平台提示。
执行记录
2026-07-25:任务开始
- 基于 T-004 提交
1c1c158开始。 - 测试基线为 OnePlus PKG110、Android 16/API 36、拼多多 8.17.0;肉包采购无障碍 已启用并连接。
2026-07-25:实现
- 增加纯 Kotlin 页面分类器和
PinduoduoSearchAutomation。页面节点必须同时可见、 启用并唯一匹配;结果页必须同时出现精确固定关键词、搜索头和至少 3 个排序控件。 - 增加 Android 无障碍 driver。打开搜索只点击语义节点或其可点击祖先,输入只使用
ACTION_SET_TEXT,并从新的根节点重新读取精确文本后才算成功;没有坐标或 shell 降级。 - workflow 固定执行打开 App、输入、提交和验证四步,沿用 T-003 的 timeout、有限 retry、停止和单实例约束。登录、验证码、风控、未知页面及订单/支付边界直接阻塞。
- 新增“拼多多搜索探针”默认工作页,显示固定词、当前步骤、终态和开始/停止操作。 Activity 恢复后延迟复检无障碍连接,避免系统服务晚连接造成按钮状态滞后。
- 修正 Debug fixture 资产与 lint model 的 Gradle 任务依赖,使完整验证不受增量任务 顺序影响。
2026-07-25:自动化验证
gradlew.bat lintDebug test assembleDebug --no-daemon成功。- App Debug/Release、task contract 和导入器共 12 份报告、62 次测试,0 failure、 0 error、0 skipped。
- 页面分类覆盖首页、输入页、精确结果页、隐藏/禁用伪节点以及登录、验证码、风控、 未知页和订单/支付边界;Fake driver 覆盖成功、瞬态 retry 和安全阻塞。
- 普通 Debug APK 中
assets/probe-fixtures/条目数为 0。
2026-07-25:真机 smoke
- 从肉包“开始搜索探针”按钮显式启动;App 使用固定脱敏词执行,未读取或显示私有 蝦皮样本。
- 拼多多 8.17.0 结果页采集到 174 个可访问节点:精确关键词存在、结果页搜索头存在、 4 个排序控件存在、搜索输入框为 0、订单/支付边界为 0。
ACTION_SET_TEXT后的新根节点精确回读通过,肉包最终显示SUCCEEDED且四步均 完成;logcat 未发现肉包崩溃或 ANR。- smoke XML/PNG 只保存在被忽略的
.local/t101-smoke/,未纳入 Git。重装后 ColorOS 出现一次系统无障碍“保持开启”确认,确认后服务正常绑定;产品代码没有绕过该权限。
后续
- T-102 从当前结果页浏览并采集最多 5 个候选;仍不得无界滚动、点击下单或支付。
- 从不属于已识别首页/输入页/当前固定词结果页的状态启动时,当前实现按
UNKNOWN_PAGE安全阻塞,不猜测返回路径。