52 lines
5.2 KiB
Markdown
52 lines
5.2 KiB
Markdown
# Android Agent
|
||
|
||
一期 Android 执行端,包名为 `cn.ilapage.goauto.agent`。
|
||
|
||
当前已经实现:
|
||
|
||
- 首次安装生成并持久化随机 UUID `installId`,不读取硬件唯一标识。
|
||
- 自动注册和已认证的版本信息更新,无注册码输入页。
|
||
- Android Keystore AES-GCM 加密保存 Device Token,界面和日志不显示明文。
|
||
- 前台服务、15 秒心跳、网络恢复触发重连。
|
||
- Agent 0.3.1 的状态、采集、采购、设置四 Tab 外壳;默认进入状态页。
|
||
- 状态页区分无障碍未开启、系统已开启但服务未绑定、已绑定就绪三态。
|
||
- 设置页可测试服务器连接、保存服务器地址和设备名称并重新连接;任务执行中禁止修改。
|
||
- 设置页只显示 Device Token 是否配置,不显示 Token 明文;采集和采购 Tab 在 #90 接入当前设备任务历史。
|
||
- 清除 App 数据后按新的安装实例注册;Token 无效时明确报错,不降级为无认证注册。
|
||
|
||
服务端地址可在设置页保存,也可在构建时通过 `GOAUTO_SERVER_URL` 环境变量或同名 Gradle 属性写入默认值。Release 版本只接受 HTTPS;只有 Debug 构建的独立清单允许 HTTP,便于局域网真机联调。设置页的“测试连接”只访问 `/api/v1/health`,不会注册设备或创建任务;“保存并重新连接”沿用当前 installId 和 Device Token。
|
||
|
||
设备执行任务时,状态页显示当前任务,设置页会禁用服务器地址、设备名称、测试和保存操作。返回系统无障碍设置后,状态页和设置页会自动刷新真实就绪状态。
|
||
|
||
任务结果成功提交(采购结果也可以先安全写入本地 Outbox)后,Agent 进入 15 秒自动返回窗口。它沿用现有任务轮询依次确认采购、采集队列都为空,并确认用户没有离开本次自动化打开的 PDD/浏览器页面,才返回 Agent 状态页。新任务、网络异常、待恢复的不可逆采购边界或前台应用变化都会取消自动返回。
|
||
|
||
采集结果被服务端安全接收后还会按设置页的“采集任务执行间隔”等待下一次采集;起止值均为 0~600 秒整数,默认 `15~15`,每次在闭区间内随机一次。采购仍可优先执行,手动检查和重新采集不能绕过;本次抽中的秒数、开始时间和截止时间会一起持久化,重启或修改设置不会重新随机。该间隔与自动返回窗口相互独立。任务执行、自动返回窗口和采集间隔期间有界保持亮屏,结束后释放;不会自动解锁 PIN、图案或密码。
|
||
|
||
## T05 真机验证记录
|
||
|
||
- 一加 PKG110 / Android 16:首次注册、15 秒心跳、前台通知和在线空闲状态已验证。
|
||
- 杀死进程后重新打开:installId 和 deviceId 保持不变,设备表仍只有一条记录,心跳恢复。
|
||
- PDD 8.17.0 版本信息已随注册提交。
|
||
- ColorOS 首次 ADB 安装需要在“安装增强防护”页执行“更多 → 开始深度扫描 → 继续安装”。
|
||
- 当前 MVP 只完成并维护一加/ColorOS 真机兼容,不包含华为 ROM。
|
||
|
||
## T23~T24 v2 真机验证
|
||
|
||
- 一加 PKG110 / Android 16 已验证 v2 能力上报、正式任务领取、浏览器到 PDD `NewPageActivity`、规格面板打开、颜色文字点击和逐颜色稳定价格。
|
||
- 图片型颜色卡片只点击文字节点,不点击整卡或“打开大图/查看大图”。
|
||
- 规格值会排除“#一次选多款#”等面板功能入口,避免把操作按钮伪装成尺码和 SKU。
|
||
- 商品 `719834019024` 已采到 4 个颜色、4 个 2690 分颜色价格和 4 个结构化 SKU,缺少尺码、店铺和评价时正确提交 `completed_partial`。
|
||
- 商品 `236231603269` 已验证规格面板归顶、锚定横纵容器、逐行蛇形颜色遍历和尺码续页:14 个颜色、14 个颜色价格、8 个尺码和 112 个完整可用 SKU,任务最终为 `completed`。
|
||
- 滚动优先使用目标容器的无障碍 `ACTION_SCROLL_FORWARD/BACKWARD`;回退坐标手势时等待系统完成回调后才读取新树,避免把未结束手势误判成列表边缘。
|
||
- 商品标题回退只接受与销量节点空间关联的文本,不再把页面中任意最长文本当成标题。
|
||
- 规格入口只接受带明确选择语义的规格摘要,或屏幕底部真实“购买/拼单”文字按钮;评价、评论、晒单和问答区域及其父容器不能成为入口。
|
||
- 商品评价页与商品详情页共用 `NewPageActivity` 时,Agent 通过顶部评价标题和评价内容识别误触,安全返回后最多重新定位一次。点击无页面变化、重复误入评价页和面板结构无法确认使用不同错误码;日志只记录入口语义、控件类型、坐标和动作结果,不保存控件树或截图。
|
||
- 逐颜色价格必须先取得目标选中、已选摘要或规格面板变化证据,再等待价格刷新并连续稳定读取;其他颜色残留的选中标记不会阻塞新价格,相同价格仍允许保存。动作无效果时不会沿用旧价格,结构化日志区分未确认选择、未找到价格和价格不稳定。
|
||
|
||
```powershell
|
||
.\gradlew.bat test
|
||
.\gradlew.bat assembleDebug
|
||
```
|
||
|
||
APK 输出:`app/build/outputs/apk/debug/app-debug.apk`。AccessibilityService、任务领取和 PDD 页面执行由后续工单实现。
|