expo-harmony-toolkit 1.8.3 → 1.9.1
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 +12 -11
- package/README.md +12 -11
- package/build/cli.js +1 -0
- package/build/commands/buildHap.d.ts +1 -0
- package/build/commands/buildHap.js +1 -0
- package/build/core/build.d.ts +2 -0
- package/build/core/build.js +45 -36
- package/build/core/constants.d.ts +1 -1
- package/build/core/constants.js +1 -1
- package/build/core/report.js +28 -4
- package/build/core/template/capabilityRegistry.js +21 -0
- package/build/core/template/renderers/appFoundation.d.ts +5 -0
- package/build/core/template/renderers/appFoundation.js +225 -0
- package/build/data/capabilities.js +126 -0
- package/build/data/dependencyCatalog.js +13 -8
- package/build/data/publicDocs.d.ts +2 -2
- package/build/data/publicDocs.js +1 -2
- package/build/docs/render.js +3 -1
- package/docs/cli-build.md +34 -3
- package/docs/official-native-capabilities-sample.md +57 -2
- package/docs/roadmap.md +57 -11
- package/docs/support-matrix.md +18 -7
- package/package.json +1 -1
package/docs/roadmap.md
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
- 所有 Expo project types 与 package categories,最终都进入同一条 `mainline capability catalog`
|
|
8
8
|
- `v2.0.0` 本身就要接近最完美、最最终的交付形态,而不是“还差最后一段 extension”
|
|
9
|
+
- `v2.0.0` 的可靠打包承诺收敛为 catalog-covered Expo projects:只要依赖已经进入主线 capability catalog,就必须稳定闭环
|
|
9
10
|
- 公开承诺仍然按 evidence gate 逐步放开,而不是因为目标扩大就提前放宽 `latest`
|
|
10
11
|
- `latest` 继续只承接完整验收的 `verified`
|
|
11
12
|
- `next` 继续承接 fast track,用来加速收敛,但不伪装成 `verified`
|
|
@@ -65,6 +66,8 @@
|
|
|
65
66
|
|
|
66
67
|
## 当前主线
|
|
67
68
|
|
|
69
|
+
`v1.8.x` 已完成 repo 内可收口项,当前主线切到 `v1.9.x`。`v1.9.0` 先落 bare workflow baseline、app foundation modules 与 `react-native-gesture-handler` formal slice;`v1.9.1` 作为 build-hap patch release,补上 HAR normalize opt-out,让已确认 ohpm 可直接消费纯 HAR 的项目可以绕过 `expo-harmony-local-deps`。剩余需要真机或 release HAP 的证据继续保留在 v1.8.x capability board,不阻塞 v1.9.x 的 bare / foundation / third-party onboarding 工作。
|
|
70
|
+
|
|
68
71
|
### v1.8.0 Intake Hardening + Parallel Promotion
|
|
69
72
|
|
|
70
73
|
目标日期:`2026-05-15`
|
|
@@ -98,7 +101,9 @@
|
|
|
98
101
|
|
|
99
102
|
目标日期:`2026-06-15`
|
|
100
103
|
|
|
101
|
-
|
|
104
|
+
状态:repo-only closeout complete;device / release evidence carryover。
|
|
105
|
+
|
|
106
|
+
目标:把 v1.8.0 建好的 intake + promotion 架子收口到可持续执行的证据节奏,并把外部验收项从 repo 内可完成项中拆开。
|
|
102
107
|
|
|
103
108
|
- 每个 preview capability 必须单独维护:
|
|
104
109
|
- bundle evidence
|
|
@@ -108,12 +113,18 @@
|
|
|
108
113
|
- combined sample 只负责回归烟测,不再替代单 capability 证据
|
|
109
114
|
- `toolkit-config.json`、`doctor-report.json`、roadmap、support matrix、acceptance board 保持同源同步
|
|
110
115
|
- `latest` 仍不承接任何证据未闭环的 capability
|
|
116
|
+
- 不需要真机或 release HAP 的收尾项已经完成,可以进入 `v1.9.x`
|
|
117
|
+
- 仍然顺延的外部证据:
|
|
118
|
+
- 单 capability 真机 device acceptance record
|
|
119
|
+
- 单 capability release HAP runtime acceptance
|
|
111
120
|
|
|
112
121
|
### v1.9.0 Bare Workflow Baseline + App Foundation Modules
|
|
113
122
|
|
|
114
123
|
目标日期:`2026-08-31`
|
|
115
124
|
|
|
116
|
-
|
|
125
|
+
状态:implementation baseline complete;device / release evidence carryover。
|
|
126
|
+
|
|
127
|
+
目标:把 bare workflow 拉进主线,补齐最容易卡死真实项目的官方基础模块,并先建立第三方 blocker 的正式接入切片。
|
|
117
128
|
|
|
118
129
|
- bare workflow 正式进入主线里程碑
|
|
119
130
|
- 优先补齐:
|
|
@@ -123,6 +134,15 @@
|
|
|
123
134
|
- `expo-clipboard`
|
|
124
135
|
- `expo-haptics`
|
|
125
136
|
- 高频第三方 native dependencies 开始进入同一 capability catalog
|
|
137
|
+
- `react-native-gesture-handler` 进入 formal acceptance slice:
|
|
138
|
+
- 保留 experimental / non-verified 边界
|
|
139
|
+
- 补齐 sample / fixture / doctor / debug build evidence
|
|
140
|
+
- device / release evidence 仍按 promotion gate 单独关闭
|
|
141
|
+
- project-shape regression farm 建立最小版本:
|
|
142
|
+
- managed core
|
|
143
|
+
- managed native heavy
|
|
144
|
+
- bare
|
|
145
|
+
- third-party native heavy
|
|
126
146
|
- 对每个新能力继续坚持:
|
|
127
147
|
- fixture
|
|
128
148
|
- sample route
|
|
@@ -131,18 +151,40 @@
|
|
|
131
151
|
- bundle
|
|
132
152
|
- debug build
|
|
133
153
|
- acceptance 记录
|
|
154
|
+
- 本阶段不改变 `verified` 边界;foundation modules 以 `preview` + `runtimeMode=shim` 记录,`react-native-gesture-handler` 以 `experimental` + formal adapter slice 记录
|
|
155
|
+
|
|
156
|
+
### v1.9.1 Build HAP HAR Normalize Opt-out
|
|
157
|
+
|
|
158
|
+
目标日期:`2026-06-02`
|
|
134
159
|
|
|
135
|
-
|
|
160
|
+
目标:把 issue #1 中的本地 HAR 解压 opt-out 做成正式 patch release,同时不改变默认 verified build path。
|
|
161
|
+
|
|
162
|
+
- `build-hap` 新增显式 opt-out:
|
|
163
|
+
- `EXPO_HARMONY_SKIP_HAR_NORMALIZE=1`
|
|
164
|
+
- `expo-harmony build-hap --no-har-normalize`
|
|
165
|
+
- 默认继续执行现有 `normalizeLocalHarDependencies` 路径:
|
|
166
|
+
- 解压 `file:*.har` 到 `expo-harmony-local-deps`
|
|
167
|
+
- 临时改写 root / entry `oh-package.json5`
|
|
168
|
+
- 注册 normalized local HAR modules
|
|
169
|
+
- 执行依赖 normalized local package 的 RNOH codegen / path 兜底
|
|
170
|
+
- opt-out 开启后:
|
|
171
|
+
- 保留 `file:../node_modules/.../*.har`
|
|
172
|
+
- 让 `ohpm install --all` 直接消费纯 HAR
|
|
173
|
+
- 在 build report / CLI 文档里明确提示跳过的自动兜底
|
|
174
|
+
- 本阶段只改变 build-hap escape hatch,不扩大 `verified` 能力边界
|
|
175
|
+
- `v1.9.0` 已经存在于 npm `next`,本阶段发布为 `v1.9.1` 并进入 `latest`
|
|
176
|
+
|
|
177
|
+
### v1.9.2 Third-party Native Wave A
|
|
136
178
|
|
|
137
179
|
目标日期:`2026-09-30`
|
|
138
180
|
|
|
139
181
|
目标:优先清掉最容易挡住“任何 Expo 项目”的高频第三方 native blocker。
|
|
140
182
|
|
|
141
183
|
- 第一批高频第三方 native blocker 进入正式 onboarding:
|
|
142
|
-
- `react-native-gesture-handler`
|
|
143
184
|
- `react-native-safe-area-context`
|
|
144
185
|
- `react-native-screens`
|
|
145
186
|
- `@react-native-async-storage/async-storage`
|
|
187
|
+
- `react-native-gesture-handler` 如果在 `v1.9.0` 已完成 formal acceptance slice,则本阶段只继续补 device / release evidence 与 promotion 决策
|
|
146
188
|
- 建立第三方 native capability onboarding checklist:
|
|
147
189
|
- catalog entry
|
|
148
190
|
- shim / adapter strategy
|
|
@@ -151,14 +193,14 @@
|
|
|
151
193
|
- debug + release evidence
|
|
152
194
|
- 任何进入 Wave A 的 blocker,都不允许继续停留在“矩阵外模糊探索”
|
|
153
195
|
|
|
154
|
-
### v1.9.
|
|
196
|
+
### v1.9.3 Third-party Native Wave B + Regression Farm
|
|
155
197
|
|
|
156
198
|
目标日期:`2026-10-31`
|
|
157
199
|
|
|
158
|
-
目标:扩大第三方 native
|
|
200
|
+
目标:扩大第三方 native 覆盖,并把 `v1.9.0` 建好的最小 regression farm 扩容成持续回归面。
|
|
159
201
|
|
|
160
202
|
- 第二批高频第三方 native 依赖进入主线
|
|
161
|
-
-
|
|
203
|
+
- 扩容 project-shape regression farm:
|
|
162
204
|
- managed core
|
|
163
205
|
- managed native heavy
|
|
164
206
|
- bare
|
|
@@ -193,13 +235,16 @@
|
|
|
193
235
|
- 对仍无法在 `v2.0.0` 前关闭的项,必须提前明确降级策略与替代路径
|
|
194
236
|
- `v2.0.0` 不接受“先宣布完成,再慢慢补长尾”
|
|
195
237
|
|
|
196
|
-
### v2.0.0
|
|
238
|
+
### v2.0.0 Catalog-covered Expo Project Reliable Packaging
|
|
239
|
+
|
|
240
|
+
原 `Any Expo Project Reliable Packaging` 叙事保留为 intake 目标,但可靠打包承诺明确收敛到 catalog-covered 项目。
|
|
197
241
|
|
|
198
242
|
目标日期:`2026-12-31`
|
|
199
243
|
|
|
200
|
-
定义:任何 Expo 项目,只要依赖已经存在于主线 capability catalog 内,就能可靠打包成鸿蒙 App
|
|
244
|
+
定义:任何 Expo 项目,只要依赖已经存在于主线 capability catalog 内,就能可靠打包成鸿蒙 App;未进入 catalog 的依赖必须至少被 `doctor` 明确分类、指出 blocker,并给出下一步。`v2.0.0` 本身就是基本接近最完美、最最终的形态。
|
|
201
245
|
|
|
202
|
-
-
|
|
246
|
+
- 不再只覆盖“主流项目”,而是把 catalog-covered Expo projects 的可靠打包作为正式版本定义
|
|
247
|
+
- “任何 Expo 项目都能可靠打包成鸿蒙 App”不得被简化成无边界长尾承诺;真实承诺边界是 mainline capability catalog
|
|
203
248
|
- `Managed/CNG` 与 bare workflow 都必须进入稳定交付路径
|
|
204
249
|
- 高频官方 Expo 模块与高频第三方 native blockers 必须已经进入同一公开 capability catalog
|
|
205
250
|
- `doctor -> sync-template -> bundle -> build-hap --mode debug|release` 必须对主线 catalog 内项目形成稳定闭环
|
|
@@ -208,7 +253,8 @@
|
|
|
208
253
|
## 长期方向
|
|
209
254
|
|
|
210
255
|
- 所有输入最终都进入同一个 `mainline capability catalog`
|
|
211
|
-
- `v2.0.0`
|
|
256
|
+
- `v2.0.0` 就是 catalog-covered Expo projects 可靠打包成鸿蒙 App 的正式目标版本
|
|
257
|
+
- 对 catalog 外项目,正式目标是完整 intake:能分类、能说明 blocker、能给下一步,而不是伪装成已经可靠打包
|
|
212
258
|
- `latest` 只由完整验收能力驱动
|
|
213
259
|
- `next` 用来加速收敛主线 backlog,而不是制造伪 verified 叙事
|
|
214
260
|
- roadmap 的关键问题不再是“要不要把某类项目算进主线”,而是“它何时进入主线、当前缺哪格 evidence、下一步怎么 unblock”
|
package/docs/support-matrix.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# v1.
|
|
1
|
+
# v1.9 支持矩阵
|
|
2
2
|
|
|
3
|
-
`v1.
|
|
3
|
+
`v1.9` 继续采用 tiered support model,并把“层级”与“晋升距离”拆开表达:
|
|
4
4
|
|
|
5
5
|
- `supportTier` 表示公开承诺层级
|
|
6
6
|
- `runtimeMode` 表示当前运行时接入形态:`shim`、`adapter`、`verified`
|
|
@@ -9,11 +9,12 @@
|
|
|
9
9
|
- `coverageProfile` 表示当前项目属于哪条主线输入形态
|
|
10
10
|
- `nextActions` 表示 toolkit 为当前项目生成的有序下一步
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
同时,roadmap 已经改成单一 `mainline capability catalog` 方向:
|
|
13
13
|
|
|
14
14
|
- bare workflow 与第三方 native package 不再被描述成“收官后才考虑的另一条 extension 终局”
|
|
15
15
|
- `v2.0.0` 本身被定义成“任何 Expo 项目都能可靠打包成鸿蒙 App”的目标版本
|
|
16
16
|
- 但当前公开承诺依旧没有放宽;它们只是进入同一主线 backlog,而不是已经进入 `verified`
|
|
17
|
+
- `v1.9.0` 新增的是 bare intake baseline、app foundation preview shim baseline 与 `react-native-gesture-handler` formal experimental slice,不是 verified 扩容
|
|
17
18
|
|
|
18
19
|
`doctor --strict` 继续只代表 `verified`。
|
|
19
20
|
|
|
@@ -106,15 +107,22 @@
|
|
|
106
107
|
| `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` |
|
|
107
108
|
| `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` |
|
|
108
109
|
| `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` |
|
|
110
|
+
| `expo-secure-store` | `preview` | `shim` | `bundle=yes[automated], debugBuild=yes[automated], device=no[none], release=no[none]` | toolkit-managed bridge | 无新增必需权限 | `/secure-store` |
|
|
111
|
+
| `expo-asset` | `preview` | `shim` | `bundle=yes[automated], debugBuild=yes[automated], device=no[none], release=no[none]` | toolkit-managed bridge | 无新增必需权限 | `/asset` |
|
|
112
|
+
| `expo-device` | `preview` | `shim` | `bundle=yes[automated], debugBuild=yes[automated], device=no[none], release=no[none]` | toolkit-managed bridge | 无新增必需权限 | `/device` |
|
|
113
|
+
| `expo-clipboard` | `preview` | `shim` | `bundle=yes[automated], debugBuild=yes[automated], device=no[none], release=no[none]` | @react-native-oh-tpl/clipboard | 无新增必需权限 | `/clipboard` |
|
|
114
|
+
| `expo-haptics` | `preview` | `shim` | `bundle=yes[automated], debugBuild=yes[automated], device=no[none], release=no[none]` | toolkit-managed bridge | 无新增必需权限 | `/haptics` |
|
|
109
115
|
<!-- GENERATED:support-matrix-preview-capabilities:end -->
|
|
110
116
|
|
|
111
117
|
说明:
|
|
112
118
|
|
|
113
119
|
- 当前四项 preview capability 都已经完成 preview baseline 的 bundle / debug build / route walkthrough
|
|
114
120
|
- 四项 preview capability 都已经进入 `adapter` 路径;`device=yes[manual-doc]` 只表示已有人工设备验收记录,仍不代表 verified 或 release-ready
|
|
115
|
-
-
|
|
121
|
+
- 当前原生 adapter preview baseline 的默认 evidenceSource 固定为:`bundle/debugBuild=automated`、`device=manual-doc`、`release=none`
|
|
122
|
+
- `v1.9.0` 新增的 app foundation modules 当前是 `runtimeMode=shim`,`bundle/debugBuild=automated`,`device/release=none`
|
|
116
123
|
- `v1.8.2` 的 ccnubox release HAP 模拟器安装/启动记录只证明 app-shell release 构建链路,不改变上述 per-capability `release=no[none]`
|
|
117
124
|
- `v1.8.x` 开始,combined sample smoke 只负责总回归;每项 capability 还必须单独维护 device / release acceptance 记录,见 [acceptance/v1.8.x-capability-board.md](../acceptance/v1.8.x-capability-board.md)
|
|
125
|
+
- `v1.8.x` repo 内可完成的 closeout 已完成;剩余 carryover 只包括单 capability 真机 device record 与 release HAP runtime acceptance
|
|
118
126
|
- `expo-file-system`
|
|
119
127
|
- `🟡` 当前主路径是 UTF-8/base64 sandbox I/O、append/partial read、`getInfoAsync({ md5: true })` 与 `downloadAsync`
|
|
120
128
|
- `expo-image-picker`
|
|
@@ -129,7 +137,7 @@
|
|
|
129
137
|
| Expo 能力 / 依赖 | 当前层级 | runtimeMode | evidence | 说明 |
|
|
130
138
|
| --- | --- | --- | --- | --- |
|
|
131
139
|
| `expo-notifications` | `experimental` | `shim` | `bundle=no, debugBuild=no, device=no, release=no` | 服务链路与交付故事未打通 |
|
|
132
|
-
| `react-native-gesture-handler` | `experimental` |
|
|
140
|
+
| `react-native-gesture-handler` | `experimental` | `adapter` | `bundle=yes[automated], debugBuild=yes[automated], device=no[none], release=no[none]` | v1.9.0 formal acceptance slice;必须与 `@react-native-oh-tpl/react-native-gesture-handler` 成对接入,仍不在公开 verified 矩阵内 |
|
|
133
141
|
|
|
134
142
|
## UI Stack 配对规则
|
|
135
143
|
|
|
@@ -229,7 +237,7 @@ toolkit 受管的核心产物仍包括:
|
|
|
229
237
|
|
|
230
238
|
## Release Tracks
|
|
231
239
|
|
|
232
|
-
从 `v1.8`
|
|
240
|
+
从 `v1.8` 开始,发布节奏按双轨设计;`v1.9.0` 继续沿用同一规则:
|
|
233
241
|
|
|
234
242
|
<!-- GENERATED:support-matrix-release-tracks:start -->
|
|
235
243
|
- `latest`
|
|
@@ -255,9 +263,12 @@ toolkit 受管的核心产物仍包括:
|
|
|
255
263
|
|
|
256
264
|
`v1.8.2` 记录的 simulator release-HAP evidence 只覆盖 ccnubox app-shell 的 signed HAP 构建、安装和启动;单 capability 的 release acceptance 仍必须按各自记录单独关闭。
|
|
257
265
|
|
|
266
|
+
`v1.8.x` repo-only closeout 不改变 capability evidence source:`device=yes[manual-doc]` 仍只代表既有人工基线,`release=no[none]` 仍表示没有单 capability release HAP runtime evidence。
|
|
267
|
+
|
|
258
268
|
## 当前仍未进入正式公开承诺
|
|
259
269
|
|
|
260
|
-
- bare Expo
|
|
270
|
+
- bare Expo;当前只进入 intake / debug baseline
|
|
271
|
+
- `expo-secure-store`、`expo-asset`、`expo-device`、`expo-clipboard`、`expo-haptics` 当前仍只是 preview shim baseline
|
|
261
272
|
- 多 Expo / RNOH 并行 verified 矩阵
|
|
262
273
|
- 任意第三方 native package 的即时正式承诺
|
|
263
274
|
|