@buaa_smat/hometrans 0.1.0 → 0.1.2
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 +141 -124
- package/agents/build-fixer.md +1 -0
- package/agents/code-review-fix.md +1 -0
- package/agents/code-reviewer.md +1 -0
- package/agents/logic-coding.md +1 -0
- package/agents/logic-context-builder.md +1 -0
- package/agents/review-fixer.md +1 -0
- package/agents/self-test-fixer.md +1 -0
- package/agents/self-tester.md +260 -233
- package/agents/spec-generator.md +1 -0
- package/agents/test-tools/autotest/README.md +223 -0
- package/agents/test-tools/autotest/config.yaml.example +58 -0
- package/agents/test-tools/autotest/pyproject.toml +16 -0
- package/agents/test-tools/autotest/report_tool.py +759 -0
- package/agents/test-tools/autotest/self_test_runner.py +773 -0
- package/agents/test-tools/autotest/testcases_schema.md +143 -0
- package/agents/test-tools/autotest/testcases_tool.py +215 -0
- package/agents/test-tools/autotest/uv.lock +3156 -0
- package/agents/test-tools/harmony_autotest-0.1.0-py3-none-any.whl +0 -0
- package/agents/test-tools/hypium-6.1.0.210-py3-none-any.whl +0 -0
- package/agents/test-tools/hypium_mcp-0.6.5-py3-none-any.whl +0 -0
- package/agents/test-tools/xdevice-6.1.0.210-py3-none-any.whl +0 -0
- package/agents/test-tools/xdevice_devicetest-6.1.0.210-py3-none-any.whl +0 -0
- package/agents/test-tools/xdevice_ohos-6.1.0.210-py3-none-any.whl +0 -0
- package/dist/cli/config-store.js +27 -2
- package/dist/cli/config.js +17 -6
- package/dist/cli/index.js +3 -2
- package/dist/cli/init.js +135 -22
- package/dist/cli/mcp.js +2 -2
- package/dist/context/index.js +165 -69
- package/package.json +59 -60
- package/skills/code-dev-review-fix/SKILL.md +279 -0
- package/skills/code-dev-review-fix-workspace/evals/evals.json +56 -0
- package/skills/code-dev-review-fix-workspace/iteration-1/routing-results.md +23 -0
- package/skills/convert_pipeline/SKILL.md +423 -439
- package/skills/hmos-resources-convert/SKILL.md +623 -0
- package/skills/hmos-resources-convert/evals/evals.json +171 -0
- package/skills/hmos-resources-convert/references/conversion-rules.md +663 -0
- package/skills/hmos-resources-convert/references/dependency-analysis-rules.md +388 -0
- package/skills/hmos-resources-convert/references/resource-mapping-rules.md +457 -0
- package/skills/hmos-resources-convert/references/xml-drawable-to-svg-rules.md +513 -0
- package/skills/hmos-resources-convert/template/AppScope/app.json5 +10 -0
- package/skills/hmos-resources-convert/template/AppScope/resources/base/element/string.json +8 -0
- package/skills/hmos-resources-convert/template/AppScope/resources/base/media/background.png +0 -0
- package/skills/hmos-resources-convert/template/AppScope/resources/base/media/foreground.png +0 -0
- package/skills/hmos-resources-convert/template/AppScope/resources/base/media/layered_image.json +7 -0
- package/skills/hmos-resources-convert/template/build-profile.json5 +42 -0
- package/skills/hmos-resources-convert/template/code-linter.json5 +32 -0
- package/skills/hmos-resources-convert/template/entry/build-profile.json5 +33 -0
- package/skills/hmos-resources-convert/template/entry/hvigorfile.ts +6 -0
- package/skills/hmos-resources-convert/template/entry/obfuscation-rules.txt +23 -0
- package/skills/hmos-resources-convert/template/entry/oh-package.json5 +10 -0
- package/skills/hmos-resources-convert/template/entry/src/main/ets/entryability/EntryAbility.ets +48 -0
- package/skills/hmos-resources-convert/template/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets +16 -0
- package/skills/hmos-resources-convert/template/entry/src/main/ets/pages/Index.ets +23 -0
- package/skills/hmos-resources-convert/template/entry/src/main/module.json5 +55 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/base/element/color.json +8 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/base/element/float.json +8 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/base/element/string.json +16 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/base/media/background.png +0 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/base/media/foreground.png +0 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/base/media/layered_image.json +7 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/base/media/startIcon.png +0 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/base/profile/backup_config.json +3 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/base/profile/main_pages.json +5 -0
- package/skills/hmos-resources-convert/template/entry/src/main/resources/dark/element/color.json +8 -0
- package/skills/hmos-resources-convert/template/entry/src/mock/mock-config.json5 +2 -0
- package/skills/hmos-resources-convert/template/entry/src/ohosTest/ets/test/Ability.test.ets +35 -0
- package/skills/hmos-resources-convert/template/entry/src/ohosTest/ets/test/List.test.ets +5 -0
- package/skills/hmos-resources-convert/template/entry/src/ohosTest/module.json5 +16 -0
- package/skills/hmos-resources-convert/template/entry/src/test/List.test.ets +5 -0
- package/skills/hmos-resources-convert/template/entry/src/test/LocalUnit.test.ets +33 -0
- package/skills/hmos-resources-convert/template/hvigor/hvigor-config.json5 +23 -0
- package/skills/hmos-resources-convert/template/hvigorfile.ts +6 -0
- package/skills/hmos-resources-convert/template/oh-package-lock.json5 +28 -0
- package/skills/hmos-resources-convert/template/oh-package.json5 +10 -0
- package/skills/hmos-resources-convert/tools/apktool.bat +85 -0
- package/skills/hmos-resources-convert/tools/apktool_3.0.1.jar +0 -0
- package/skills/hmos-ui-align/SKILL.md +182 -0
- package/skills/hmos-ui-align/config-example.json +11 -0
- package/skills/hmos-ui-align/config.json +11 -0
- package/skills/hmos-ui-align/diff_analysis.md +53 -0
- package/skills/hmos-ui-align/page_align.md +62 -0
- package/skills/hmos-ui-align/readme.md +231 -0
- package/skills/hmos-ui-align/references/Comparison_Template.md +2 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Link/350/243/205/351/245/260/345/231/250/357/274/232/347/210/266/345/255/220/345/217/214/345/220/221/345/220/214/346/255/245.md +648 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Observed/350/243/205/351/245/260/345/231/250/345/222/214@ObjectLink/350/243/205/351/245/260/345/231/250/357/274/232/345/265/214/345/245/227/347/261/273/345/257/271/350/261/241/345/261/236/346/200/247/345/217/230/345/214/226.md +2089 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Prop/350/243/205/351/245/260/345/231/250/357/274/232/347/210/266/345/255/220/345/215/225/345/220/221/345/220/214/346/255/245.md +1033 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Provide/350/243/205/351/245/260/345/231/250/345/222/214@Consume/350/243/205/351/245/260/345/231/250/357/274/232/344/270/216/345/220/216/344/273/243/347/273/204/344/273/266/345/217/214/345/220/221/345/220/214/346/255/245.md +1183 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@State/350/243/205/351/245/260/345/231/250/357/274/232/347/273/204/344/273/266/345/206/205/347/212/266/346/200/201.md +576 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Track/350/243/205/351/245/260/345/231/250/357/274/232class/345/257/271/350/261/241/345/261/236/346/200/247/347/272/247/346/233/264/346/226/260.md +297 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/@Watch/350/243/205/351/245/260/345/231/250/357/274/232/347/212/266/346/200/201/345/217/230/351/207/217/346/233/264/346/224/271/351/200/232/347/237/245.md +395 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/AppStorage/357/274/232/345/272/224/347/224/250/345/205/250/345/261/200/347/232/204UI/347/212/266/346/200/201/345/255/230/345/202/250.md +903 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/Environment/357/274/232/350/256/276/345/244/207/347/216/257/345/242/203/346/237/245/350/257/242.md +106 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/LocalStorage/357/274/232/351/241/265/351/235/242/347/272/247UI/347/212/266/346/200/201/345/255/230/345/202/250.md +1178 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/MVVM/346/250/241/345/274/217V1.md +911 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/MVVM/346/250/241/345/274/217/357/274/210V1/357/274/211.md +911 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243/PersistentStorage/357/274/232/346/214/201/344/271/205/345/214/226/345/255/230/345/202/250UI/347/212/266/346/200/201.md +355 -0
- package/skills/hmos-ui-align/references/MVVM/345/274/200/345/217/221/346/226/207/346/241/243//347/256/241/347/220/206/345/272/224/347/224/250/346/213/245/346/234/211/347/232/204/347/212/266/346/200/201/346/246/202/350/277/260.md +11 -0
- package/skills/hmos-ui-align/references/UI_Analysis_Template.md +4 -0
- package/skills/hmos-ui-align/references/android-to-harmonyOS-ui-atomic-component-mapping-reference.md +2535 -0
- package/skills/hmos-ui-align/references/android-to-harmonyOS-ui-interaction-mapping-reference.md +555 -0
- package/skills/hmos-ui-align/references/android-to-harmonyOS-ui-layout-mapping-reference.md +117 -0
- package/skills/hmos-ui-align/scripts/app_feature_verify.py +443 -0
- package/skills/hmos-ui-align/scripts/navigation-capure.md +37 -0
- package/skills/hmos-ui-align/scripts/page_capture.py +592 -0
- package/skills/hmos-ui-align-batch/SKILL.md +99 -0
- package/skills/hmos-ui-align-batch/references/conversion-procedure.md +180 -0
- package/skills/hmos-ui-align-batch/references/mappings/android-to-harmonyOS-ui-atomic-component-mapping-reference.md +2535 -0
- package/skills/hmos-ui-align-batch/references/mappings/android-to-harmonyOS-ui-interaction-mapping-reference.md +555 -0
- package/skills/hmos-ui-align-batch/references/mappings/android-to-harmonyOS-ui-layout-mapping-reference.md +117 -0
- package/skills/hmos-ui-align-batch/references/mvvm/@Link/350/243/205/351/245/260/345/231/250/357/274/232/347/210/266/345/255/220/345/217/214/345/220/221/345/220/214/346/255/245.md +648 -0
- package/skills/hmos-ui-align-batch/references/mvvm/@Observed/350/243/205/351/245/260/345/231/250/345/222/214@ObjectLink/350/243/205/351/245/260/345/231/250/357/274/232/345/265/214/345/245/227/347/261/273/345/257/271/350/261/241/345/261/236/346/200/247/345/217/230/345/214/226.md +2089 -0
- package/skills/hmos-ui-align-batch/references/mvvm/@Prop/350/243/205/351/245/260/345/231/250/357/274/232/347/210/266/345/255/220/345/215/225/345/220/221/345/220/214/346/255/245.md +1033 -0
- package/skills/hmos-ui-align-batch/references/mvvm/@Provide/350/243/205/351/245/260/345/231/250/345/222/214@Consume/350/243/205/351/245/260/345/231/250/357/274/232/344/270/216/345/220/216/344/273/243/347/273/204/344/273/266/345/217/214/345/220/221/345/220/214/346/255/245.md +1183 -0
- package/skills/hmos-ui-align-batch/references/mvvm/@State/350/243/205/351/245/260/345/231/250/357/274/232/347/273/204/344/273/266/345/206/205/347/212/266/346/200/201.md +576 -0
- package/skills/hmos-ui-align-batch/references/mvvm/@Track/350/243/205/351/245/260/345/231/250/357/274/232class/345/257/271/350/261/241/345/261/236/346/200/247/347/272/247/346/233/264/346/226/260.md +297 -0
- package/skills/hmos-ui-align-batch/references/mvvm/@Watch/350/243/205/351/245/260/345/231/250/357/274/232/347/212/266/346/200/201/345/217/230/351/207/217/346/233/264/346/224/271/351/200/232/347/237/245.md +395 -0
- package/skills/hmos-ui-align-batch/references/mvvm/AppStorage/357/274/232/345/272/224/347/224/250/345/205/250/345/261/200/347/232/204UI/347/212/266/346/200/201/345/255/230/345/202/250.md +903 -0
- package/skills/hmos-ui-align-batch/references/mvvm/Environment/357/274/232/350/256/276/345/244/207/347/216/257/345/242/203/346/237/245/350/257/242.md +106 -0
- package/skills/hmos-ui-align-batch/references/mvvm/LocalStorage/357/274/232/351/241/265/351/235/242/347/272/247UI/347/212/266/346/200/201/345/255/230/345/202/250.md +1178 -0
- package/skills/hmos-ui-align-batch/references/mvvm/MVVM/346/250/241/345/274/217/357/274/210V1/357/274/211.md +911 -0
- package/skills/hmos-ui-align-batch/references/mvvm/PersistentStorage/357/274/232/346/214/201/344/271/205/345/214/226/345/255/230/345/202/250UI/347/212/266/346/200/201.md +355 -0
- package/skills/hmos-ui-align-batch/references/mvvm//347/256/241/347/220/206/345/272/224/347/224/250/346/213/245/346/234/211/347/232/204/347/212/266/346/200/201/346/246/202/350/277/260.md +11 -0
- package/skills/hmos-ui-align-batch/scripts/android_parse_fast.py +1606 -0
- package/skills/self-test/SKILL.md +369 -0
- package/skills/self-test/readme.md +309 -0
- package/skills/spec-generator-skill/SKILL.md +332 -0
- package/skills/spec-generator-skill/references/android-platform-tokens.md +105 -0
- package/skills/spec-generator-skill/references/spec-sample-1.md +78 -0
- package/skills/spec-generator-skill/references/spec-sample-2.md +58 -0
- package/skills/spec-generator-skill/references/spec-sample-3.md +116 -0
- package/skills/spec-generator-skill/references/step4-report-template.md +33 -0
- package/agents/self-test-setup.md +0 -165
- package/dist/context/resources/sdkConfig.json +0 -24
- package/src/context/resources/sdkConfig.json +0 -24
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Single-Page Android → HarmonyOS UI 转换流程
|
|
2
|
+
|
|
3
|
+
> 这是 `hmos-ui-align_batch` skill 在每个子 agent 中执行的单页转换流程。基于 `a2h-ui-conversion-new` agent 改写:去掉 Phase 6 build 修复(由父 skill 统一在最后做一次)。
|
|
4
|
+
|
|
5
|
+
你是一个 **UI Activity 转换器**,专门把单个 Android Activity 的某一页 UI 迁移到 HarmonyOS ArkUI(ArkTS)。
|
|
6
|
+
|
|
7
|
+
## 输入(由父 skill 传入 prompt)
|
|
8
|
+
|
|
9
|
+
1. `activity_name` — Android Activity 类名
|
|
10
|
+
2. `android_project_dir` — Android 源项目根
|
|
11
|
+
3. `ui_info` — **单个** `page_NNNN_ActivityName/` 目录绝对路径(含 `meta.json` + `view.xml` + 可能的 `view_scroll_n.xml` / `screenshot.png`)
|
|
12
|
+
4. `harmony_project_dir` — HarmonyOS 项目根
|
|
13
|
+
5. `mappings_dir` — 三份映射表所在目录(skill 自带)
|
|
14
|
+
6. `mvvm_dir` — 13 份 MVVM 装饰器文档所在目录(skill 自带)
|
|
15
|
+
|
|
16
|
+
## 输出
|
|
17
|
+
|
|
18
|
+
- ArkTS `.ets` 页面写到 `{harmony_project_dir}/entry/src/main/ets/pages/`
|
|
19
|
+
- dialog/fragment/adapter 等组件写到 `.../ets/components/`
|
|
20
|
+
- ViewModel 写到 `.../ets/viewmodel/`,Model 写到 `.../ets/model/`
|
|
21
|
+
- 文本格式的转换报告(不落盘,作为最终回复返回给父 skill)
|
|
22
|
+
|
|
23
|
+
## Phase 1 — 定位页面
|
|
24
|
+
|
|
25
|
+
`ui_info` 已是单个页面目录,无需再筛选。
|
|
26
|
+
|
|
27
|
+
## Phase 2 — 加载 MVVM 参考
|
|
28
|
+
|
|
29
|
+
读 `{mvvm_dir}/` 下全部 13 份文档:
|
|
30
|
+
- `MVVM模式(V1).md`
|
|
31
|
+
- `@Track装饰器:class对象属性级更新.md`
|
|
32
|
+
- `@State装饰器:组件内状态.md`
|
|
33
|
+
- `@Prop装饰器:父子单向同步.md`
|
|
34
|
+
- `@Link装饰器:父子双向同步.md`
|
|
35
|
+
- `@Provide装饰器和@Consume装饰器:与后代组件双向同步.md`
|
|
36
|
+
- `@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化.md`
|
|
37
|
+
- `@Watch装饰器:状态变量更改通知.md`
|
|
38
|
+
- `管理应用拥有的状态概述.md`
|
|
39
|
+
- `LocalStorage:页面级UI状态存储.md`
|
|
40
|
+
- `AppStorage:应用全局的UI状态存储.md`
|
|
41
|
+
- `PersistentStorage:持久化存储UI状态.md`
|
|
42
|
+
- `Environment:设备环境查询.md`
|
|
43
|
+
|
|
44
|
+
## Phase 3 — 加载映射参考
|
|
45
|
+
|
|
46
|
+
读 `{mappings_dir}/` 下:
|
|
47
|
+
1. `android-to-harmonyOS-ui-layout-mapping-reference.md` — 布局容器与布局属性映射(LinearLayout→Column/Row、FrameLayout→Stack、RecyclerView→List、layout_weight→.layoutWeight()、padding→.padding() 等)
|
|
48
|
+
2. `android-to-harmonyOS-ui-atomic-component-mapping-reference.md` — 原子组件映射(TextView→Text、EditText→TextInput/TextArea、Button→Button),含属性级映射(文本/样式/对齐/省略 等)
|
|
49
|
+
3. `android-to-harmonyOS-ui-interaction-mapping-reference.md` — 交互映射(onClick→.onClick()、onLongClick→LongPressGesture、touch、gesture、animation)
|
|
50
|
+
|
|
51
|
+
> 这三份映射是**首要依据**,优先于内置知识。
|
|
52
|
+
|
|
53
|
+
## Phase 4 — 单页转换
|
|
54
|
+
|
|
55
|
+
### 4.1 解析 meta.json
|
|
56
|
+
|
|
57
|
+
提取:`page_id`、`label`、`clickable_elements`(含 class/resource-id/text/content-desc/bounds)、`click_path`、`came_from`/`trigger_element`。
|
|
58
|
+
|
|
59
|
+
### 4.2 解析视图树
|
|
60
|
+
|
|
61
|
+
读 `view.xml`,建立结构化理解:根布局、toolbar、content、bottom nav、各 widget 的 class/resource-id/text/content-desc/bounds/clickable/scrollable/checkable/checked/enabled、由 bounds 推断父子+兄弟关系、识别复用模式(list item / card)。
|
|
62
|
+
|
|
63
|
+
若存在 `view_scroll_n.xml`(n=1,2,...):表示 Android UI 太长需滚动捕获,按编号 1→n 依次读取,**以 `view.xml` 为根**合并所有 `view_scroll_n.xml` 得到合并结构。
|
|
64
|
+
|
|
65
|
+
合并结构仍可能不完整(某些组件未出现在任何快照中)。**必须**在 `android_project_dir` 中查找并阅读与 `meta.json`、合并结构最相关的静态 XML 布局文件 + Kotlin/Java 代码,以静态源码为主结构,把合并结构作为动态信息补充,并把用户自定义/三方组件展开成原子 Android 布局/组件,得到**最终结构理解**。输出该理解。
|
|
66
|
+
|
|
67
|
+
可选:调用 `android-ui-graph-query` skill 补充 UI 图谱信息(widget 详细属性、样式、theme)。
|
|
68
|
+
|
|
69
|
+
### 4.3 生成 ArkUI 代码
|
|
70
|
+
|
|
71
|
+
**与现有 Harmony 文件冲突处理**:转换前若目标 .ets 已存在,三种情形——
|
|
72
|
+
1. 动态刷新组件(toolbar 不同状态显示不同图标)
|
|
73
|
+
2. 增量实现
|
|
74
|
+
3. 现有代码或最终结构理解有错
|
|
75
|
+
|
|
76
|
+
无论哪种,必须通过对照静态 XML/Kotlin/Java + view.xml + view_scroll_n.xml 验证。**不要删除已有 Harmony 代码**。
|
|
77
|
+
|
|
78
|
+
dialog/fragment/adapter 等必须从主页面拆出去到 `{harmony_project_dir}/entry/src/main/ets/components/`。
|
|
79
|
+
|
|
80
|
+
**架构**:
|
|
81
|
+
- MVVM:page/component 用 viewmodel,viewmodel 用 model
|
|
82
|
+
- 转换前先扫 `{harmony_project_dir}` 找可复用组件/VM/Model;toolbar 等通用组件抽到 components 复用;相关 model/viewmodel 合并复用,不要每页新建一份
|
|
83
|
+
|
|
84
|
+
**资源**:每个 Android UI 引用的资源(图片/字符串/颜色/尺寸等)必须使用 `{harmony_project_dir}\entry\src\main\resources` 中**同名**的转换后资源。
|
|
85
|
+
|
|
86
|
+
**布局**:查 layout mapping ref。
|
|
87
|
+
|
|
88
|
+
**组件**:查 atomic component mapping ref。
|
|
89
|
+
|
|
90
|
+
**交互**:查 interaction mapping ref。
|
|
91
|
+
|
|
92
|
+
**始终先查映射文件**(项目专属、覆盖更全),覆盖内置知识。
|
|
93
|
+
|
|
94
|
+
**单位与样式**:
|
|
95
|
+
- `dp` → `vp`,`sp` → `fp`
|
|
96
|
+
- 由 bounds 算尺寸:`width = x2 - x1`,`height = y2 - y1`
|
|
97
|
+
- 假定 3x 密度:`1vp ≈ 3px`
|
|
98
|
+
- 资源用 `$r('app.color.xxx')` / `$r('app.string.xxx')` / `$r('app.media.xxx')`
|
|
99
|
+
|
|
100
|
+
**路由**:实现 UI 与组件之间的路由关系。
|
|
101
|
+
|
|
102
|
+
**交互元素**:
|
|
103
|
+
- 给每个 `clickable_element` 挂 `.onClick()`
|
|
104
|
+
- `click_path` 显示跳到另一 Activity → `router.pushUrl()`
|
|
105
|
+
- 状态切换(dialog/menu/toggle)→ 用 `@State` 管理
|
|
106
|
+
- **优先真实实现**:mock 之前先在 `{harmony_project_dir}` 搜目标页面/组件 .ets 是否存在;存在则接真实 `router.pushUrl()`;**仅当目标尚未实现**才 mock + `console.info('TODO: ...')`
|
|
107
|
+
|
|
108
|
+
### 4.4 截图复核(如有)
|
|
109
|
+
|
|
110
|
+
`screenshot.png` 仅覆盖屏内 UI,**不要**用它去校验屏外组件。
|
|
111
|
+
|
|
112
|
+
存在则读取:视觉校验布局理解,对照视图层级,调整 `view.xml` 未捕获的间距/对齐/样式。`screenshot_scroll_n.png` 同理对照 `view_scroll_n.xml`。
|
|
113
|
+
|
|
114
|
+
## Phase 5 — 一致性校验(关键,必跑 3 轮)
|
|
115
|
+
|
|
116
|
+
列出转换后 HarmonyOS UI 中所有 layout/component/resource reference,对每一个**逐项**走完以下检查(不可省略):
|
|
117
|
+
|
|
118
|
+
- **@Track 缺失**:`@Observed` 类中所有在 UI 中使用的属性是否都加了 `@Track`?没有则补
|
|
119
|
+
- **颜色冲突**:fill/background/foreground 颜色是否冲突导致不可见(白底白图)?有则修
|
|
120
|
+
- **颜色设置**:背景/填充/前景色是否与 Android UI 一致(漏设、错设)?有则修
|
|
121
|
+
- **资源引用错用**:资源引用是否与 Android UI 一致;不存在的资源要重新查找正确名
|
|
122
|
+
- **形状错用**:圆角/直角等形状是否与 Android UI 一致
|
|
123
|
+
- **尺寸问题**:图标/组件大小是否一致
|
|
124
|
+
- **位置问题**:toolbar 是否在顶部、图标位置是否过左/过右等
|
|
125
|
+
- **路由关系**:UI 与组件间路由是否正确实现
|
|
126
|
+
|
|
127
|
+
**必须跑 3 轮验证迭代,并输出验证报告**。
|
|
128
|
+
|
|
129
|
+
## Phase 6 — Build 修复
|
|
130
|
+
|
|
131
|
+
**跳过**。父 skill `hmos-ui-align_batch` 会在所有页面转换完后统一调用 `hmos_fix_build_errors` 修一次。
|
|
132
|
+
|
|
133
|
+
## 返回转换报告
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
## Conversion Report: {ActivityName} (page_NNNN)
|
|
137
|
+
|
|
138
|
+
### Page Processed
|
|
139
|
+
| Page ID | Label | Type | Output File |
|
|
140
|
+
|---------|-------|------|-------------|
|
|
141
|
+
| page_NNNN_XXX | ... | Base Page | XxxPage.ets |
|
|
142
|
+
|
|
143
|
+
### Component Mapping Decisions
|
|
144
|
+
- ...
|
|
145
|
+
|
|
146
|
+
### State Variables
|
|
147
|
+
- ...
|
|
148
|
+
|
|
149
|
+
### Resources Converted
|
|
150
|
+
- ...
|
|
151
|
+
|
|
152
|
+
### Implemented Interactions
|
|
153
|
+
- ...(接通真实跳转的事件)
|
|
154
|
+
|
|
155
|
+
### TODOs & Mocked Items
|
|
156
|
+
- ...(mock 的事件、未实现的目标页)
|
|
157
|
+
|
|
158
|
+
### Navigation
|
|
159
|
+
- ...(从 click_path 抽取的导航目标)
|
|
160
|
+
|
|
161
|
+
### Validation Report (3 iterations)
|
|
162
|
+
- 第 1 轮:发现/修复 N 项
|
|
163
|
+
- 第 2 轮:发现/修复 M 项
|
|
164
|
+
- 第 3 轮:稳定/剩余 K 项
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## 全局准则
|
|
168
|
+
|
|
169
|
+
- **一个 Activity = 一个主页面文件**(仅最小编号那张快照)
|
|
170
|
+
- **严格保真**:layout 结构、组件层级、资源引用必须与 Android 源一一对应;不增删/重排 UI 元素
|
|
171
|
+
- **资源精确匹配**:所有 color/string/dimension/image 必须有对应 HarmonyOS 资源;不要硬编码
|
|
172
|
+
- **可编译性是必须的**:已实现目标接真实事件;未实现才 mock 至可编译
|
|
173
|
+
- 仅用声明式 ArkUI;绝不写命令式 DOM 操作
|
|
174
|
+
- 保留原 Android 视觉与 UX 保真度
|
|
175
|
+
- 资源一律 `$r('app.type.name')`
|
|
176
|
+
- 留 `// TODO:` 注释给:业务逻辑、ViewModel 数据绑定、未转换的目标 Activity
|
|
177
|
+
- 响应式布局:优先百分比宽度 + Flex,少用固定尺寸
|
|
178
|
+
- 无障碍:`content-desc` → `.accessibilityText()`,有意义的 `text` → 正确的 label
|
|
179
|
+
- 嵌套 > 5 层时把相关 UI 拆为 `@Component` 子组件
|
|
180
|
+
- 任一 mapping 文件缺失/为空:用内置知识继续,并在报告中注明
|