feat(android): establish Roubao build baseline
This commit is contained in:
@@ -44,14 +44,14 @@
|
||||
2. 读取 `agent-context.json`、`current-state.md` 和当前任务文件。
|
||||
3. 仓库已启用 Git 时查看最近五条提交;当前未启用时,以 `current-state.md` 为准。
|
||||
4. 运行 `./init.ps1`(Windows)或 `./init.sh`(WSL/Linux)。
|
||||
5. 如果脚本因 `T-001` 尚未完成而主动失败,只能领取 `T-001`;不要宣称基线可运行。
|
||||
5. 如果脚本失败,先记录并修复基线;不要在失败状态领取依赖它的后续任务。
|
||||
6. 有真实基线后先跑 smoke;基线失败时先修基线。
|
||||
7. 领取编号最小、依赖已完成的一个 `TODO` 任务并改成 `DOING`。
|
||||
8. 完成实现、验证、任务执行记录和当前状态同步后再结束。
|
||||
|
||||
## 当前阶段与优先路径
|
||||
|
||||
当前处于“文档基线完成、最高风险验证尚未开始”阶段。
|
||||
当前处于“Android 可运行基线完成、设备和 workflow 验证准备”阶段。
|
||||
|
||||
严格按以下顺序推进:
|
||||
|
||||
@@ -88,6 +88,18 @@ Roubao、拼多多页面、Android 包名、上游分支和依赖版本必须从
|
||||
|
||||
## 当前验证命令
|
||||
|
||||
当前没有生产代码,`init.ps1` 和 `init.sh` 会主动报错。`T-001` 完成后必须用真实
|
||||
命令替换本文,例如 Android 至少应有可复现的 Gradle 构建命令;后端建立后再追加
|
||||
后端测试和启动命令。
|
||||
Windows 默认验证:
|
||||
|
||||
```powershell
|
||||
.\init.ps1
|
||||
```
|
||||
|
||||
连接并授权真机后执行安装和冷启动:
|
||||
|
||||
```powershell
|
||||
$env:RUN_START_COMMAND = "1"
|
||||
.\init.ps1
|
||||
```
|
||||
|
||||
脚本执行 `test assembleDebug`;上游当前没有单元测试源,因此 `test` 的测试任务为
|
||||
`NO-SOURCE`,但编译与 APK 打包必须成功。后端建立后再追加后端测试和启动命令。
|
||||
|
||||
+20
-21
@@ -6,10 +6,10 @@
|
||||
|
||||
| 维度 | 选型 | 状态 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| Android 基础 | Roubao `main` 的 Kotlin 原生 Android 代码,应用版本 1.4.2 | 上游已核实,待接入 | 上游为 `Turbo1123/roubao`,MIT;接入时固定具体 commit。 |
|
||||
| Android IDE/JDK | Android Studio Hedgehog 2023.1.1 或更高;JDK 17 | 上游已核实 | 首次导入不接受 IDE 自动升级 AGP、Gradle 或 Kotlin。 |
|
||||
| Android 构建链 | Gradle 8.2;AGP 8.2.0;Kotlin 1.9.20;JVM target 17 | 上游已核实 | 使用仓库内 Gradle Wrapper,不依赖全局 Gradle。 |
|
||||
| Android SDK | compileSdk/targetSdk 34;minSdk 26;SDK Build Tools 34.0.0 | 上游已核实 | 支持 Android 8.0+;真机自动化优先 Android 11+。 |
|
||||
| Android 基础 | Roubao `main` 的 Kotlin 原生 Android 代码,应用版本 1.4.2 | 已接入并构建 | 固定 `main@c8a6d7f...`,来源与调整见 `android-buyer/UPSTREAM.md`。 |
|
||||
| Android IDE/JDK | Android Studio Hedgehog 2023.1.1 或更高;JDK 17 | JDK/CLI 已验证,IDE 可选安装 | 命令行构建不依赖 Android Studio;首次用 IDE 导入时不接受自动升级。 |
|
||||
| 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;无障碍实现位于独立开发分支,不能把它误认为主分支现状。 |
|
||||
| 第一层任务源 | UTF-8 四行蝦皮订单文本 + 同订单号 JPEG | 首份样例已核实,待实现 | 使用 Debug/测试专用 `TaskSource`;原始数据和生成物不得提交。 |
|
||||
@@ -27,7 +27,7 @@
|
||||
| VLM 接入 | 应用内统一适配器,优先兼容 OpenAI 风格多模态接口 | 接口已定,供应商待定 | 模型输出必须符合本项目 JSON Schema。 |
|
||||
| 通知 | MVP 不使用推送 | 已定 | 点击“获取任务”调用原子 claim API;V2 再评估厂商推送/WebSocket。 |
|
||||
| 后端测试 | 标准库 `testing` + `httptest` | MVP 已定 | 覆盖状态机、权限、幂等、SQLite 事务和输入校验。 |
|
||||
| Android 测试 | JUnit + 现有上游测试工具;真实设备 smoke | 待源码核实 | UI 自动化核心必须在目标设备验证。 |
|
||||
| Android 测试 | Gradle `test` + 真实设备 smoke | 基线已验证 | 上游没有 `test/androidTest` 源;T-003 建立 workflow 测试。 |
|
||||
| 部署 | 单机局域网 Go 服务;容器化后置 | MVP 已定 | Android 测试机必须能通过 HTTPS 或受控测试网络访问。 |
|
||||
|
||||
## Roubao 上游版本基线
|
||||
@@ -51,15 +51,13 @@
|
||||
| 自动化依赖 | Shizuku API/Provider 13.1.5 |
|
||||
| 无障碍开发分支 | `roubao2.0+AccessibilityService`,核实时 commit `5b114c0a9476c359b27cfe994743fc7beb0a3554` |
|
||||
|
||||
上述值来自上游 README、`build.gradle.kts`、`app/build.gradle.kts` 和
|
||||
`gradle/wrapper/gradle-wrapper.properties`。它们是接入前的远端核实结果,不代表
|
||||
本仓库已经构建通过。`T-001` 接入时必须再次确认远端 commit,并把最终采用的 commit
|
||||
作为可复现基线。
|
||||
上述版本已在 2026-07-25 使用 JDK 17.0.13、SDK 34 和 Build Tools 34.0.0 完成
|
||||
Windows Debug 构建。上游无障碍分支落后于 `main` 的修复和 1.4.2 能力,因此不整体
|
||||
切换分支;后续只选择性移植无障碍服务。
|
||||
|
||||
上游启用了 Google Services 4.4.2、Firebase Crashlytics Gradle Plugin 3.0.2 和
|
||||
Firebase BOM 33.7.0,但 `google-services.json` 被 `.gitignore` 排除。干净构建必须
|
||||
提供本项目自己的 Firebase 配置,或者在不需要遥测时移除相关插件和依赖;不得提交
|
||||
真实 Firebase 配置。
|
||||
上游 Firebase 配置依赖未提交的 `google-services.json`,且第一层不需要遥测。
|
||||
接入基线已移除 Google Services、Firebase Analytics/Crashlytics 及云端崩溃上报
|
||||
设置,保留本地 `CrashHandler`,从而无需伪造或提交 Firebase 凭证。
|
||||
|
||||
## 关键决策
|
||||
|
||||
@@ -113,7 +111,7 @@ RabbitMQ、NATS 和 gRPC 为主,不符合最小 Gin + SQLite 边界。
|
||||
## 计划目录
|
||||
|
||||
```text
|
||||
android-buyer/ # Kotlin Android App
|
||||
android-buyer/ # 已接入的 Roubao Kotlin Android App
|
||||
backend-api/
|
||||
cmd/api/ # 进程入口,只负责装配和生命周期
|
||||
internal/domain/ # 实体、状态机和确定性规则
|
||||
@@ -132,20 +130,21 @@ docs/
|
||||
|
||||
## 构建与运行命令
|
||||
|
||||
当前没有源码,以下是计划形状而非可运行证据:
|
||||
|
||||
| 用途 | 计划命令 | 当前状态 |
|
||||
| 用途 | 命令 | 当前状态 |
|
||||
| --- | --- | --- |
|
||||
| Android 构建 | `android-buyer\gradlew.bat assembleDebug` | 待 `T-001` |
|
||||
| Android 单元测试 | `android-buyer\gradlew.bat test` | 待 `T-001` |
|
||||
| Android 标准验证 | `.\init.ps1` | 已验证 |
|
||||
| Android 构建 | `android-buyer\gradlew.bat assembleDebug --no-daemon` | 已验证 |
|
||||
| Android 测试任务 | `android-buyer\gradlew.bat test --no-daemon` | 已验证;无测试源 |
|
||||
| Android 安装/启动 | `$env:RUN_START_COMMAND="1"; .\init.ps1` | 已在 Android 16 真机验证 |
|
||||
| 后端依赖 | `go mod download`(在 `backend-api/`) | 待 `T-201` |
|
||||
| 后端测试 | `go test ./...`(在 `backend-api/`) | 待 `T-201` |
|
||||
| 后端构建 | `go build -o bin/cmroubao-api.exe ./cmd/api` | 待 `T-201` |
|
||||
| 后端启动 | `go run ./cmd/api` | 待 `T-201` |
|
||||
| 数据迁移 | `goose -dir migrations sqlite3 ./var/cmroubao.db up` | 待 `T-201` |
|
||||
|
||||
任何命令只有实际执行成功后才能写入 `init.ps1`、`init.sh` 和
|
||||
`current-state.md` 的“当前可运行内容”。
|
||||
`gradlew installDebug` 在当前 Android 16 设备上由旧版 AGP/ddmlib 返回 `-99`,
|
||||
但 SDK Platform Tools 37.0.0 的 `adb install -r -t` 成功。标准脚本因此使用 SDK
|
||||
内新版 ADB 安装,避免 PATH 中旧版 ADB 1.0.32。
|
||||
|
||||
## 依赖纪律
|
||||
|
||||
|
||||
@@ -94,5 +94,6 @@
|
||||
- [ ] 当前任务文件记录命令、结果、环境和未验证项。
|
||||
- [ ] `current-state.md` 与真实目录、命令和 blocker 一致。
|
||||
|
||||
当前尚无真实命令。`T-001` 后必须在这里列出 Android 构建和测试命令;后端建立后
|
||||
再列出后端命令。不能把 `docs/03-tech-stack.md` 中的计划命令当作已通过证据。
|
||||
当前 Android 标准验证命令是根目录 `.\init.ps1`;它执行 Gradle `test` 和
|
||||
`assembleDebug`。设置 `RUN_START_COMMAND=1` 时使用 SDK 内新版 ADB 安装并启动。
|
||||
后端建立后再在这里列出后端命令。
|
||||
|
||||
+24
-28
@@ -5,23 +5,23 @@
|
||||
## 当前快照
|
||||
|
||||
- 日期:2026-07-25
|
||||
- 阶段:Harness 文档基线完成,T-001 已开始,Android 源码尚未接入
|
||||
- 阶段:T-001 Android 可运行基线完成,准备执行 T-002 设备就绪基线
|
||||
- Git:已初始化,当前分支为 `main`,文档和初始化脚本纳入首个基线提交
|
||||
- 生产代码:无
|
||||
- Android:Roubao 源码尚未接入;上游仓库、MIT 许可证、分支和构建版本已远端核实
|
||||
- 生产代码:`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 和 ADB 已有;Android Studio、Android SDK 34
|
||||
未检测到,`ANDROID_HOME`/`ANDROID_SDK_ROOT` 未设置
|
||||
- 测试:无
|
||||
- 本机 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` 测试源
|
||||
- 版本控制内数据:只有 `deepseek总结.txt` 背景摘要和本套项目文档
|
||||
- 本地私有样本:仓库根目录存在一组未跟踪、已本地排除的同名蝦皮文本/JPEG;
|
||||
已核实 UTF-8 四行字段格式和图片可解码,真实内容未纳入 Git
|
||||
- 标准启动路径:未配置;`init.ps1`/`init.sh` 会主动失败
|
||||
- 标准验证路径:文档结构和链接检查;无代码构建
|
||||
- 当前 blocker:Roubao 尚未导入,`main` 与无障碍开发分支尚未完成代码差异评估;
|
||||
Android Studio/SDK 34 未安装或未被检测到,测试设备状态未知;拼多多测试版本/账号
|
||||
未建立基线;蝦皮样本正式私有目录、更多图片类型和一单多 SKU 规则未确认;VLM
|
||||
供应商和测试凭证未确认
|
||||
- 标准启动路径:`$env:RUN_START_COMMAND="1"; .\init.ps1`
|
||||
- 标准验证路径:`.\init.ps1`
|
||||
- 当前 blocker:T-002 尚未完成 Shizuku 服务/授权、目标无障碍服务和拼多多登录状态
|
||||
检查;蝦皮样本正式私有目录、更多图片类型和一单多 SKU 规则未确认;VLM 供应商和
|
||||
测试凭证未确认
|
||||
|
||||
## 当前目录
|
||||
|
||||
@@ -29,33 +29,29 @@
|
||||
| --- | --- | --- |
|
||||
| `AGENTS.md` | 已有 | agent 权威入口 |
|
||||
| `docs/` | 已有 | Harness Coding 文档 |
|
||||
| `docs/tasks/T-001.md` | TODO | 当前第一个可领取任务 |
|
||||
| `docs/tasks/T-001.md` | DONE | Android 可构建、可安装、可启动基线 |
|
||||
| `deepseek总结.txt` | 已有 | 历史讨论摘要,不是正式需求权威 |
|
||||
| `android-buyer/` | 待建 | Roubao Android 代码目标目录 |
|
||||
| `android-buyer/` | 已有 | Roubao `main` 固定 commit 的 Android 基线 |
|
||||
| `backend-api/` | 待建 | Go-Gin、管理 Web 和数据目标目录 |
|
||||
| `init.ps1` / `init.sh` | 占位 | T-001 后写入真实命令 |
|
||||
| `init.ps1` / `init.sh` | 已验证 | Android 构建入口;可选真机安装启动 |
|
||||
|
||||
## 任务摘要
|
||||
|
||||
- 已完成:Harness 文档初始化(本次文档工作,不作为产品开发任务编号)。
|
||||
- 正在进行:`T-001 初始化 Git 并接入 Roubao Android 基线`;已完成 Git 初始化和
|
||||
上游远端核实,源码导入及构建尚未完成。
|
||||
- 下一个可领取任务:无;完成 T-001 后才能领取依赖它的任务。
|
||||
- 已完成:T-001 初始化 Git 并接入 Roubao Android 基线。
|
||||
- 正在进行:无。
|
||||
- 下一个可领取任务:T-002 建立测试设备基线和就绪检查。
|
||||
|
||||
## 当前可运行内容
|
||||
|
||||
没有生产代码或已验证构建命令。以下检查仅验证文档文件:
|
||||
|
||||
```powershell
|
||||
Get-ChildItem -Recurse -File
|
||||
Get-Content docs/agent-context.json -Raw | ConvertFrom-Json | Out-Null
|
||||
.\init.ps1
|
||||
|
||||
$env:RUN_START_COMMAND = "1"
|
||||
.\init.ps1
|
||||
```
|
||||
|
||||
`docs/03-tech-stack.md` 中的 Gradle、Go 构建和启动命令是计划形状,尚不能作为
|
||||
当前可运行内容。
|
||||
|
||||
已核实的 Roubao 远端版本事实记录在 `docs/03-tech-stack.md`;“已核实”只表示查看了
|
||||
上游配置,不表示本机已经具备 Android SDK 或完成过 APK 构建。
|
||||
2026-07-25 已在 PKG110、Android 16/API 36 上用第二条命令完成 Debug APK 安装和
|
||||
冷启动;画面停在预期的 Shizuku 使用指南,进程存活且 logcat 无崩溃。
|
||||
|
||||
## 维护规则
|
||||
|
||||
|
||||
+43
-14
@@ -3,17 +3,19 @@ id: T-001
|
||||
title: 初始化 Git 并接入 Roubao Android 基线
|
||||
phase: 0
|
||||
deps: []
|
||||
status: DOING
|
||||
status: DONE
|
||||
created: 2026-07-25
|
||||
context_ref: null
|
||||
context_ref: 285606639bc13b6db4bb8969eb607612fa56d87a
|
||||
work_branch: main
|
||||
write_paths:
|
||||
- AGENTS.md
|
||||
- docs/tasks/T-001.md
|
||||
- android-buyer/**
|
||||
- .gitignore
|
||||
- README.md
|
||||
- init.ps1
|
||||
- init.sh
|
||||
- .gitattributes
|
||||
- docs/00-ai-start-here.md
|
||||
- docs/02-requirements.md
|
||||
- docs/03-tech-stack.md
|
||||
@@ -27,9 +29,9 @@ write_paths:
|
||||
|
||||
## 问题 / 背景
|
||||
|
||||
当前仓库只有 Harness 文档,不是 Git 仓库,也没有 Roubao 源码、Gradle Wrapper 或
|
||||
任务启动时仓库只有 Harness 文档,没有 Roubao 源码、Windows Gradle Wrapper 或
|
||||
可验证的 Android 命令。所有自动化、VLM 和后台任务都依赖一个可复现的 Android
|
||||
基线;在基线完成前不能开始拼多多业务修改。
|
||||
基线。
|
||||
|
||||
预期上游已经从真实仓库完成远端核实:
|
||||
|
||||
@@ -68,17 +70,17 @@ AccessibilityService 位于独立开发分支;接入前要先比较分支,
|
||||
## 验收要点
|
||||
|
||||
- [x] 当前目录已成为可正常查看状态和提交的 Git 仓库。
|
||||
- [ ] `android-buyer/` 包含可追溯到明确 URL 和 commit 的 Roubao 源码。
|
||||
- [ ] 上游许可证文件已保留,并确认允许当前预期的二次开发方式。
|
||||
- [ ] Windows 上使用仓库内 Gradle Wrapper 成功构建 Debug APK。
|
||||
- [ ] 上游已有 Android 单元测试已执行;没有测试时明确记录。
|
||||
- [ ] 有测试设备时完成安装和启动 smoke,并记录设备/Android 版本;无设备时任务
|
||||
- [x] `android-buyer/` 包含可追溯到明确 URL 和 commit 的 Roubao 源码。
|
||||
- [x] 上游许可证文件已保留,并确认允许当前预期的二次开发方式。
|
||||
- [x] Windows 上使用仓库内 Gradle Wrapper 成功构建 Debug APK。
|
||||
- [x] 上游已有 Android 单元测试已执行;没有测试时明确记录。
|
||||
- [x] 有测试设备时完成安装和启动 smoke,并记录设备/Android 版本;无设备时任务
|
||||
不能把设备 smoke 写成已通过。
|
||||
- [ ] 未加入真实 API key、签名密码、设备 token 或本地 SDK 绝对路径。
|
||||
- [ ] 已处理缺失的 `google-services.json`:提供本地忽略配置,或明确移除不需要的
|
||||
- [x] 未加入真实 API key、签名密码、设备 token 或本地 SDK 绝对路径。
|
||||
- [x] 已处理缺失的 `google-services.json`:提供本地忽略配置,或明确移除不需要的
|
||||
Firebase 插件和依赖。
|
||||
- [ ] `03-tech-stack.md` 和 `current-state.md` 不再把已核实信息标为待定。
|
||||
- [ ] `init.ps1`/`init.sh` 与文档中的当前命令一致,或因明确 blocker 保持主动失败。
|
||||
- [x] `03-tech-stack.md` 和 `current-state.md` 不再把已核实信息标为待定。
|
||||
- [x] `init.ps1`/`init.sh` 与文档中的当前命令一致,或因明确 blocker 保持主动失败。
|
||||
|
||||
建议验证命令形状,最终以接入工程为准:
|
||||
|
||||
@@ -108,4 +110,31 @@ Set-Location android-buyer
|
||||
- 用户确认第一层使用本机蝦皮订单文本和同订单号参考图作为真实样本;已将输入契约
|
||||
和后续 T-004 同步到需求、架构、编码规则及路线图。
|
||||
- 本次只建立文档与脚本提交;Gradle 构建、测试、APK 安装和设备 smoke 均未运行。
|
||||
- T-001 保持 `DOING`,剩余 blocker 见 `docs/current-state.md`。
|
||||
- 本阶段结束时 T-001 仍保持 `DOING`,当时的 blocker 见 `docs/current-state.md` 历史。
|
||||
|
||||
### 2026-07-25:Android 可运行基线
|
||||
|
||||
- 选择 `main@c8a6d7f03422eb01744b01f3ee77bf7757741f7e` 作为导入基线。无障碍分支
|
||||
落后 `main` 的修复和 1.4.2 能力,后续只选择性移植,不整体切换。
|
||||
- `android-buyer/UPSTREAM.md` 记录来源和调整;上游 MIT `LICENSE` 已保留。
|
||||
- 安装 JDK 17 对应的 Android SDK 34、Build Tools 34.0.0、Command-line Tools
|
||||
22.0 和 Platform Tools 37.0.0;没有把本机 SDK 绝对路径提交到仓库。
|
||||
- 新版 Command-line Tools 与 AGP 8.2 会输出 SDK XML v4/v3 兼容警告,但任务和 APK
|
||||
构建均成功;这是非阻塞工具版本提示,不作为通过证据本身。
|
||||
- 上游缺少 `gradlew.bat`,已用 Gradle 8.2 Wrapper 任务生成;Wrapper 固定官方
|
||||
SHA-256、120 秒网络超时并关闭生成阶段 URL 探测。
|
||||
- 移除需要私有 `google-services.json` 的 Firebase Analytics/Crashlytics 和云端
|
||||
上报设置;保留本地 `CrashHandler`。
|
||||
- `.\gradlew.bat tasks --no-daemon`:成功。
|
||||
- `.\gradlew.bat test --no-daemon`:成功;Debug/Release 单元测试均为 `NO-SOURCE`,
|
||||
上游没有 `src/test` 或 `src/androidTest`。
|
||||
- `.\gradlew.bat assembleDebug --no-daemon`:成功;生成 `app-debug.apk`,当次
|
||||
SHA-256 为 `745C8E23B5C1575E9C71F6FF583BEEA3800759E9C611AD0C45D9062A856F68C4`。
|
||||
- `gradlew installDebug` 在 Android 16 上由 AGP 8.2/ddmlib 返回 `-99`;SDK ADB
|
||||
37.0.0 执行 `adb install -r -t` 成功,标准脚本采用该可靠路径。
|
||||
- `$env:RUN_START_COMMAND="1"; .\init.ps1`:成功完成测试任务、APK 构建、安装和
|
||||
冷启动。
|
||||
- 真机 smoke:OnePlus PKG110,Android 16/API 36;MainActivity 冷启动约 0.9 秒,
|
||||
进程存活、前台窗口正确、logcat 无崩溃,画面正常停在 Shizuku 使用指南。
|
||||
- Android Studio `winget` 静默安装卡住并已终止;命令行构建不依赖 IDE,因此不作为
|
||||
T-001 blocker。
|
||||
|
||||
+3
-3
@@ -66,6 +66,6 @@ JPEG。正式私有目录、额外图片类型和一单多 SKU 规则仍未固
|
||||
|
||||
## 执行记录
|
||||
|
||||
尚未开始,等待 T-001 完成。前置检查已确认一组同名文本/JPEG 存在,文本字段结构和
|
||||
图片解码有效;未记录或提交实际订单号、店铺名、商品内容及图片。实现时仍需确定正式
|
||||
私有目录和一单多 SKU 规则。
|
||||
尚未开始,依赖 T-001 已满足。前置检查已确认一组同名文本/JPEG 存在,文本字段结构
|
||||
和图片解码有效;未记录或提交实际订单号、店铺名、商品内容及图片。实现时仍需确定
|
||||
正式私有目录和一单多 SKU 规则。
|
||||
|
||||
Reference in New Issue
Block a user