expo-harmony-toolkit 1.7.2 → 1.7.3
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.en.md +20 -9
- package/README.md +22 -11
- package/build/core/autolinking.d.ts +10 -0
- package/build/core/autolinking.js +421 -0
- package/build/core/build/commands.d.ts +19 -0
- package/build/core/build/commands.js +61 -0
- package/build/core/build/compatibilityShims.d.ts +1 -0
- package/build/core/build/compatibilityShims.js +272 -0
- package/build/core/build/localHar.d.ts +13 -0
- package/build/core/build/localHar.js +337 -0
- package/build/core/build/reporting.d.ts +19 -0
- package/build/core/build/reporting.js +67 -0
- package/build/core/build/rnohCompatibility.d.ts +1 -0
- package/build/core/build/rnohCompatibility.js +38 -0
- package/build/core/build.d.ts +4 -12
- package/build/core/build.js +70 -762
- package/build/core/constants.d.ts +2 -1
- package/build/core/constants.js +3 -2
- package/build/core/dependencyInspection.d.ts +2 -0
- package/build/core/dependencyInspection.js +112 -0
- package/build/core/env.js +1 -1
- package/build/core/report.js +33 -10
- package/build/core/signing.d.ts +2 -0
- package/build/core/signing.js +30 -0
- package/build/core/template/capabilityRegistry.d.ts +9 -0
- package/build/core/template/capabilityRegistry.js +84 -0
- package/build/core/template/expoModulesCoreShim.d.ts +2 -0
- package/build/core/template/expoModulesCoreShim.js +279 -0
- package/build/core/template/metro.d.ts +2 -0
- package/build/core/template/metro.js +213 -0
- package/build/core/template/nativeFiles.d.ts +8 -0
- package/build/core/template/nativeFiles.js +333 -0
- package/build/core/template/renderers/camera.d.ts +4 -0
- package/build/core/template/renderers/camera.js +612 -0
- package/build/core/template/renderers/fileSystem.d.ts +4 -0
- package/build/core/template/renderers/fileSystem.js +814 -0
- package/build/core/template/renderers/imagePicker.d.ts +4 -0
- package/build/core/template/renderers/imagePicker.js +753 -0
- package/build/core/template/renderers/location.d.ts +4 -0
- package/build/core/template/renderers/location.js +836 -0
- package/build/core/template/runtimeShims.d.ts +2 -0
- package/build/core/template/runtimeShims.js +192 -0
- package/build/core/template/support.d.ts +11 -0
- package/build/core/template/support.js +108 -0
- package/build/core/template.d.ts +2 -6
- package/build/core/template.js +40 -4453
- package/build/data/capabilities.js +21 -4
- package/build/data/dependencyCatalog.js +10 -0
- package/build/data/publicDocs.d.ts +11 -0
- package/build/data/publicDocs.js +28 -0
- package/build/data/validatedMatrices.js +9 -1
- package/build/docs/render.d.ts +9 -0
- package/build/docs/render.js +248 -0
- package/build/types.d.ts +12 -0
- package/docs/cli-build.md +1 -1
- package/docs/npm-release.md +1 -0
- package/docs/official-app-shell-sample.md +2 -1
- package/docs/official-minimal-sample.md +2 -1
- package/docs/official-native-capabilities-sample.md +3 -2
- package/docs/official-ui-stack-sample.md +2 -1
- package/docs/signing-and-release.md +3 -0
- package/docs/support-matrix.md +34 -9
- package/package.json +13 -5
- package/docs/v1.5.1-acceptance.md +0 -385
- package/docs/v1.6.0-acceptance.md +0 -193
- package/docs/v1.7.0-acceptance.md +0 -111
- package/docs/v1.7.1-acceptance.md +0 -111
- package/docs/v1.7.2-acceptance.md +0 -37
package/docs/support-matrix.md
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
- `supportTier` 表示公开承诺层级
|
|
6
6
|
- `runtimeMode` 表示当前运行时接入形态:`shim`、`adapter`、`verified`
|
|
7
7
|
- `evidence` 表示距离 verified 还缺哪些证据格
|
|
8
|
+
- `evidenceSource` 表示每个证据格来自自动化、人工记录,还是当前无证据
|
|
8
9
|
|
|
9
10
|
`doctor --strict` 继续只代表 `verified`。
|
|
10
11
|
|
|
@@ -12,6 +13,7 @@
|
|
|
12
13
|
|
|
13
14
|
唯一 `verified` 矩阵仍是 `expo55-rnoh082-ui-stack`。
|
|
14
15
|
|
|
16
|
+
<!-- GENERATED:support-matrix-verified-matrix:start -->
|
|
15
17
|
| 项目 | 要求 |
|
|
16
18
|
| --- | --- |
|
|
17
19
|
| Expo SDK | `55` |
|
|
@@ -21,9 +23,10 @@
|
|
|
21
23
|
| `@react-native-oh/react-native-harmony-cli` | `0.82.18` |
|
|
22
24
|
| `@react-native-community/cli` | `20.x` |
|
|
23
25
|
| `metro` | `0.83.x` |
|
|
24
|
-
| App Shell 依赖 | `expo-router` `
|
|
26
|
+
| App Shell 依赖 | `expo-router` `55.x`、`expo-linking` `55.x`、`expo-constants` `55.x`、`@expo/metro-runtime` `55.x`、`react-dom` `19.1.1` |
|
|
25
27
|
| UI stack 依赖 | `react-native-reanimated` `3.6.0`、`react-native-svg` `15.0.0` |
|
|
26
28
|
| 原生标识 | 至少设置 `android.package` 或 `ios.bundleIdentifier` |
|
|
29
|
+
<!-- GENERATED:support-matrix-verified-matrix:end -->
|
|
27
30
|
|
|
28
31
|
## Support Tiers
|
|
29
32
|
|
|
@@ -36,26 +39,31 @@
|
|
|
36
39
|
|
|
37
40
|
## Verified Allowlist
|
|
38
41
|
|
|
42
|
+
<!-- GENERATED:support-matrix-verified-allowlist:start -->
|
|
39
43
|
- `expo`
|
|
44
|
+
- `@expo/metro-runtime`
|
|
40
45
|
- `expo-constants`
|
|
41
46
|
- `expo-linking`
|
|
42
47
|
- `expo-router`
|
|
43
48
|
- `react`
|
|
49
|
+
- `react-dom`
|
|
44
50
|
- `react-native`
|
|
45
51
|
- `expo-status-bar`
|
|
46
52
|
- `@babel/runtime`
|
|
47
53
|
- `@react-native-community/cli`
|
|
48
54
|
- `metro`
|
|
49
|
-
- `expo-harmony-toolkit`
|
|
50
55
|
- `@react-native-oh/react-native-harmony`
|
|
51
56
|
- `@react-native-oh/react-native-harmony-cli`
|
|
57
|
+
- `expo-harmony-toolkit`
|
|
52
58
|
- `react-native-reanimated`
|
|
53
|
-
- `react-native-svg`
|
|
54
59
|
- `@react-native-oh-tpl/react-native-reanimated`
|
|
60
|
+
- `react-native-svg`
|
|
55
61
|
- `@react-native-oh-tpl/react-native-svg`
|
|
62
|
+
<!-- GENERATED:support-matrix-verified-allowlist:end -->
|
|
56
63
|
|
|
57
64
|
## Capability Telemetry
|
|
58
65
|
|
|
66
|
+
<!-- GENERATED:support-matrix-capability-telemetry:start -->
|
|
59
67
|
所有 capability 从现在开始都同时公开:
|
|
60
68
|
|
|
61
69
|
- `supportTier`
|
|
@@ -64,12 +72,17 @@
|
|
|
64
72
|
- `evidence.debugBuild`
|
|
65
73
|
- `evidence.device`
|
|
66
74
|
- `evidence.release`
|
|
75
|
+
- `evidenceSource.bundle`
|
|
76
|
+
- `evidenceSource.debugBuild`
|
|
77
|
+
- `evidenceSource.device`
|
|
78
|
+
- `evidenceSource.release`
|
|
67
79
|
|
|
68
80
|
判读规则:
|
|
69
81
|
|
|
70
82
|
- `runtimeMode=shim`:说明当前还在桥接或占位阶段,即使 bundle / debug build 已完成,也不应宣称 verified
|
|
71
83
|
- `runtimeMode=adapter`:说明已经进入真实适配路径,但仍缺少某些验收证据
|
|
72
84
|
- `runtimeMode=verified`:说明能力已进入正式承诺,且证据闭环完成
|
|
85
|
+
<!-- GENERATED:support-matrix-capability-telemetry:end -->
|
|
73
86
|
|
|
74
87
|
为了避免把“只差真机”与“当前子 API 还没实现到位”混在一起,`v1.7.x` 文档额外使用以下标记:
|
|
75
88
|
|
|
@@ -78,17 +91,20 @@
|
|
|
78
91
|
|
|
79
92
|
## Preview 能力
|
|
80
93
|
|
|
94
|
+
<!-- GENERATED:support-matrix-preview-capabilities:start -->
|
|
81
95
|
| Expo 能力 | 当前层级 | runtimeMode | evidence | Harmony 依赖方向 | 受管权限 | 官方 sample route |
|
|
82
96
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
83
|
-
| `expo-file-system` | `preview` | `adapter` | `bundle=yes, debugBuild=yes, device=yes, release=no` |
|
|
84
|
-
| `expo-image-picker` | `preview` | `adapter` | `bundle=yes, debugBuild=yes, device=yes, release=no` |
|
|
85
|
-
| `expo-location` | `preview` | `adapter` | `bundle=yes, debugBuild=yes, device=yes, release=no` |
|
|
86
|
-
| `expo-camera` | `preview` | `adapter` | `bundle=yes, debugBuild=yes, device=yes, release=no` |
|
|
97
|
+
| `expo-file-system` | `preview` | `adapter` | `bundle=yes[automated], debugBuild=yes[automated], device=yes[manual-doc], release=no[none]` | react-native-fs | 无新增必需权限 | `/file-system` |
|
|
98
|
+
| `expo-image-picker` | `preview` | `adapter` | `bundle=yes[automated], debugBuild=yes[automated], device=yes[manual-doc], release=no[none]` | react-native-image-picker, react-native-permissions | ohos.permission.CAMERA、ohos.permission.MICROPHONE、ohos.permission.READ_IMAGEVIDEO | `/image-picker` |
|
|
99
|
+
| `expo-location` | `preview` | `adapter` | `bundle=yes[automated], debugBuild=yes[automated], device=yes[manual-doc], release=no[none]` | @react-native-community/geolocation, react-native-permissions | ohos.permission.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND、ohos.permission.ACCELEROMETER | `/location` |
|
|
100
|
+
| `expo-camera` | `preview` | `adapter` | `bundle=yes[automated], debugBuild=yes[automated], device=yes[manual-doc], release=no[none]` | react-native-camera-kit, react-native-permissions | ohos.permission.CAMERA、ohos.permission.MICROPHONE | `/camera` |
|
|
101
|
+
<!-- GENERATED:support-matrix-preview-capabilities:end -->
|
|
87
102
|
|
|
88
103
|
说明:
|
|
89
104
|
|
|
90
105
|
- 当前四项 preview capability 都已经完成 preview baseline 的 bundle / debug build / route walkthrough
|
|
91
|
-
- 四项 preview capability 都已经进入 `adapter` 路径;`device=yes`
|
|
106
|
+
- 四项 preview capability 都已经进入 `adapter` 路径;`device=yes[manual-doc]` 只表示已有人工设备验收记录,仍不代表 verified 或 release-ready
|
|
107
|
+
- 当前 preview baseline 的默认 evidenceSource 固定为:`bundle/debugBuild=automated`、`device=manual-doc`、`release=none`
|
|
92
108
|
- `expo-file-system`
|
|
93
109
|
- `🟡` 当前主路径是 UTF-8/base64 sandbox I/O、append/partial read、`getInfoAsync({ md5: true })` 与 `downloadAsync`
|
|
94
110
|
- `expo-image-picker`
|
|
@@ -107,6 +123,7 @@
|
|
|
107
123
|
|
|
108
124
|
## UI Stack 配对规则
|
|
109
125
|
|
|
126
|
+
<!-- GENERATED:support-matrix-ui-stack:start -->
|
|
110
127
|
canonical 包与 Harmony adapter 包固定为双向强制:
|
|
111
128
|
|
|
112
129
|
- `react-native-reanimated` ↔ `@react-native-oh-tpl/react-native-reanimated`
|
|
@@ -123,6 +140,7 @@ canonical 包与 Harmony adapter 包固定为双向强制:
|
|
|
123
140
|
|
|
124
141
|
- `@react-native-oh-tpl/react-native-reanimated`: `github:react-native-oh-library/react-native-harmony-reanimated#9fdbe676209937383907be0592291223c6ca7ad7&path:react-native-harmony-reanimated`
|
|
125
142
|
- `@react-native-oh-tpl/react-native-svg`: `github:react-native-oh-library/react-native-harmony-svg#97c31d2f72559931d62fa84a9c86e86d343753d3&path:react-native-harmony-svg`
|
|
143
|
+
<!-- GENERATED:support-matrix-ui-stack:end -->
|
|
126
144
|
|
|
127
145
|
## `doctor`
|
|
128
146
|
|
|
@@ -147,10 +165,15 @@ expo-harmony doctor --project-root /path/to/app --target-tier preview
|
|
|
147
165
|
- `capabilities[].evidence.debugBuild`
|
|
148
166
|
- `capabilities[].evidence.device`
|
|
149
167
|
- `capabilities[].evidence.release`
|
|
168
|
+
- `capabilities[].evidenceSource.bundle`
|
|
169
|
+
- `capabilities[].evidenceSource.debugBuild`
|
|
170
|
+
- `capabilities[].evidenceSource.device`
|
|
171
|
+
- `capabilities[].evidenceSource.release`
|
|
150
172
|
|
|
151
173
|
判读方式:
|
|
152
174
|
|
|
153
175
|
- 任一 `evidence.* = false`,表示晋升到 verified 前仍缺证据
|
|
176
|
+
- `evidenceSource.device = manual-doc`,表示该证据来自人工验收记录,不应被表述成自动化设备验证
|
|
154
177
|
- `runtimeMode !== verified`,表示即使已有部分证据,也仍不属于正式承诺
|
|
155
178
|
|
|
156
179
|
当前公开阻断 issue code 继续包括:
|
|
@@ -184,13 +207,14 @@ toolkit 受管的核心产物仍包括:
|
|
|
184
207
|
|
|
185
208
|
- `entry/src/main/module.json5` 的 `requestPermissions` 由 toolkit 根据已启用能力自动补齐
|
|
186
209
|
- preview / experimental 能力的 Metro import path 通过 `.expo-harmony/shims/<package>` 接管
|
|
187
|
-
- `toolkit-config.json` 会记录 capability 的 `runtimeMode` 与 `
|
|
210
|
+
- `toolkit-config.json` 会记录 capability 的 `runtimeMode`、`evidence` 与 `evidenceSource`
|
|
188
211
|
- verified UI stack 依赖继续走现有 autolinking + `.har` 管理逻辑
|
|
189
212
|
|
|
190
213
|
## Release Tracks
|
|
191
214
|
|
|
192
215
|
从 `v1.8` 开始,发布节奏按双轨设计:
|
|
193
216
|
|
|
217
|
+
<!-- GENERATED:support-matrix-release-tracks:start -->
|
|
194
218
|
- `latest`
|
|
195
219
|
- 只承接完整验收的 `verified` 能力
|
|
196
220
|
- 只允许 verified sample / gate 作为发布依据
|
|
@@ -198,6 +222,7 @@ toolkit 受管的核心产物仍包括:
|
|
|
198
222
|
- 承接 preview fast track
|
|
199
223
|
- 必须至少通过 preview sample、bundle、debug build gate
|
|
200
224
|
- 不得被描述为 verified 或 release-ready
|
|
225
|
+
<!-- GENERATED:support-matrix-release-tracks:end -->
|
|
201
226
|
|
|
202
227
|
## Capability Promotion Gate
|
|
203
228
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-harmony-toolkit",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.3",
|
|
4
4
|
"description": "面向 Managed/CNG Expo 项目的 HarmonyOS 迁移、准入检查与 UI-stack 构建工具链",
|
|
5
5
|
"main": "app.plugin.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -23,12 +23,21 @@
|
|
|
23
23
|
"README.md",
|
|
24
24
|
"README.en.md",
|
|
25
25
|
"LICENSE",
|
|
26
|
-
"docs"
|
|
26
|
+
"docs/cli-build.md",
|
|
27
|
+
"docs/npm-release.md",
|
|
28
|
+
"docs/official-app-shell-sample.md",
|
|
29
|
+
"docs/official-minimal-sample.md",
|
|
30
|
+
"docs/official-native-capabilities-sample.md",
|
|
31
|
+
"docs/official-ui-stack-sample.md",
|
|
32
|
+
"docs/roadmap.md",
|
|
33
|
+
"docs/signing-and-release.md",
|
|
34
|
+
"docs/support-matrix.md"
|
|
27
35
|
],
|
|
28
36
|
"scripts": {
|
|
29
|
-
"build": "tsc --project tsconfig.json",
|
|
37
|
+
"build": "rm -rf build && tsc --project tsconfig.json",
|
|
30
38
|
"clean": "rm -rf build coverage",
|
|
31
|
-
"
|
|
39
|
+
"docs:sync": "node ./scripts/update-generated-docs.js",
|
|
40
|
+
"pack:check": "node ./scripts/pack.js --dry-run --json",
|
|
32
41
|
"release:check": "node ./scripts/release-check.js",
|
|
33
42
|
"test": "jest --runInBand",
|
|
34
43
|
"prepare": "pnpm build"
|
|
@@ -77,7 +86,6 @@
|
|
|
77
86
|
"@types/jest": "^30.0.0",
|
|
78
87
|
"@types/node": "^24.5.2",
|
|
79
88
|
"@types/semver": "^7.7.1",
|
|
80
|
-
"expo": "^55.0.8",
|
|
81
89
|
"jest": "^30.2.0",
|
|
82
90
|
"ts-jest": "^29.4.4",
|
|
83
91
|
"typescript": "^5.9.2"
|
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
# v1.5.1 验收记录
|
|
2
|
-
|
|
3
|
-
日期:2026-03-27
|
|
4
|
-
|
|
5
|
-
基线:
|
|
6
|
-
|
|
7
|
-
- 仓库:`Expo-Harmony-Toolkit`
|
|
8
|
-
- tag:`v1.5.1`
|
|
9
|
-
- commit:`1a51b0c10f08f5228c2918da3d7722d29c8be95b`
|
|
10
|
-
|
|
11
|
-
## 结论
|
|
12
|
-
|
|
13
|
-
这次 `v1.5.1` 收尾验收只完成了部分目标。
|
|
14
|
-
|
|
15
|
-
- 已确认 npm 包与 Git tag 对齐,`official-ui-stack-sample` 的 `doctor -> init -> sync-template -> bundle -> env` 链路可跑通。
|
|
16
|
-
- `Build Debug Hap(s)` 仍未通过。阻塞点已经从本地工具链缺失与 `ohpm` 无法安装 `.har`,收敛到 ArkTS 编译阶段的 adapter / RNOH 不匹配。
|
|
17
|
-
- 因为没有产出可安装的 debug HAP,所以本次未完成设备侧 SVG、gesture 动画、动画后路由跳转的最终人工运行时验收。
|
|
18
|
-
- npm 已发布 README 的原文内容可读性正常;npm 网页端的实时渲染未能在本次自动化环境中完成最终可视确认。
|
|
19
|
-
|
|
20
|
-
## 环境
|
|
21
|
-
|
|
22
|
-
- macOS `26.3` (`25D125`)
|
|
23
|
-
- Node `v20.19.6`
|
|
24
|
-
- pnpm `10.32.1`
|
|
25
|
-
- npm `10.8.2`
|
|
26
|
-
- DevEco Studio:`/Applications/DevEco-Studio.app`
|
|
27
|
-
- Harmony SDK:`/Applications/DevEco-Studio.app/Contents/sdk`
|
|
28
|
-
- Java:`/usr/bin/java`
|
|
29
|
-
- ohpm:`/Applications/DevEco-Studio.app/Contents/tools/ohpm/bin/ohpm`
|
|
30
|
-
- hvigor:`/Applications/DevEco-Studio.app/Contents/tools/hvigor/bin/hvigorw.js`
|
|
31
|
-
- hdc:`/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains/hdc`
|
|
32
|
-
- 在线目标:`127.0.0.1:5555`
|
|
33
|
-
|
|
34
|
-
## 命令结果
|
|
35
|
-
|
|
36
|
-
### 1. Sample 安装
|
|
37
|
-
|
|
38
|
-
执行:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
cd examples/official-ui-stack-sample
|
|
42
|
-
pnpm install --ignore-scripts
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
结果:
|
|
46
|
-
|
|
47
|
-
- 成功。
|
|
48
|
-
- 继续沿用当前仓库推荐的 `--ignore-scripts` 安装方式。
|
|
49
|
-
|
|
50
|
-
### 2. CLI 验证
|
|
51
|
-
|
|
52
|
-
执行:
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
pnpm run harmony:doctor:strict
|
|
56
|
-
pnpm run harmony:init
|
|
57
|
-
pnpm run harmony:sync-template
|
|
58
|
-
pnpm run harmony:bundle
|
|
59
|
-
pnpm run harmony:env
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
结果:
|
|
63
|
-
|
|
64
|
-
- `doctor --strict`:通过,矩阵识别为 `expo55-rnoh082-ui-stack`。
|
|
65
|
-
- `init`:通过。
|
|
66
|
-
- `sync-template`:通过。
|
|
67
|
-
- `bundle`:初次失败,报 `Cannot find module 'babel-preset-expo'`;修正 sample Babel 解析后复跑通过。
|
|
68
|
-
- `env`:`ready`,本机可定位 DevEco / SDK / ohpm / hvigor / hdc;`signingConfigs` 仍为空,只影响 release HAP,不阻塞 debug 验证。
|
|
69
|
-
|
|
70
|
-
### 3. Debug HAP 构建
|
|
71
|
-
|
|
72
|
-
执行:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
pnpm run harmony:build:debug
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
结果:
|
|
79
|
-
|
|
80
|
-
- 未通过。
|
|
81
|
-
- 问题拆成了两个阶段:
|
|
82
|
-
|
|
83
|
-
1. 初始失败点
|
|
84
|
-
|
|
85
|
-
- `ohpm install` 无法直接安装 npm 包内分发的本地 `*.har`。
|
|
86
|
-
- 原因是这些 `*.har` 实际上是带 `package/` 前缀的 tarball,`ohpm` 本地安装时期望根目录直接存在 `oh-package.json5`。
|
|
87
|
-
|
|
88
|
-
2. 修正后失败点
|
|
89
|
-
|
|
90
|
-
- toolkit 现在会在 `build-hap` 前先把本地 `*.har` 规范化展开到 `harmony/.expo-harmony/ohpm-local-deps/`,`ohpm install` 随后可通过。
|
|
91
|
-
- `hvigor assembleHap` 继续失败,进入 ArkTS 编译阶段后出现 adapter / RNOH 接口不匹配。
|
|
92
|
-
- 关键现象:
|
|
93
|
-
- `@react-native-oh-tpl/react-native-gesture-handler` 当前包内 `oh-package.json5` 依赖的是 `@rnoh/react-native-openharmony: ^0.72.32`
|
|
94
|
-
- 本仓库公开矩阵固定的是 `@react-native-oh/react-native-harmony@0.82.18`
|
|
95
|
-
- 编译错误集中在 `RNGestureHandlerButton.ts`、`RNGestureHandlerRootView.ts`、`RNGestureHandlerModule.ts` 与 `RNOHPackagesFactory.ets`
|
|
96
|
-
|
|
97
|
-
当前判断:
|
|
98
|
-
|
|
99
|
-
- `Build Debug Hap(s)` 的最终阻塞已经不是本机环境问题,而是当前公开 matrix 下 UI-stack adapter 与 RNOH 运行时的兼容性问题。
|
|
100
|
-
|
|
101
|
-
## 运行时人工验收结论
|
|
102
|
-
|
|
103
|
-
已完成:
|
|
104
|
-
|
|
105
|
-
- `open -a /Applications/DevEco-Studio.app examples/official-ui-stack-sample/harmony` 成功。
|
|
106
|
-
- `hdc list targets` 能列出 `127.0.0.1:5555`。
|
|
107
|
-
|
|
108
|
-
未完成:
|
|
109
|
-
|
|
110
|
-
- 首页启动
|
|
111
|
-
- `Constants.expoConfig?.name` 显示
|
|
112
|
-
- SVG 圆环渲染
|
|
113
|
-
- gesture 触发位移 / 旋转 / 回弹
|
|
114
|
-
- `/details` 路由跳转与返回
|
|
115
|
-
- 动画后路由仍正常
|
|
116
|
-
|
|
117
|
-
原因:
|
|
118
|
-
|
|
119
|
-
- 没有可安装的 debug HAP 产物,无法继续设备侧运行时验收。
|
|
120
|
-
|
|
121
|
-
## npm README 检查
|
|
122
|
-
|
|
123
|
-
### 已确认
|
|
124
|
-
|
|
125
|
-
通过:
|
|
126
|
-
|
|
127
|
-
```bash
|
|
128
|
-
npm view expo-harmony-toolkit readme --json
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
检查到当前已发布 README 原文中包含:
|
|
132
|
-
|
|
133
|
-
- 顶部徽章
|
|
134
|
-
- 相对链接
|
|
135
|
-
- 中英文跳转链接
|
|
136
|
-
- fenced code blocks
|
|
137
|
-
|
|
138
|
-
静态内容层面没有发现 README 被 npm 发布流程截断或丢失关键区块。
|
|
139
|
-
|
|
140
|
-
### 未完成
|
|
141
|
-
|
|
142
|
-
未能完成 npm 网页端的实时可视验收。
|
|
143
|
-
|
|
144
|
-
阻塞:
|
|
145
|
-
|
|
146
|
-
- 直接自动抓取 npmjs 页面受限。
|
|
147
|
-
- 试图补装 Playwright 浏览器 runtime 时,`npx playwright install chrome` 因 npm registry `ECONNRESET` 失败。
|
|
148
|
-
|
|
149
|
-
因此本次对 npm README 的最终结论是:
|
|
150
|
-
|
|
151
|
-
- 已发布内容原文正常。
|
|
152
|
-
- 网页端实际渲染仍待后续在网络正常的浏览器环境中补一次可视确认。
|
|
153
|
-
|
|
154
|
-
## 本次为验收补的修正
|
|
155
|
-
|
|
156
|
-
- [examples/official-ui-stack-sample/babel.config.js](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/examples/official-ui-stack-sample/babel.config.js)
|
|
157
|
-
- 显式通过 Expo 包根目录解析 `babel-preset-expo`
|
|
158
|
-
- 同时加入 `expo-router/babel`
|
|
159
|
-
- 解决 pnpm workspace 下 `bundle` 无法解析 Babel preset 的问题
|
|
160
|
-
- [src/core/build.ts](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/src/core/build.ts)
|
|
161
|
-
- 在 `build-hap` 前把 tarball 形态的本地 `*.har` 展开成 `ohpm` 可安装目录
|
|
162
|
-
- 构建后恢复生成的 `oh-package.json5`,避免工作区残留临时 specifier
|
|
163
|
-
- [templates/harmony/entry/src/main/cpp/CMakeLists.txt](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/templates/harmony/entry/src/main/cpp/CMakeLists.txt)
|
|
164
|
-
- 增加 `.expo-harmony/ohpm-local-deps` 的 RNOH C++ 源码回退查找
|
|
165
|
-
- [tests/build.test.ts](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/tests/build.test.ts)
|
|
166
|
-
- 补了本地 HAR 规范化与恢复逻辑的测试
|
|
167
|
-
|
|
168
|
-
## 证据
|
|
169
|
-
|
|
170
|
-
- `pnpm test`:`10` 个 suite,`40` 个测试全部通过
|
|
171
|
-
- `pnpm build`:通过
|
|
172
|
-
- `hdc list targets`:返回 `127.0.0.1:5555`
|
|
173
|
-
- `doctor --strict`:识别为 `expo55-rnoh082-ui-stack`,`18 supported, 0 manual, 0 unknown`
|
|
174
|
-
- `build-hap --mode debug`:已推进到 ArkTS 编译阶段,但最终失败,说明本机 DevEco / SDK / hvigor / ohpm 已真正参与构建
|
|
175
|
-
|
|
176
|
-
## 对 v1.5.1 的最终状态判断
|
|
177
|
-
|
|
178
|
-
- `doctor / init / sync-template / bundle / env`:可用
|
|
179
|
-
- `official-ui-stack-sample` runtime 手动验收:未完成
|
|
180
|
-
- `Build Debug Hap(s)`:未通过
|
|
181
|
-
- npm README 已发布原文:正常
|
|
182
|
-
- npm README live page 可视验收:待补
|
|
183
|
-
|
|
184
|
-
## 追加进展(2026-03-27 晚间)
|
|
185
|
-
|
|
186
|
-
这轮继续补验收后,`Build Debug Hap(s)` 已经打通,但设备侧人工验收仍未完成。
|
|
187
|
-
|
|
188
|
-
### 新增验证结果
|
|
189
|
-
|
|
190
|
-
执行:
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
pnpm build
|
|
194
|
-
pnpm test -- --runInBand tests/build.test.ts tests/init.test.ts tests/officialUiStackSample.test.ts
|
|
195
|
-
cd examples/official-ui-stack-sample
|
|
196
|
-
pnpm run harmony:build:debug
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
结果:
|
|
200
|
-
|
|
201
|
-
- `pnpm build`:通过。
|
|
202
|
-
- 定向测试:`3` 个 suite、`15` 个测试全部通过。
|
|
203
|
-
- `build-hap --mode debug`:通过,已产出:
|
|
204
|
-
|
|
205
|
-
```text
|
|
206
|
-
examples/official-ui-stack-sample/harmony/entry/build/default/outputs/default/entry-default-unsigned.hap
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
### 为打通 Debug HAP 新补的修正
|
|
210
|
-
|
|
211
|
-
- [src/core/template.ts](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/src/core/template.ts)
|
|
212
|
-
- 将 autolinking 生成物与 `ts.ts` shim 标记为 build-required managed files
|
|
213
|
-
- `build-hap` 前会强制刷新这些生成文件,但不会顺带覆盖其他用户可漂移模板
|
|
214
|
-
- [src/core/build.ts](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/src/core/build.ts)
|
|
215
|
-
- `bundleProject()` 改为在构建前强制同步 build-required managed files
|
|
216
|
-
- 对规范化后的本地 gesture-handler HAR 增加 `react/renderer/debug/SystraceSection.h -> <cxxreact/SystraceSection.h>` 兼容 shim
|
|
217
|
-
- [templates/harmony/entry/hvigorfile.ts](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/templates/harmony/entry/hvigorfile.ts)
|
|
218
|
-
- 显式设置 `autolinking: null`
|
|
219
|
-
- 禁用 hvigor 二次 autolinking,避免其用旧模板回写 `RNOHPackagesFactory.h`
|
|
220
|
-
- [tests/build.test.ts](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/tests/build.test.ts)
|
|
221
|
-
- 增补 build-required managed files 强制刷新测试
|
|
222
|
-
- 增补 gesture-handler Systrace shim 测试
|
|
223
|
-
- [tests/init.test.ts](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/tests/init.test.ts)
|
|
224
|
-
- 断言生成的 `harmony/entry/hvigorfile.ts` 含 `autolinking: null`
|
|
225
|
-
|
|
226
|
-
### 设备侧仍未完成的原因
|
|
227
|
-
|
|
228
|
-
这次已经不再是 HAP 构建阻塞,而是当前本机模拟器实例不可用。
|
|
229
|
-
|
|
230
|
-
- `hdc list targets -v`:当前返回 `[Empty]`
|
|
231
|
-
- DevEco Emulator CLI 可列出实例名:`Enjoy 90 Pro Max`
|
|
232
|
-
- 该实例目录存在:`/Users/blackishgreen03/.Huawei/Emulator/deployed/Enjoy 90 Pro Max`
|
|
233
|
-
- 但当前系统进程中没有活跃的 emulator/qemu guest,无法安装 HAP
|
|
234
|
-
- 实例日志显示最近一次 guest 在 `2026-03-27 18:49` 出现 `Guest no response` / `hdc is abnormal`
|
|
235
|
-
- 随后在 `2026-03-27 19:04` 尝试重新拉起时,又出现 `can not read uuid file` / `can not read sn`
|
|
236
|
-
|
|
237
|
-
因此当前未完成项变成:
|
|
238
|
-
|
|
239
|
-
- `hdc install -r entry-default-unsigned.hap`
|
|
240
|
-
- `aa start` 拉起 `com.blackishgreen.expoharmonyuistack/EntryAbility`
|
|
241
|
-
- 首页、SVG、gesture、reanimated、路由跳转的最终人工运行时验收
|
|
242
|
-
|
|
243
|
-
### 对当前状态的更新判断
|
|
244
|
-
|
|
245
|
-
- `doctor / init / sync-template / bundle / env`:可用
|
|
246
|
-
- `Build Debug Hap(s)`:已通过
|
|
247
|
-
- `official-ui-stack-sample` runtime 手动验收:仍待补
|
|
248
|
-
- 当前阻塞:模拟器实例健康状态 / `hdc` target 缺失,而非 toolkit 构建链路
|
|
249
|
-
|
|
250
|
-
## 设备侧补验收(2026-03-30 下午)
|
|
251
|
-
|
|
252
|
-
这轮在同一台机器上继续补了模拟器侧验收,结论是:`build/install/start` 链路现在都已经真正打通,但 `official-ui-stack-sample` 仍未达到可验首页状态,最新阻塞已经从 native 构建前移到 JS runtime 兼容层。
|
|
253
|
-
|
|
254
|
-
### 新增验证结果
|
|
255
|
-
|
|
256
|
-
执行:
|
|
257
|
-
|
|
258
|
-
```bash
|
|
259
|
-
pnpm build
|
|
260
|
-
pnpm test -- --runInBand tests/build.test.ts
|
|
261
|
-
cd examples/official-ui-stack-sample
|
|
262
|
-
pnpm exec tsc --noEmit
|
|
263
|
-
pnpm run harmony:build:debug
|
|
264
|
-
/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains/hdc list targets -v
|
|
265
|
-
/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains/hdc install -r harmony/entry/build/default/outputs/default/entry-default-unsigned.hap
|
|
266
|
-
/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains/hdc shell aa start -a EntryAbility -b com.blackishgreen.expoharmonyuistack
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
结果:
|
|
270
|
-
|
|
271
|
-
- `pnpm build`:通过。
|
|
272
|
-
- `tests/build.test.ts`:`1` 个 suite、`13` 个测试全部通过。
|
|
273
|
-
- sample `tsc --noEmit`:通过。
|
|
274
|
-
- `build-hap --mode debug`:通过,持续产出 `entry-default-unsigned.hap`。
|
|
275
|
-
- `hdc list targets -v`:返回 `127.0.0.1:5555 TCP Connected localhost`。
|
|
276
|
-
- `hdc install -r entry-default-unsigned.hap`:通过,返回 `install bundle successfully`。
|
|
277
|
-
- `aa start -a EntryAbility -b com.blackishgreen.expoharmonyuistack`:通过,返回 `start ability successfully`。
|
|
278
|
-
|
|
279
|
-
### 新增运行时结论
|
|
280
|
-
|
|
281
|
-
- 之前 sample 中直接引用 `react-native-reanimated/lib/module/reanimated2` 深路径会在模拟器上红屏,现已改回从 `react-native-reanimated` 包入口导入,旧的模块解析红屏已消失。
|
|
282
|
-
- 覆盖安装完成后单独重新拉起应用,进程可以稳定存活,不再是安装期把 Ability 顶掉。
|
|
283
|
-
- 但当前前台画面仍是白屏,尚未进入可人工点击验收的首页。
|
|
284
|
-
|
|
285
|
-
本次从 `hilog` 抓到的关键运行时错误包括:
|
|
286
|
-
|
|
287
|
-
- `Invariant Violation: Looks like you're passing a function component "BaseImage" to createAnimatedComponent`
|
|
288
|
-
- `Error: Incompatible React versions`
|
|
289
|
-
- 日志明确显示:
|
|
290
|
-
- `react: 19.2.0`
|
|
291
|
-
- `react-native-renderer: 19.1.1`
|
|
292
|
-
|
|
293
|
-
### 对阻塞点的最新判断
|
|
294
|
-
|
|
295
|
-
- 当前已确认不是 `hdc` target、安装、Ability 拉起、ArkTS/C++ 编译、也不是深路径 `reanimated2` 模块解析问题。
|
|
296
|
-
- 当前阻塞已经收敛为 JS runtime 侧的版本窗/adapter 兼容问题:
|
|
297
|
-
- 公开矩阵当前宣称的是 `Expo 55 + React 19.2.x + React Native 0.83.x + @react-native-oh/react-native-harmony 0.82.18`
|
|
298
|
-
- 但本机实际安装的 `@react-native-oh/react-native-harmony@0.82.18` `peerDependencies.react-native` 仍明确要求 `0.82.1`
|
|
299
|
-
- 设备侧运行日志也与这条不匹配相吻合
|
|
300
|
-
|
|
301
|
-
因此截至 `2026-03-30 15:42 CST` 的最新结论变为:
|
|
302
|
-
|
|
303
|
-
- `doctor / init / sync-template / bundle / env`:可用
|
|
304
|
-
- `Build Debug Hap(s)`:可用
|
|
305
|
-
- `hdc install`:可用
|
|
306
|
-
- `aa start`:可用
|
|
307
|
-
- `official-ui-stack-sample` runtime 手动验收:仍未通过
|
|
308
|
-
- 当前阻塞:`react` / `react-native` / `@react-native-oh/react-native-harmony` / reanimated 组合在设备侧的 JS runtime 兼容性,而非 toolkit 构建链路本身
|
|
309
|
-
|
|
310
|
-
## 最终收口(2026-03-30 18:05 CST)
|
|
311
|
-
|
|
312
|
-
这轮没有继续维持一个“文档里支持 gesture,设备上却跑不通”的公开矩阵,而是把 `expo55-rnoh082-ui-stack` 收口到当前真实可运行的窗口:
|
|
313
|
-
|
|
314
|
-
- 保留:`expo-router`、`expo-linking`、`expo-constants`、`react-native-reanimated`、`react-native-svg`
|
|
315
|
-
- 移出公开矩阵:`react-native-gesture-handler`
|
|
316
|
-
- `gesture-handler` 继续保留为矩阵外的手动探索项,不再作为 `doctor --strict` 通过条件,也不再作为官方 sample 的运行时承诺
|
|
317
|
-
|
|
318
|
-
### 本轮补的修正
|
|
319
|
-
|
|
320
|
-
- [src/data/uiStack.ts](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/src/data/uiStack.ts)
|
|
321
|
-
- 从 `UI_STACK_VALIDATED_ADAPTERS` 移除 `react-native-gesture-handler`
|
|
322
|
-
- [src/data/dependencyCatalog.ts](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/src/data/dependencyCatalog.ts)
|
|
323
|
-
- 将 `gesture-handler` 及其 Harmony adapter 调整为矩阵外 `manual` 状态
|
|
324
|
-
- [examples/official-ui-stack-sample/package.json](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/examples/official-ui-stack-sample/package.json)
|
|
325
|
-
- 移除 `react-native-gesture-handler` 与 `@react-native-oh-tpl/react-native-gesture-handler`
|
|
326
|
-
- [examples/official-ui-stack-sample/app/_layout.tsx](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/examples/official-ui-stack-sample/app/_layout.tsx)
|
|
327
|
-
- 移除 `GestureHandlerRootView`
|
|
328
|
-
- [examples/official-ui-stack-sample/app/index.tsx](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/examples/official-ui-stack-sample/app/index.tsx)
|
|
329
|
-
- 将首页交互改成纯 `react-native` `Pressable` + `react-native-reanimated` 的 spring rail
|
|
330
|
-
- [examples/official-ui-stack-sample/app/details.tsx](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/examples/official-ui-stack-sample/app/details.tsx)
|
|
331
|
-
- 文案改为当前真实验证项
|
|
332
|
-
- [README.md](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/README.md)、[README.en.md](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/README.en.md)、[docs/support-matrix.md](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/docs/support-matrix.md)
|
|
333
|
-
- 将公开矩阵、sample 说明和 release gate 同步到真实版本窗
|
|
334
|
-
|
|
335
|
-
### 重新执行的验证
|
|
336
|
-
|
|
337
|
-
执行:
|
|
338
|
-
|
|
339
|
-
```bash
|
|
340
|
-
pnpm install --ignore-scripts
|
|
341
|
-
pnpm exec jest tests/doctor.test.ts tests/officialUiStackSample.test.ts tests/docs.test.ts --runInBand
|
|
342
|
-
pnpm build
|
|
343
|
-
|
|
344
|
-
cd examples/official-ui-stack-sample
|
|
345
|
-
pnpm run harmony:doctor:strict
|
|
346
|
-
pnpm run harmony:init
|
|
347
|
-
pnpm run harmony:sync-template
|
|
348
|
-
pnpm run harmony:bundle
|
|
349
|
-
pnpm run harmony:env
|
|
350
|
-
pnpm run harmony:build:debug
|
|
351
|
-
/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains/hdc install -r harmony/entry/build/default/outputs/default/entry-default-unsigned.hap
|
|
352
|
-
/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains/hdc shell aa start -a EntryAbility -b com.blackishgreen.expoharmonyuistack
|
|
353
|
-
/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains/hdc shell aa start -a EntryAbility -b com.blackishgreen.expoharmonyuistack -U expoharmonyuistack://details
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
结果:
|
|
357
|
-
|
|
358
|
-
- 定向 Jest:`3` 个 suite、`20` 个测试全部通过
|
|
359
|
-
- `pnpm build`:通过
|
|
360
|
-
- `doctor --strict`:通过,sample 当前为 `16 supported, 0 manual, 0 unknown`
|
|
361
|
-
- `init / sync-template / bundle / env / build-hap --mode debug`:全部通过
|
|
362
|
-
- `hdc install -r`:通过,返回 `install bundle successfully`
|
|
363
|
-
- `aa start`:通过,返回 `start ability successfully`
|
|
364
|
-
- `aa dump --all`:确认 `com.blackishgreen.expoharmonyuistack` 处于 `FOREGROUND`
|
|
365
|
-
- `hilog`:已出现 `JS bundle executed successfully`,未再出现此前的 `gesture-handler` / reanimated runtime fatal
|
|
366
|
-
|
|
367
|
-
### 设备侧证据
|
|
368
|
-
|
|
369
|
-
- 首页截图:
|
|
370
|
-
[official-ui-stack-sample-home-reset.jpeg](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/.tmp-acceptance/official-ui-stack-sample-home-reset.jpeg)
|
|
371
|
-
- `/details` 路由截图:
|
|
372
|
-
[official-ui-stack-sample-deeplink.jpeg](/Users/blackishgreen03/workspace/Expo-Harmony-Plugin/.tmp-acceptance/official-ui-stack-sample-deeplink.jpeg)
|
|
373
|
-
|
|
374
|
-
当前观察到的设备侧状态:
|
|
375
|
-
|
|
376
|
-
- 首页能正常显示标题、SVG、`Constants.expoConfig?.name`、`Linking.createURL('/details')`
|
|
377
|
-
- `/details` 页面可通过 scheme deep link 进入并稳定显示
|
|
378
|
-
- 调试环境下仍会出现 Dev Menu websocket / packager 重连日志,这不是当前 sample 运行阻塞
|
|
379
|
-
|
|
380
|
-
### 对 `v1.5.1` 的最终状态改判
|
|
381
|
-
|
|
382
|
-
- 公开矩阵:已修正到真实可运行版本窗
|
|
383
|
-
- `doctor / init / sync-template / bundle / env / build-hap / install / start`:可用
|
|
384
|
-
- 官方 UI-stack sample:可在当前模拟器上正常显示首页与 `/details`
|
|
385
|
-
- 设备侧剩余未纳入公开承诺的项:`react-native-gesture-handler`
|