@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,457 @@
|
|
|
1
|
+
# Android Resource Mapping Rules
|
|
2
|
+
|
|
3
|
+
This document defines how to build the Android resource inventory and the Android ↔ HarmonyOS mapping markdown written to `resource_mapping_path`.
|
|
4
|
+
|
|
5
|
+
## 1. Purpose
|
|
6
|
+
|
|
7
|
+
The standard conversion report explains what the pipeline did. The mapping markdown serves a different purpose: it is an audit-friendly document for humans who need to review Android resources, understand their role, identify likely source ownership, and inspect how each Android resource maps to HarmonyOS output.
|
|
8
|
+
|
|
9
|
+
The mapping markdown MUST be produced for every run.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 2. Two Required Data Sets
|
|
14
|
+
|
|
15
|
+
Build and retain two parallel data sets throughout the pipeline.
|
|
16
|
+
|
|
17
|
+
### 2.1 Android Resource Inventory Records
|
|
18
|
+
|
|
19
|
+
One inventory record per Android resource item.
|
|
20
|
+
|
|
21
|
+
Required fields:
|
|
22
|
+
- `android_resource_path`
|
|
23
|
+
- `android_resource_name`
|
|
24
|
+
- `function`
|
|
25
|
+
- `screens`
|
|
26
|
+
- `source_category`
|
|
27
|
+
- `type_category`
|
|
28
|
+
- `status`
|
|
29
|
+
- `notes`
|
|
30
|
+
|
|
31
|
+
### 2.2 Android ↔ HarmonyOS Mapping Records
|
|
32
|
+
|
|
33
|
+
One mapping record per conversion outcome.
|
|
34
|
+
|
|
35
|
+
Required fields:
|
|
36
|
+
- `android_resource_path`
|
|
37
|
+
- `android_screens`
|
|
38
|
+
- `android_source_category`
|
|
39
|
+
- `android_type_category`
|
|
40
|
+
- `harmony_target`
|
|
41
|
+
- `mapping_kind`
|
|
42
|
+
- `notes`
|
|
43
|
+
|
|
44
|
+
A single Android resource may produce multiple mapping records.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 3. Path Rules
|
|
49
|
+
|
|
50
|
+
### 3.1 File-Based Android Resources
|
|
51
|
+
|
|
52
|
+
Use the Android file path directly.
|
|
53
|
+
|
|
54
|
+
Examples:
|
|
55
|
+
- `app/src/main/res/drawable/home_login_btn.png`
|
|
56
|
+
- `app/src/main/res/mipmap-xxxhdpi/logo.png`
|
|
57
|
+
- `app/src/main/res/xml/file_paths.xml`
|
|
58
|
+
- `feature_home/src/main/res/drawable/bg_header.xml`
|
|
59
|
+
|
|
60
|
+
### 3.2 `values/*.xml` Resources
|
|
61
|
+
|
|
62
|
+
`values` resources MUST be recorded at entry granularity, not only file granularity.
|
|
63
|
+
|
|
64
|
+
Format:
|
|
65
|
+
- `file_path#tag/name`
|
|
66
|
+
|
|
67
|
+
Examples:
|
|
68
|
+
- `app/src/main/res/values/strings.xml#string/app_name`
|
|
69
|
+
- `app/src/main/res/values/colors.xml#color/primary`
|
|
70
|
+
- `app/src/main/res/values/dimens.xml#dimen/page_margin`
|
|
71
|
+
- `app/src/main/res/values/arrays.xml#string-array/province_names`
|
|
72
|
+
- `app/src/main/res/values/plurals.xml#plurals/items_count`
|
|
73
|
+
|
|
74
|
+
### 3.3 Android System Resources
|
|
75
|
+
|
|
76
|
+
Android framework resources do not have a project-local file path. Record the reference itself as the path.
|
|
77
|
+
|
|
78
|
+
Examples:
|
|
79
|
+
- `@android:color/white`
|
|
80
|
+
- `@android:dimen/app_icon_size`
|
|
81
|
+
- `@android:drawable/ic_menu_close`
|
|
82
|
+
|
|
83
|
+
### 3.4 Runtime Remote Resources
|
|
84
|
+
|
|
85
|
+
Remote resources are not Android `res/` files. Record them using code location plus the remote identifier when possible.
|
|
86
|
+
|
|
87
|
+
Examples:
|
|
88
|
+
- `app/src/main/java/com/example/home/HomeBanner.kt:88 -> https://...`
|
|
89
|
+
- `app/src/main/java/com/example/api/BannerDto.kt:35 -> remote_image_url`
|
|
90
|
+
|
|
91
|
+
If only the code location is known, record that and explain the limitation in `notes`.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 4. Resource Name Rules
|
|
96
|
+
|
|
97
|
+
### 4.1 File Resources
|
|
98
|
+
|
|
99
|
+
Use the Android resource name without qualifiers or extension.
|
|
100
|
+
|
|
101
|
+
Examples:
|
|
102
|
+
- `drawable/home_login_btn.png` → `home_login_btn`
|
|
103
|
+
- `mipmap-anydpi-v26/ic_launcher.xml` → `ic_launcher`
|
|
104
|
+
|
|
105
|
+
### 4.2 `values` Resources
|
|
106
|
+
|
|
107
|
+
Use the XML entry's `name` attribute.
|
|
108
|
+
|
|
109
|
+
Examples:
|
|
110
|
+
- `<string name="app_name">` → `app_name`
|
|
111
|
+
- `<color name="primary">` → `primary`
|
|
112
|
+
|
|
113
|
+
### 4.3 System Resources
|
|
114
|
+
|
|
115
|
+
Use the framework resource name after the slash.
|
|
116
|
+
|
|
117
|
+
Examples:
|
|
118
|
+
- `@android:color/white` → `white`
|
|
119
|
+
- `@android:dimen/app_icon_size` → `app_icon_size`
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 5. Function Field Rules
|
|
124
|
+
|
|
125
|
+
The `function` field should be short, concrete, and useful to a reviewer.
|
|
126
|
+
|
|
127
|
+
Recommended inference priority:
|
|
128
|
+
|
|
129
|
+
1. **Explicit semantic name**
|
|
130
|
+
- If the resource name clearly indicates its role, use that.
|
|
131
|
+
- Examples:
|
|
132
|
+
- `logo` → `App logo`
|
|
133
|
+
- `ic_back` → `Back icon`
|
|
134
|
+
- `home_header_bg` → `Home header background`
|
|
135
|
+
|
|
136
|
+
2. **Usage-site evidence**
|
|
137
|
+
- If the resource is referenced from a known screen or component, use that context.
|
|
138
|
+
- Examples:
|
|
139
|
+
- `Login page close icon`
|
|
140
|
+
- `Home tab selected background`
|
|
141
|
+
|
|
142
|
+
3. **Resource type evidence**
|
|
143
|
+
- For XML drawables, infer from root element or role.
|
|
144
|
+
- Examples:
|
|
145
|
+
- `<shape>` → `Shape background`
|
|
146
|
+
- `<selector>` → `State selector drawable`
|
|
147
|
+
- `<layer-list>` → `Layered background`
|
|
148
|
+
|
|
149
|
+
4. **Directory-role evidence**
|
|
150
|
+
- `mipmap` often means launcher or app icon resources.
|
|
151
|
+
- `font` often means app font resource.
|
|
152
|
+
- `xml` often means configuration resource.
|
|
153
|
+
|
|
154
|
+
5. **Conservative fallback**
|
|
155
|
+
- If the exact role is uncertain, do not invent specifics.
|
|
156
|
+
- Examples:
|
|
157
|
+
- `Image resource (inferred from filename)`
|
|
158
|
+
- `Color resource used by UI styling`
|
|
159
|
+
- `Configuration XML resource`
|
|
160
|
+
|
|
161
|
+
If the function is inferred rather than certain, mention the evidence in `notes`.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 6. Screen Attribution Rules
|
|
166
|
+
|
|
167
|
+
The `screens` field identifies which Android screen(s) use the resource.
|
|
168
|
+
|
|
169
|
+
This is a best-effort static analysis field. Use evidence; do not fabricate certainty.
|
|
170
|
+
|
|
171
|
+
### 6.1 Screen Candidates
|
|
172
|
+
|
|
173
|
+
Build the candidate screen set from:
|
|
174
|
+
- Activities
|
|
175
|
+
- Fragments
|
|
176
|
+
- Compose screen / page / route files
|
|
177
|
+
- Navigation graph destinations
|
|
178
|
+
- Launcher entry activity
|
|
179
|
+
|
|
180
|
+
### 6.2 Direct Reference Rule
|
|
181
|
+
|
|
182
|
+
If a screen file directly references:
|
|
183
|
+
- `R.drawable.xxx`
|
|
184
|
+
- `R.mipmap.xxx`
|
|
185
|
+
- `R.string.xxx`
|
|
186
|
+
- `R.color.xxx`
|
|
187
|
+
- `R.font.xxx`
|
|
188
|
+
- `R.xml.xxx`
|
|
189
|
+
|
|
190
|
+
then attribute the resource to that screen.
|
|
191
|
+
|
|
192
|
+
### 6.3 Layout-Indirection Rule
|
|
193
|
+
|
|
194
|
+
If:
|
|
195
|
+
- a screen uses a layout file, and
|
|
196
|
+
- that layout file references resources,
|
|
197
|
+
|
|
198
|
+
then attribute those resources to that screen.
|
|
199
|
+
|
|
200
|
+
### 6.4 Shared-Component Rule
|
|
201
|
+
|
|
202
|
+
If a shared component references a resource and that component is used by multiple screens:
|
|
203
|
+
- record all known screens, or
|
|
204
|
+
- use `Common` when the list is too broad to be helpful.
|
|
205
|
+
|
|
206
|
+
### 6.5 Global-App Rule
|
|
207
|
+
|
|
208
|
+
Use one of the following fixed labels where appropriate:
|
|
209
|
+
- `Launcher` — launcher icon, round icon, adaptive icon
|
|
210
|
+
- `Global` — app-wide theme or identity resource
|
|
211
|
+
- `Common` — shared across many screens
|
|
212
|
+
- `Unknown` — insufficient evidence
|
|
213
|
+
|
|
214
|
+
### 6.6 Output Format
|
|
215
|
+
|
|
216
|
+
The `screens` field may contain:
|
|
217
|
+
- a single screen, e.g. `HomeScreen`
|
|
218
|
+
- a comma-separated list, e.g. `HomeScreen, LoginScreen`
|
|
219
|
+
- one of the labels: `Launcher`, `Global`, `Common`, `Unknown`
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 7. Source Category Rules
|
|
224
|
+
|
|
225
|
+
The allowed source categories are:
|
|
226
|
+
- `应用自身资源`
|
|
227
|
+
- `项目内模块资源`
|
|
228
|
+
- `第三方库资源`
|
|
229
|
+
- `Android 系统资源`
|
|
230
|
+
- `运行时远程资源`
|
|
231
|
+
|
|
232
|
+
### 7.1 应用自身资源
|
|
233
|
+
|
|
234
|
+
Use when the resource is confirmed to come from the app module itself.
|
|
235
|
+
|
|
236
|
+
Typical evidence:
|
|
237
|
+
- path under `app/src/.../res`
|
|
238
|
+
- path under the main application module
|
|
239
|
+
- source `res/` fallback found it directly in the app module
|
|
240
|
+
|
|
241
|
+
### 7.2 项目内模块资源
|
|
242
|
+
|
|
243
|
+
Use when the resource comes from another local module in the same Android project.
|
|
244
|
+
|
|
245
|
+
Typical evidence:
|
|
246
|
+
- path under another local module such as `common/src/.../res`, `feature_xxx/src/.../res`
|
|
247
|
+
- local Gradle project dependency indicates the module belongs to the same repository
|
|
248
|
+
|
|
249
|
+
### 7.3 第三方库资源
|
|
250
|
+
|
|
251
|
+
Use when the resource likely comes from an external dependency.
|
|
252
|
+
|
|
253
|
+
Typical evidence:
|
|
254
|
+
- resource exists only in the decompiled APK, not in project source modules
|
|
255
|
+
- resource prefix matches common library conventions such as `abc_*`, `mtrl_*`, `design_*`, `material_*`
|
|
256
|
+
- build dependencies indicate a matching library
|
|
257
|
+
|
|
258
|
+
If the category is inferred, say so in `notes`.
|
|
259
|
+
|
|
260
|
+
### 7.4 Android 系统资源
|
|
261
|
+
|
|
262
|
+
Use when the reference starts with `@android:`.
|
|
263
|
+
|
|
264
|
+
### 7.5 运行时远程资源
|
|
265
|
+
|
|
266
|
+
Use when the asset is not packaged in `res/` and is instead fetched or constructed at runtime.
|
|
267
|
+
|
|
268
|
+
Typical evidence:
|
|
269
|
+
- URL-based image loading
|
|
270
|
+
- server-driven icon/image fields
|
|
271
|
+
- WebView / HTML / remote content assets
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 8. Type Category Rules
|
|
276
|
+
|
|
277
|
+
The primary required categories are:
|
|
278
|
+
- `drawable`
|
|
279
|
+
- `mipmap`
|
|
280
|
+
- `layout`
|
|
281
|
+
- `values`
|
|
282
|
+
- `xml`
|
|
283
|
+
- `font`
|
|
284
|
+
|
|
285
|
+
For required rows that do not originate from a concrete Android resource directory — such as runtime remote resources, resolved Android system references, and placeholder outputs created only to satisfy HarmonyOS references — normalize them into the closest review-friendly category instead of inventing a new top-level type category. In practice:
|
|
286
|
+
- value-like references (`string`, `color`, `dimen`, `integer`, `bool`, `array`, `plurals`) should use `values`
|
|
287
|
+
- runtime remote resources should use `xml` unless there is stronger evidence they behave like media assets
|
|
288
|
+
- placeholder media outputs should use `drawable`
|
|
289
|
+
|
|
290
|
+
### 8.1 Normalization Rule
|
|
291
|
+
|
|
292
|
+
For qualified directories such as `drawable-hdpi`, `mipmap-anydpi-v26`, `values-zh-rCN`, strip qualifiers and record the base type.
|
|
293
|
+
|
|
294
|
+
Examples:
|
|
295
|
+
- `drawable-hdpi` → `drawable`
|
|
296
|
+
- `mipmap-anydpi-v26` → `mipmap`
|
|
297
|
+
- `values-night` → `values`
|
|
298
|
+
|
|
299
|
+
### 8.2 `values` Rule
|
|
300
|
+
|
|
301
|
+
Even though `values/*.xml` entries have different subtypes (`string`, `color`, `dimen`, etc.), the required `type_category` remains `values`.
|
|
302
|
+
|
|
303
|
+
### 8.3 Other Android Types
|
|
304
|
+
|
|
305
|
+
If the original Android type is not one of the six required categories (`raw`, `menu`, `anim`, `animator`, `color`, etc.), do NOT mislabel it. Use:
|
|
306
|
+
- the closest required category only if it is truly correct, otherwise
|
|
307
|
+
- keep the row in scope and explain the original Android type in `notes`
|
|
308
|
+
|
|
309
|
+
Recommended fallback in `notes`:
|
|
310
|
+
- `Original Android type: raw`
|
|
311
|
+
- `Original Android type: menu`
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## 9. Mapping Kind Rules
|
|
316
|
+
|
|
317
|
+
Suggested `mapping_kind` values:
|
|
318
|
+
- `direct copy`
|
|
319
|
+
- `rename`
|
|
320
|
+
- `svg conversion`
|
|
321
|
+
- `layered-image conversion`
|
|
322
|
+
- `generated media`
|
|
323
|
+
- `merged into json`
|
|
324
|
+
- `unmappable`
|
|
325
|
+
- `fallback applied`
|
|
326
|
+
- `placeholder created`
|
|
327
|
+
- `system resource resolved`
|
|
328
|
+
- `remote resource (no local target)`
|
|
329
|
+
|
|
330
|
+
Use the simplest accurate label.
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 10. One-to-One, One-to-Many, and Many-to-One Handling
|
|
335
|
+
|
|
336
|
+
### 10.1 One-to-One
|
|
337
|
+
|
|
338
|
+
Example:
|
|
339
|
+
- `res/drawable/home_login_btn.png` → `entry/src/main/resources/base/media/home_login_btn.png`
|
|
340
|
+
|
|
341
|
+
Emit one mapping row.
|
|
342
|
+
|
|
343
|
+
### 10.2 One-to-Many
|
|
344
|
+
|
|
345
|
+
Example: adaptive icon XML may produce:
|
|
346
|
+
- layered-image JSON
|
|
347
|
+
- generated solid-color PNG background
|
|
348
|
+
|
|
349
|
+
Emit multiple mapping rows that share the same Android resource path.
|
|
350
|
+
|
|
351
|
+
### 10.3 Many-to-One
|
|
352
|
+
|
|
353
|
+
Example: multiple Android `values` files merge into one Harmony JSON file.
|
|
354
|
+
|
|
355
|
+
Still emit one mapping row per Android source entry.
|
|
356
|
+
|
|
357
|
+
Examples:
|
|
358
|
+
- `res/values/strings.xml#string/app_name` → `resources/base/element/string.json#app_name`
|
|
359
|
+
- `res/values/app_strings.xml#string/login_title` → `resources/base/element/string.json#login_title`
|
|
360
|
+
|
|
361
|
+
### 10.4 No Harmony Target
|
|
362
|
+
|
|
363
|
+
When there is no valid Harmony target, use:
|
|
364
|
+
- `harmony_target = N/A`
|
|
365
|
+
|
|
366
|
+
And explain the reason in `notes`.
|
|
367
|
+
|
|
368
|
+
Examples:
|
|
369
|
+
- layout XML has no direct ArkUI equivalent
|
|
370
|
+
- remote resource is runtime-only
|
|
371
|
+
- unresolved third-party resource had no extracted target
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## 11. Required Markdown Output Structure
|
|
376
|
+
|
|
377
|
+
The markdown written to `resource_mapping_path` MUST contain the following sections.
|
|
378
|
+
|
|
379
|
+
### 11.1 Title
|
|
380
|
+
|
|
381
|
+
```md
|
|
382
|
+
# Android Resources ↔ HarmonyOS Resources Mapping
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### 11.2 Metadata
|
|
386
|
+
|
|
387
|
+
Include bullets for:
|
|
388
|
+
- Android project path
|
|
389
|
+
- HarmonyOS project output path
|
|
390
|
+
- Resource source
|
|
391
|
+
- Resource source path
|
|
392
|
+
- Build result
|
|
393
|
+
- Generation timestamp
|
|
394
|
+
|
|
395
|
+
### 11.3 Android Resource Inventory
|
|
396
|
+
|
|
397
|
+
Use a markdown table with at least these columns:
|
|
398
|
+
- `Android Resource Path`
|
|
399
|
+
- `Resource Name`
|
|
400
|
+
- `Function`
|
|
401
|
+
- `Screen(s)`
|
|
402
|
+
- `Source Category`
|
|
403
|
+
- `Type Category`
|
|
404
|
+
- `Status`
|
|
405
|
+
- `Notes`
|
|
406
|
+
|
|
407
|
+
### 11.4 Android → HarmonyOS Mapping Details
|
|
408
|
+
|
|
409
|
+
Use a markdown table with at least these columns:
|
|
410
|
+
- `Android Resource Path`
|
|
411
|
+
- `Android Screen(s)`
|
|
412
|
+
- `Android Source Category`
|
|
413
|
+
- `Android Type Category`
|
|
414
|
+
- `HarmonyOS Target`
|
|
415
|
+
- `Mapping Kind`
|
|
416
|
+
- `Notes`
|
|
417
|
+
|
|
418
|
+
Every mapping row MUST include the Android-side screen/source/type fields.
|
|
419
|
+
|
|
420
|
+
### 11.5 Unmapped / Unmappable / System / Remote Summary
|
|
421
|
+
|
|
422
|
+
Include a compact summary table or grouped bullets covering:
|
|
423
|
+
- resources with no direct HarmonyOS equivalent
|
|
424
|
+
- Android framework resources
|
|
425
|
+
- library-only resources inferred from dependencies or APK
|
|
426
|
+
- runtime remote resources
|
|
427
|
+
|
|
428
|
+
### 11.6 Quick Findings
|
|
429
|
+
|
|
430
|
+
Provide short bullets highlighting review-relevant findings, such as:
|
|
431
|
+
- launcher icons coming from `mipmap`
|
|
432
|
+
- probable third-party library assets such as `abc_*` / `mtrl_*`
|
|
433
|
+
- resources found only in the decompiled APK
|
|
434
|
+
- likely causes of icon or logo mismatches
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## 12. Required Fallback Labels
|
|
439
|
+
|
|
440
|
+
Never leave required fields blank.
|
|
441
|
+
|
|
442
|
+
Use these fallback values where necessary:
|
|
443
|
+
- `screens` → `Unknown`
|
|
444
|
+
- `source_category` → best-evidence category; if still unclear, use `第三方库资源(推断)` or explain uncertainty in `notes`
|
|
445
|
+
- `type_category` → base Android type if valid, otherwise use the closest valid category only if correct and explain the original type in `notes`
|
|
446
|
+
- `harmony_target` → `N/A`
|
|
447
|
+
- `function` → conservative descriptive fallback
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
## 13. Hard Requirements
|
|
452
|
+
|
|
453
|
+
- Never silently omit an Android resource that the pipeline observed.
|
|
454
|
+
- `values` resources must be recorded at entry granularity.
|
|
455
|
+
- Mapping rows must preserve Android-side screen/source/type metadata.
|
|
456
|
+
- Unmappable, library-only, system, and remote resources must still appear in the mapping markdown.
|
|
457
|
+
- If a judgment is inferred rather than proven, say so in `notes`.
|