@buaa_smat/hometrans 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -139
- package/agents/build-fixer.md +385 -384
- package/agents/code-reviewer.md +240 -240
- package/agents/logic-coder.md +199 -199
- package/agents/logic-context-builder.md +194 -194
- package/agents/review-fixer.md +405 -405
- package/agents/self-test-fixer.md +296 -296
- package/agents/self-tester.md +396 -393
- package/agents/spec-generator.md +540 -540
- package/dist/cli/config-store.js +150 -17
- package/dist/cli/config.js +10 -3
- package/dist/cli/init.js +391 -233
- package/dist/cli/uninstall.js +12 -7
- package/dist/context/index.js +19 -2
- package/env-requirements.json +177 -181
- package/package.json +1 -1
- package/resource/choose_editor.png +0 -0
- package/resource/migration_process.svg +94 -0
- package/resource/migration_process_transparent.svg +93 -0
- package/resource/set_environment.png +0 -0
- package/resource/set_multimodel.png +0 -0
- package/resource/set_sdk.png +0 -0
- package/skills/hmos-batch-ui-align/SKILL.md +108 -108
- package/skills/hmos-convert-pipeline/SKILL.md +429 -429
- package/skills/hmos-fix-build-errors/SKILL.md +273 -272
- package/skills/hmos-incremental-ui-align/{readme.md → README.md} +234 -237
- package/skills/hmos-incremental-ui-align/SKILL.md +218 -218
- package/skills/hmos-incremental-ui-align/scripts/__pycache__/app_feature_verify.cpython-314.pyc +0 -0
- package/skills/hmos-incremental-ui-align/scripts/app_feature_verify.py +128 -29
- package/skills/hmos-incremental-ui-align/scripts/navigation-capure.md +37 -37
- package/skills/hmos-incremental-ui-align/scripts/page_capture.py +7 -2
- package/skills/hmos-integration-test/{readme.md → README.md} +309 -309
- package/skills/hmos-integration-test/SKILL.md +380 -380
- package/skills/hmos-resources-convert/SKILL.md +623 -623
- package/skills/hmos-spec-generate/SKILL.md +324 -331
- package/tools/test-tools/autotest/README.md +10 -11
- package/tools/test-tools/autotest/self_test_runner.py +40 -12
- package/resource/common_config.png +0 -0
- package/resource/integration_test_config.png +0 -0
- package/resource/set_env.png +0 -0
- package/resource/ui_align_config.png +0 -0
|
@@ -1,237 +1,234 @@
|
|
|
1
|
-
# hmos-ui-align
|
|
2
|
-
|
|
3
|
-
HarmonyOS-Android UI 自动对齐流水线。
|
|
4
|
-
|
|
5
|
-
## 它解决什么问题
|
|
6
|
-
|
|
7
|
-
以往对齐鸿蒙和安卓 UI 的流程需要:
|
|
8
|
-
1. 人工把设备点到目标页面
|
|
9
|
-
2. 手动跑 parse 脚本截图 + dump view tree
|
|
10
|
-
3. 肉眼对比差异
|
|
11
|
-
4. 手写改鸿蒙源码
|
|
12
|
-
|
|
13
|
-
每多一个页面/弹窗/tab,上述步骤都要重复一遍,非常费时。
|
|
14
|
-
|
|
15
|
-
本 skill 做了三件事:
|
|
16
|
-
-
|
|
17
|
-
- 自动**采集** view tree + 截图(安卓走 adb、鸿蒙走 hdc)
|
|
18
|
-
- 自动**对比 + 改码**,并按 MVVM 模式把 mock 数据放到 Model 层
|
|
19
|
-
|
|
20
|
-
用户只需要一句自然语言 + 点击路径。
|
|
21
|
-
|
|
22
|
-
> ⚠️ 当前只保证 **UI 对齐**,不保证功能行为对齐。
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 前置条件
|
|
27
|
-
|
|
28
|
-
1. **设备连接**
|
|
29
|
-
- 安卓设备:已装目标 App,`adb devices` 能看到
|
|
30
|
-
- 鸿蒙设备:已装目标 App,`hdc list targets` 能看到
|
|
31
|
-
- 两台设备建议都保持亮屏解锁
|
|
32
|
-
|
|
33
|
-
2. **Python 依赖**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
|
53
|
-
|
|
54
|
-
| `
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
> **Step 0.
|
|
64
|
-
|
|
65
|
-
>
|
|
66
|
-
>
|
|
67
|
-
>
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
1.
|
|
127
|
-
1.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
{
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- **2.
|
|
148
|
-
- **2.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
-
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
├──
|
|
171
|
-
├──
|
|
172
|
-
├──
|
|
173
|
-
├──
|
|
174
|
-
├──
|
|
175
|
-
│
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
├──
|
|
180
|
-
├──
|
|
181
|
-
├──
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
--
|
|
198
|
-
--
|
|
199
|
-
--
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
#
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
**Q:
|
|
217
|
-
A:
|
|
218
|
-
|
|
219
|
-
**Q:
|
|
220
|
-
A:
|
|
221
|
-
|
|
222
|
-
**Q:
|
|
223
|
-
A: Step
|
|
224
|
-
|
|
225
|
-
**Q:
|
|
226
|
-
A:
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
- 只对齐 UI,不对齐功能/数据流
|
|
236
|
-
- phone-agent 寻路依赖 GLM 模型对页面文本的识别,小字体或非标准控件可能识别不准
|
|
237
|
-
- 双端设备的分辨率/密度差异会影响像素到 vp 的换算,流水线已显式带上 density,但同一个 Figma 规格下仍可能出现 ±1vp 偏差
|
|
1
|
+
# hmos-ui-align
|
|
2
|
+
|
|
3
|
+
HarmonyOS-Android UI 自动对齐流水线。
|
|
4
|
+
|
|
5
|
+
## 它解决什么问题
|
|
6
|
+
|
|
7
|
+
以往对齐鸿蒙和安卓 UI 的流程需要:
|
|
8
|
+
1. 人工把设备点到目标页面
|
|
9
|
+
2. 手动跑 parse 脚本截图 + dump view tree
|
|
10
|
+
3. 肉眼对比差异
|
|
11
|
+
4. 手写改鸿蒙源码
|
|
12
|
+
|
|
13
|
+
每多一个页面/弹窗/tab,上述步骤都要重复一遍,非常费时。
|
|
14
|
+
|
|
15
|
+
本 skill 做了三件事:
|
|
16
|
+
- 用 phone-agent 自动**寻路**(根据自然语言点到指定页面,模型复用 `~/.hometrans/config.json` 统一配置)
|
|
17
|
+
- 自动**采集** view tree + 截图(安卓走 adb、鸿蒙走 hdc)
|
|
18
|
+
- 自动**对比 + 改码**,并按 MVVM 模式把 mock 数据放到 Model 层
|
|
19
|
+
|
|
20
|
+
用户只需要一句自然语言 + 点击路径。
|
|
21
|
+
|
|
22
|
+
> ⚠️ 当前只保证 **UI 对齐**,不保证功能行为对齐。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 前置条件
|
|
27
|
+
|
|
28
|
+
1. **设备连接**
|
|
29
|
+
- 安卓设备:已装目标 App,`adb devices` 能看到
|
|
30
|
+
- 鸿蒙设备:已装目标 App,`hdc list targets` 能看到
|
|
31
|
+
- 两台设备建议都保持亮屏解锁
|
|
32
|
+
|
|
33
|
+
2. **Python 依赖**
|
|
34
|
+
无需手动安装。脚本通过 `uv run` 调用,`openpyxl` / `phone-agent` 已在 `app_feature_verify.py` 顶部的 PEP 723 内联元数据里声明,uv 首次运行时自动解析安装(走清华镜像)。只需确保已安装 `uv`(`uv --version`)。
|
|
35
|
+
|
|
36
|
+
3. **模型配置**(phone-agent 导航用)
|
|
37
|
+
与自测共用同一个多模态模型:`ht init` 把模型四要素(api_key / name / base_url / provider)写入 `~/.hometrans/config.json` 的 `autotest.unified_model`,并导出为 `HOMETRANS_MODEL_*` 环境变量。脚本优先读环境变量,缺失时回落 config.json;都没有时兼容老版本的 `GLM_API_KEY`(走智谱 GLM 端点)。无需单独设置 API Key。
|
|
38
|
+
|
|
39
|
+
4. **鸿蒙 SDK 路径**(给改码阶段查 API 用)
|
|
40
|
+
取自 OS 环境变量 `OHOS_SDK_PATH` / `HMS_SDK_PATH`(为空时由 `DEVECO_SDK_HOME` 派生),由 `ht init` 写入机器环境变量;例如 DevEco Studio 自带的 `E:\DevEco Studio\sdk\default\openharmony\ets`。
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 入参与配置
|
|
45
|
+
|
|
46
|
+
本 skill 需要两类信息:
|
|
47
|
+
|
|
48
|
+
**① 调用时传入的入参**(每次按需提供):
|
|
49
|
+
|
|
50
|
+
| 入参 | 必填 | 说明 |
|
|
51
|
+
|---|---|--------------------------------------------------------------------|
|
|
52
|
+
| `android_project_dir` | 是 | 安卓源码根目录 |
|
|
53
|
+
| `harmony_project_dir` | 是 | 鸿蒙工程根目录(会被直接修改) |
|
|
54
|
+
| `capture_output_dir` | 否 | 采集产物输出目录(截图/view tree/分析报告)。默认 `<harmony_project_dir>/.hometrans/capture_output` |
|
|
55
|
+
|
|
56
|
+
**② 全局配置**(统一链路「环境变量 → `~/.hometrans/config.json` → 询问用户」,由 `ht init` 同时写入机器环境变量与 config.json,无需每次传):
|
|
57
|
+
|
|
58
|
+
- 模型配置 ← `HOMETRANS_MODEL_*` 环境变量(缺失时回落 `~/.hometrans/config.json` 的 `autotest.unified_model`;与自测共用同一个模型)
|
|
59
|
+
- 鸿蒙 SDK ETS API 目录 ← 环境变量 `OHOS_SDK_PATH` / `HMS_SDK_PATH`(为空时由 `DEVECO_SDK_HOME` 派生为 `<DEVECO_SDK_HOME>/default/openharmony/ets`、`.../hms/ets`)
|
|
60
|
+
|
|
61
|
+
> **Step 0.0** 会在执行前检查这些环境变量是否存在;缺失时会要求用户输入。
|
|
62
|
+
|
|
63
|
+
> 安卓/鸿蒙两端的 **App 显示名**(`android.app_name` / `harmony.app_name`)和 **包名**(`android.package` / `harmony.package`)也无需提供——skill 的 **Step 0.1** 会按 `android_project_dir` / `harmony_project_dir` 自动解析:
|
|
64
|
+
> - 安卓包名取自 app 模块 `build.gradle(.kts)` 的 `applicationId`(兜底 `AndroidManifest.xml` 的 `package`);App 名取自启动 Activity / `<application>` 的 `android:label`(`@string/xxx` 会去 `res/values*/strings.xml` 解析,优先中文)。
|
|
65
|
+
> - 鸿蒙包名取自 `AppScope/app.json5` 的 `bundleName`;App 名取自 `app.json5` 的 `label`(`$string:xxx` 会去 `AppScope/resources/**/element/string.json` 解析,优先中文)。
|
|
66
|
+
>
|
|
67
|
+
> 若某项无法从工程目录解析,skill 会回到询问用户。
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 使用方式
|
|
72
|
+
|
|
73
|
+
在 Claude Code 里直接调用 skill,**把两个工程目录附在需求里**(可作为命名参数,也可在自然语言里说明):
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
/hmos-ui-align android_project_dir: <安卓工程绝对路径> harmony_project_dir: <鸿蒙工程绝对路径>
|
|
77
|
+
<自然语言需求,描述要对齐的页面+点击路径>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 写需求的三个要点
|
|
81
|
+
|
|
82
|
+
1. **页面路径写清楚**
|
|
83
|
+
用「→」或「-」标注一级一级的点击步骤,比如 `首页 → 点击"AI智能填报" → 点击"专业"筛选按钮`。路径越具体,phone-agent 寻路成功率越高。
|
|
84
|
+
|
|
85
|
+
2. **说明是否要覆盖交互态**
|
|
86
|
+
默认会自动扫描 tab、弹窗、下拉等交互元素并逐个采集。如果只想对齐主页面,请明确说「只对齐主页面,不管弹窗和 tab」。
|
|
87
|
+
|
|
88
|
+
3. **说明是否用 Mock 数据**
|
|
89
|
+
默认用 mock 数据。如果想调真实后台,在需求里写「不要 mock 数据,调用真实后台」。
|
|
90
|
+
|
|
91
|
+
### 例子
|
|
92
|
+
|
|
93
|
+
**例 1(单个弹窗对齐)**
|
|
94
|
+
```
|
|
95
|
+
/hmos-ui-align 鸿蒙版本app(登录状态下,进入首页-点击"AI智能填报"-点击"专业"筛选按钮)
|
|
96
|
+
得到的弹窗样式和安卓同样路径得到的页面不一致,请修改鸿蒙源码将上述页面与安卓版本完全对齐
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**例 2(补齐缺失页面 + 调真实后台)**
|
|
100
|
+
```
|
|
101
|
+
/hmos-ui-align 鸿蒙版本app(点击我的-超级会员组件)显示与安卓不一致,且安卓版本在超级会员
|
|
102
|
+
上点击"会员中心"会跳到超级会员弹窗页,鸿蒙也没有这页。请修改鸿蒙源码将这些页面与安卓版本
|
|
103
|
+
完全对齐,不要mock数据,调用真实后台数据
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**例 3(多级路径 + 多个页面)**
|
|
107
|
+
```
|
|
108
|
+
/hmos-ui-align 鸿蒙版本(点击底部高考按钮 -> 带年纪查专业 -> 点击某一具体专业(如临床医学)
|
|
109
|
+
-> 点击就业分析,到达"专业就业健康度"展示页面)以及在"专业就业健康度"页面上点击"完整数
|
|
110
|
+
据指标"到达的就业健康度详情页都和安卓同一路径的不一致。比较这些页面的差别并将他们在视觉
|
|
111
|
+
效果上完全对齐,不要用mock数据,调用后台真实逻辑
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 运行过程中会发生什么
|
|
117
|
+
|
|
118
|
+
skill 会严格按 `SKILL.md` 里的 5 步流水线跑:
|
|
119
|
+
|
|
120
|
+
### Step 0 · 解析入参
|
|
121
|
+
读取调用入参 `android_project_dir` / `harmony_project_dir` / `capture_output_dir`,并按统一链路「环境变量 → config.json → 询问」解析 `HOMETRANS_MODEL_*`(统一模型,回落 `~/.hometrans/config.json` 的 `autotest.unified_model`)与 `OHOS_SDK_PATH` / `HMS_SDK_PATH`(回落 config.json 的 `env.*`;**Step 0.0** 会先做存在性检查,两层都缺失才要求用户输入)。随后 **Step 0.1** 按两个工程目录自动解析两端的 App 显示名与包名(无需手动配置)。
|
|
122
|
+
|
|
123
|
+
### Step 1 · 双端页面采集
|
|
124
|
+
1.1 解析你的需求,拆成一组「基础页」,每个基础页有 `android_nav_path` 和 `hmos_nav_path`
|
|
125
|
+
1.2 对每个基础页,两端分别:phone-agent 寻路 → 成功后 `page_capture.py` 截图 + dump view tree
|
|
126
|
+
1.3 扫描基础页 view tree,发现 tab、弹窗、下拉等交互元素,自动对每个子状态再采集一遍
|
|
127
|
+
1.4 鸿蒙端页面不存在时,寻路会失败,对应目录留空(Step 2 会改从源码读)
|
|
128
|
+
|
|
129
|
+
产物目录结构:
|
|
130
|
+
```
|
|
131
|
+
{capture_output_dir}/
|
|
132
|
+
task_{timestamp}/
|
|
133
|
+
android_page_1_{name}/
|
|
134
|
+
screenshot.png
|
|
135
|
+
view_tree.xml
|
|
136
|
+
hmos_page_1_{name}/
|
|
137
|
+
screenshot.png
|
|
138
|
+
view_tree.xml
|
|
139
|
+
android_page_1_{name}_popup_filter/
|
|
140
|
+
...
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Step 2 · UI 差异分析
|
|
144
|
+
主 agent 串行执行,不会下放给子 agent(保证质量):
|
|
145
|
+
- **2.1** 读安卓 screenshot + view tree,写 `android_page_*/UI_Analysis.md`(组件清单 + 位置 / 颜色 / icon / 尺寸 / 对齐方式等)
|
|
146
|
+
- **2.2** 读鸿蒙 screenshot + view tree,写 `hmos_page_*/UI_Analysis.md`;鸿蒙页不存在时改读源码写 `UI_Analysis_from_code.md`
|
|
147
|
+
- **2.3** 两份 Analysis 对比,按 `references/Comparison_Template.md` 生成 `UI_comparison.md`(markdown diff 表)
|
|
148
|
+
- **2.4** 验证所有 `UI_Analysis*.md` 和 `UI_comparison.md` 都已写全
|
|
149
|
+
|
|
150
|
+
所有尺寸都会以 `126px (3x → 42vp)` 的格式同时给出原始 px、设备密度、换算后的 vp。
|
|
151
|
+
|
|
152
|
+
### Step 3 · 改鸿蒙源码
|
|
153
|
+
- 把每个 `UI_comparison.md` 里的 diff 项汇总到 `{task_dir}/fix_checklist.md`(唯一 source of truth)
|
|
154
|
+
- 读 `references/MVVM开发文档/` 学习 MVVM 模式
|
|
155
|
+
- 读 `page_align.md` 学习转换规则
|
|
156
|
+
- 逐条修 diff,每修一个把 `- [ ]` 改成 `- [x]`
|
|
157
|
+
- 每个尺寸 / icon / alignment 都要回溯到安卓源码的 XML 或资源值,不允许"看起来差不多"
|
|
158
|
+
|
|
159
|
+
### Step 4 · 编译校验
|
|
160
|
+
若可用,调 `hmos-fix-build-errors` skill 确保工程能编过。**不会自动部署**。
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 目录结构
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
Agents/hmos-ui-align/
|
|
168
|
+
├── SKILL.md # 流水线定义(主 agent 执行逻辑)
|
|
169
|
+
├── readme.md # 本文档
|
|
170
|
+
├── page_align.md # Step 3 的转换规则
|
|
171
|
+
├── diff_analysis.md # 内部说明
|
|
172
|
+
├── scripts/
|
|
173
|
+
│ ├── app_feature_verify.py # phone-agent 寻路工具
|
|
174
|
+
│ ├── page_capture.py # view tree + 截图采集工具
|
|
175
|
+
│ └── navigation-capure.md # 两个脚本的调用约定
|
|
176
|
+
└── references/
|
|
177
|
+
├── UI_Analysis_Template.md # Step 2 分析模板
|
|
178
|
+
├── Comparison_Template.md # Step 2.3 对比模板
|
|
179
|
+
├── MVVM开发文档/ # 鸿蒙 MVVM 参考
|
|
180
|
+
├── android-to-harmonyOS-ui-layout-mapping-reference.md
|
|
181
|
+
├── android-to-harmonyOS-ui-atomic-component-mapping-reference.md
|
|
182
|
+
└── android-to-harmonyOS-ui-interaction-mapping-reference.md
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 单独运行脚本(调试用)
|
|
188
|
+
|
|
189
|
+
跳过 skill 手动跑采集:
|
|
190
|
+
|
|
191
|
+
```powershell
|
|
192
|
+
# 安卓寻路
|
|
193
|
+
$env:PYTHONIOENCODING="utf-8"
|
|
194
|
+
uv run Agents/hmos-ui-align/scripts/app_feature_verify.py `
|
|
195
|
+
--device adb `
|
|
196
|
+
--app "Salt Player" `
|
|
197
|
+
--package "com.salt.music" `
|
|
198
|
+
--prompt "进入首页-点击AI智能填报-点击专业筛选按钮" `
|
|
199
|
+
--max-steps 15
|
|
200
|
+
|
|
201
|
+
# 安卓采集
|
|
202
|
+
uv run Agents/hmos-ui-align/scripts/page_capture.py --device adb -o ./tmp/android_page_1_xxx
|
|
203
|
+
|
|
204
|
+
# 鸿蒙同理,把 --device adb 换成 --device hdc
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
> 注意:`--prompt` 模式会自动在前面加「打开{app_name},」,所以 prompt 里不要再写"打开"。
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 常见问题
|
|
212
|
+
|
|
213
|
+
**Q: phone-agent 寻路失败怎么办?**
|
|
214
|
+
A: skill 默认重试两次。流水线的内部规则:①先看页面是否存在;②路径错了就 force-stop 重试;③路径对但工具报错就让 agent 自己看截图判断是否到了。超过两次仍失败才会跳过该页。
|
|
215
|
+
|
|
216
|
+
**Q: 鸿蒙端页面根本不存在,能新建吗?**
|
|
217
|
+
A: 可以。Step 2.2 会改从鸿蒙源码读,Step 3 会按安卓的实现规格新建 `.ets` 文件到 `entry/src/main/ets/pages/`,并登记路由。
|
|
218
|
+
|
|
219
|
+
**Q: 为什么同一次任务会采集多个页面?**
|
|
220
|
+
A: Step 1.3 默认扫描交互元素(tab / 弹窗 / 展开收起等)并递归采集。想关掉请在需求里写「只对齐主页面」。
|
|
221
|
+
|
|
222
|
+
**Q: 改完会自动部署吗?**
|
|
223
|
+
A: 不会。Step 4 只跑编译验证(如果 `hmos-fix-build-errors` skill 可用)。部署自己来。
|
|
224
|
+
|
|
225
|
+
**Q: 能不能只做差异分析、不改码?**
|
|
226
|
+
A: 目前流水线是端到端的。如果只想要分析产物,跑完 Step 2 后手动中断即可,所有 `UI_Analysis.md` 和 `UI_comparison.md` 都会落盘在 `{capture_output_dir}/task_{timestamp}/` 下。
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 已知限制
|
|
231
|
+
|
|
232
|
+
- 只对齐 UI,不对齐功能/数据流
|
|
233
|
+
- phone-agent 寻路依赖 GLM 模型对页面文本的识别,小字体或非标准控件可能识别不准
|
|
234
|
+
- 双端设备的分辨率/密度差异会影响像素到 vp 的换算,流水线已显式带上 density,但同一个 Figma 规格下仍可能出现 ±1vp 偏差
|