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/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
- 目标:把 v1.8.0 建好的 intake + promotion 架子收口到可持续执行的证据节奏。
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
- 目标:先把 bare workflow 拉进主线,并补齐最容易卡死真实项目的官方基础模块。
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
- ### v1.9.1 Third-party Native Wave A
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.2 Third-party Native Wave B + Regression Farm
196
+ ### v1.9.3 Third-party Native Wave B + Regression Farm
155
197
 
156
198
  目标日期:`2026-10-31`
157
199
 
158
- 目标:扩大第三方 native 覆盖,并建立“任何 Expo 项目”目标需要的持续回归面。
200
+ 目标:扩大第三方 native 覆盖,并把 `v1.9.0` 建好的最小 regression farm 扩容成持续回归面。
159
201
 
160
202
  - 第二批高频第三方 native 依赖进入主线
161
- - 引入 project-shape regression farm:
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 Any Expo Project Reliable Packaging
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;`v2.0.0` 本身就是基本接近最完美、最最终的形态。
244
+ 定义:任何 Expo 项目,只要依赖已经存在于主线 capability catalog 内,就能可靠打包成鸿蒙 App;未进入 catalog 的依赖必须至少被 `doctor` 明确分类、指出 blocker,并给出下一步。`v2.0.0` 本身就是基本接近最完美、最最终的形态。
201
245
 
202
- - 不再只覆盖“主流项目”,而是把“任何 Expo 项目都能可靠打包成鸿蒙 App”作为正式版本定义
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` 就是“任何 Expo 项目可靠打包成鸿蒙 App”的正式目标版本
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”
@@ -1,6 +1,6 @@
1
- # v1.8 支持矩阵
1
+ # v1.9 支持矩阵
2
2
 
3
- `v1.8` 继续采用 tiered support model,但从现在开始把“层级”与“晋升距离”拆开表达:
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
- 同时,`v1.8.x` 的 roadmap 已经改成单一 `mainline capability catalog` 方向:
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
- - 当前 preview baseline 的默认 evidenceSource 固定为:`bundle/debugBuild=automated`、`device=manual-doc`、`release=none`
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` | matrix 外本地探索 | matrix | 继续保留本地探索 shim,但不在公开 verified 矩阵内 |
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-harmony-toolkit",
3
- "version": "1.8.3",
3
+ "version": "1.9.1",
4
4
  "description": "面向 Managed/CNG Expo 项目的 HarmonyOS 迁移、准入检查与 UI-stack 构建工具链",
5
5
  "main": "app.plugin.js",
6
6
  "types": "build/index.d.ts",