expo-harmony-toolkit 1.7.2 → 1.8.0

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.
Files changed (69) hide show
  1. package/README.en.md +25 -11
  2. package/README.md +27 -13
  3. package/build/core/autolinking.d.ts +10 -0
  4. package/build/core/autolinking.js +421 -0
  5. package/build/core/build/commands.d.ts +19 -0
  6. package/build/core/build/commands.js +61 -0
  7. package/build/core/build/compatibilityShims.d.ts +1 -0
  8. package/build/core/build/compatibilityShims.js +272 -0
  9. package/build/core/build/localHar.d.ts +13 -0
  10. package/build/core/build/localHar.js +337 -0
  11. package/build/core/build/reporting.d.ts +19 -0
  12. package/build/core/build/reporting.js +67 -0
  13. package/build/core/build/rnohCompatibility.d.ts +1 -0
  14. package/build/core/build/rnohCompatibility.js +38 -0
  15. package/build/core/build.d.ts +4 -12
  16. package/build/core/build.js +70 -762
  17. package/build/core/constants.d.ts +2 -1
  18. package/build/core/constants.js +3 -2
  19. package/build/core/dependencyInspection.d.ts +2 -0
  20. package/build/core/dependencyInspection.js +130 -0
  21. package/build/core/env.js +1 -1
  22. package/build/core/report.js +162 -10
  23. package/build/core/signing.d.ts +2 -0
  24. package/build/core/signing.js +30 -0
  25. package/build/core/template/capabilityRegistry.d.ts +9 -0
  26. package/build/core/template/capabilityRegistry.js +84 -0
  27. package/build/core/template/expoModulesCoreShim.d.ts +2 -0
  28. package/build/core/template/expoModulesCoreShim.js +279 -0
  29. package/build/core/template/metro.d.ts +2 -0
  30. package/build/core/template/metro.js +213 -0
  31. package/build/core/template/nativeFiles.d.ts +8 -0
  32. package/build/core/template/nativeFiles.js +333 -0
  33. package/build/core/template/renderers/camera.d.ts +4 -0
  34. package/build/core/template/renderers/camera.js +612 -0
  35. package/build/core/template/renderers/fileSystem.d.ts +4 -0
  36. package/build/core/template/renderers/fileSystem.js +814 -0
  37. package/build/core/template/renderers/imagePicker.d.ts +4 -0
  38. package/build/core/template/renderers/imagePicker.js +753 -0
  39. package/build/core/template/renderers/location.d.ts +4 -0
  40. package/build/core/template/renderers/location.js +836 -0
  41. package/build/core/template/runtimeShims.d.ts +2 -0
  42. package/build/core/template/runtimeShims.js +192 -0
  43. package/build/core/template/support.d.ts +11 -0
  44. package/build/core/template/support.js +108 -0
  45. package/build/core/template.d.ts +3 -6
  46. package/build/core/template.js +49 -4457
  47. package/build/data/capabilities.js +21 -4
  48. package/build/data/dependencyCatalog.js +10 -0
  49. package/build/data/publicDocs.d.ts +11 -0
  50. package/build/data/publicDocs.js +28 -0
  51. package/build/data/validatedMatrices.js +9 -1
  52. package/build/docs/render.d.ts +9 -0
  53. package/build/docs/render.js +250 -0
  54. package/build/types.d.ts +19 -0
  55. package/docs/cli-build.md +1 -1
  56. package/docs/npm-release.md +1 -0
  57. package/docs/official-app-shell-sample.md +2 -1
  58. package/docs/official-minimal-sample.md +2 -1
  59. package/docs/official-native-capabilities-sample.md +12 -2
  60. package/docs/official-ui-stack-sample.md +2 -1
  61. package/docs/roadmap.md +146 -51
  62. package/docs/signing-and-release.md +3 -0
  63. package/docs/support-matrix.md +59 -13
  64. package/package.json +13 -5
  65. package/docs/v1.5.1-acceptance.md +0 -385
  66. package/docs/v1.6.0-acceptance.md +0 -193
  67. package/docs/v1.7.0-acceptance.md +0 -111
  68. package/docs/v1.7.1-acceptance.md +0 -111
  69. package/docs/v1.7.2-acceptance.md +0 -37
package/docs/roadmap.md CHANGED
@@ -2,18 +2,19 @@
2
2
 
3
3
  ## 收官定义
4
4
 
5
- 这个项目的“完美落幕”不再定义为“一次性完美支持任意 Expo 项目”。
5
+ 这个项目的终局重新定义为:
6
6
 
7
- 新的收官定义是:
7
+ - 所有 Expo project types 与 package categories,最终都进入同一条 `mainline capability catalog`
8
+ - `v2.0.0` 本身就要接近最完美、最最终的交付形态,而不是“还差最后一段 extension”
9
+ - 公开承诺仍然按 evidence gate 逐步放开,而不是因为目标扩大就提前放宽 `latest`
10
+ - `latest` 继续只承接完整验收的 `verified`
11
+ - `next` 继续承接 fast track,用来加速收敛,但不伪装成 `verified`
8
12
 
9
- - 在 `Managed/CNG Expo` 主线下,主流官方 Expo 能力可稳定分析、可 bundle、可 debug/release 验证、可交付
10
- - `latest` 只承诺已经完成完整验收的 `verified` 能力
11
- - 长尾第三方 native module 不再挤进同一条公开承诺,而是进入 `extension model`
13
+ 这意味着:
12
14
 
13
- 因此,路线会分成两段:
14
-
15
- - `Core Expo Coverage`:主线收官点
16
- - `Long-tail Extension`:收官后的持续扩展模型
15
+ - `Managed/CNG` 仍是当前最成熟的已验证输入
16
+ - bare workflow、高频第三方 native packages、长尾第三方依赖,不再被定义成“收官后才考虑的另一条扩展路线”
17
+ - 它们会被逐步拉回同一条公开主线,只是进入主线的时间点和 evidence gate 不同
17
18
 
18
19
  ## 已完成里程碑
19
20
 
@@ -59,77 +60,171 @@
59
60
  - `expo-location`、`expo-camera` 进入 `preview`
60
61
  - Batch A+B preview capability 进入统一 sample / fixture / 文档 / 验收模型
61
62
  - 形成 `doctor -> sync-template -> bundle -> build-hap --mode debug` 的 preview onboarding baseline
62
- - 公开结论保持保守:可接入,不等于已 verified
63
+ - `doctor` 增加 `buildabilityRisk`
64
+ - 文档生成链收口到 marker block + renderer source data
63
65
 
64
66
  ## 当前主线
65
67
 
66
- ### v1.8 Capability Graduation + Fast Track Release
68
+ ### v1.8.0 Intake Hardening + Parallel Promotion
67
69
 
68
70
  目标日期:`2026-05-15`
69
71
 
70
- 目标:优先把“已经接入的 preview 能力”推进到可晋升状态,而不是只继续堆新模块数量。
72
+ 目标:先把“任何 Expo 项目都能被正确分类并拿到下一步”做硬,再把现有 preview 能力和主线阻塞项并行推进。
73
+
74
+ - `doctor` 增加:
75
+ - `coverageProfile`
76
+ - `gapCategory`
77
+ - `nextActions`
78
+ - 先把任意项目分进四类:
79
+ - `managed-core`
80
+ - `managed-native-heavy`
81
+ - `bare`
82
+ - `third-party-native-heavy`
83
+ - 四项 preview capability 进入同一个 graduation board:
84
+ - `expo-file-system`
85
+ - `expo-image-picker`
86
+ - `expo-location`
87
+ - `expo-camera`
88
+ - `react-native-gesture-handler` 从“矩阵外模糊探索”拉回主线:
89
+ - 必须可被 `doctor` 明确识别
90
+ - 必须有独立 fixture
91
+ - 必须有独立 sample / build / test coverage
92
+ - 来不及 verified 也不能继续停留在灰区
93
+ - sample 策略升级成双层:
94
+ - combined smoke
95
+ - per-capability acceptance
96
+
97
+ ### v1.8.x Capability Board Closeout
98
+
99
+ 目标日期:`2026-06-15`
100
+
101
+ 目标:把 v1.8.0 建好的 intake + promotion 架子收口到可持续执行的证据节奏。
102
+
103
+ - 每个 preview capability 必须单独维护:
104
+ - bundle evidence
105
+ - debug build evidence
106
+ - device acceptance record
107
+ - release acceptance record
108
+ - combined sample 只负责回归烟测,不再替代单 capability 证据
109
+ - `toolkit-config.json`、`doctor-report.json`、roadmap、support matrix、acceptance board 保持同源同步
110
+ - `latest` 仍不承接任何证据未闭环的 capability
111
+
112
+ ### v1.9.0 Bare Workflow Baseline + App Foundation Modules
113
+
114
+ 目标日期:`2026-08-31`
115
+
116
+ 目标:先把 bare workflow 拉进主线,并补齐最容易卡死真实项目的官方基础模块。
117
+
118
+ - bare workflow 正式进入主线里程碑
119
+ - 优先补齐:
120
+ - `expo-secure-store`
121
+ - `expo-asset`
122
+ - `expo-device`
123
+ - `expo-clipboard`
124
+ - `expo-haptics`
125
+ - 高频第三方 native dependencies 开始进入同一 capability catalog
126
+ - 对每个新能力继续坚持:
127
+ - fixture
128
+ - sample route
129
+ - doctor
130
+ - sync-template
131
+ - bundle
132
+ - debug build
133
+ - acceptance 记录
134
+
135
+ ### v1.9.1 Third-party Native Wave A
136
+
137
+ 目标日期:`2026-09-30`
138
+
139
+ 目标:优先清掉最容易挡住“任何 Expo 项目”的高频第三方 native blocker。
140
+
141
+ - 第一批高频第三方 native blocker 进入正式 onboarding:
142
+ - `react-native-gesture-handler`
143
+ - `react-native-safe-area-context`
144
+ - `react-native-screens`
145
+ - `@react-native-async-storage/async-storage`
146
+ - 建立第三方 native capability onboarding checklist:
147
+ - catalog entry
148
+ - shim / adapter strategy
149
+ - doctor diagnostics
150
+ - sample / fixture
151
+ - debug + release evidence
152
+ - 任何进入 Wave A 的 blocker,都不允许继续停留在“矩阵外模糊探索”
153
+
154
+ ### v1.9.2 Third-party Native Wave B + Regression Farm
155
+
156
+ 目标日期:`2026-10-31`
71
157
 
72
- - 建立 capability graduation 流水线:
73
- `doctor --strict`、`doctor --target-tier preview`、`sync-template`、`bundle`、`build-hap --mode debug`、device acceptance、release acceptance
74
- - `DoctorReport`、`toolkit-config.json`、support matrix 全部引入 `runtimeMode` 与 `evidence`
75
- - `expo-file-system`、`expo-image-picker` 优先冲刺 verified 所需的真 runtime 与 device 证据
76
- - `expo-location`、`expo-camera` 从 throw-only shim 推进到可验证的 adapter-backed preview
77
- - 发布节奏改成双轨:
78
- `latest` 只承接完整验收的 verified 能力,`next` 承接 preview fast track
158
+ 目标:扩大第三方 native 覆盖,并建立“任何 Expo 项目”目标需要的持续回归面。
79
159
 
80
- ### v1.9 App Foundation Modules
160
+ - 第二批高频第三方 native 依赖进入主线
161
+ - 引入 project-shape regression farm:
162
+ - managed core
163
+ - managed native heavy
164
+ - bare
165
+ - third-party native heavy
166
+ - 至少维护一组“未知项目导入 -> doctor 分类 -> nextActions -> sample/build gate”的持续回归案例
167
+ - 继续收口 preview capability 的 release evidence,尽量减少 `v2.0.0` 前的残留灰区
81
168
 
82
- 目标日期:`2026-07-31`
169
+ ### v1.10.0 Any-project Intake Freeze
83
170
 
84
- 目标:优先补齐最能解锁真实 Managed/CNG Expo 项目的基础官方模块。
171
+ 目标日期:`2026-11-15`
85
172
 
86
- - 依序接入:`expo-secure-store`、`expo-device`、`expo-asset`、`expo-clipboard`、`expo-haptics`
87
- - 每个能力都必须同时具备:
88
- fixture、sample route、doctor、sync-template、bundle、debug build、acceptance 记录
89
- - 完成 `expo-location`、`expo-camera` verified 晋升
90
- - 如果某项能力无法在同版晋升,则必须明确记录阻塞点与缺失证据,而不是模糊停留
173
+ 目标:先冻结“任何 Expo 项目”入口面的产品故事,确保不存在无法分类、无法给下一步、无法明确阻断原因的项目。
91
174
 
92
- ### v2.0 Managed/CNG Core Expo Coverage
175
+ - `doctor` 对任意 Expo 项目必须满足:
176
+ - 能分类
177
+ - 能指出 blocker 属于官方模块、bare workflow、还是第三方 native gap
178
+ - 能输出有顺序的 remediation actions
179
+ - roadmap / support matrix / acceptance board 与实际 catalog 保持零漂移
180
+ - 对外叙事从“更多项目开始进入主线”升级成“任何项目都有明确处理路径”
93
181
 
94
- 目标日期:`2026-10-31`
182
+ ### v1.11.0 Final Blocker Burn-down
95
183
 
96
- 定义:在单一 `verified` runtime matrix 下,把主流 `Managed/CNG Expo` 生产项目推进到完整可用、可构建、可交付。
184
+ 目标日期:`2026-11-30`
97
185
 
98
- - 官方高频 Expo 能力覆盖达到可交付水平
99
- - `latest` 只包含完整验收能力
100
- - release readiness 路径完整闭环
101
- - roadmap 对外叙事从“sample 可跑”升级为“核心 Managed/CNG Expo 项目可稳定交付”
186
+ 目标:把还会阻止“任何 Expo 项目可靠打包”的剩余高频 blocker 清到只剩极少数明确已知例外。
102
187
 
103
- 这是最早可以对外宣告“主目标收官”的时间点。
188
+ - 逐项清掉剩余高频 blocker:
189
+ - adapter 不稳定
190
+ - bare workflow release gap
191
+ - 高频第三方 native 缺失 release evidence
192
+ - 自动生成 sidecar 与真实项目 drift
193
+ - 对仍无法在 `v2.0.0` 前关闭的项,必须提前明确降级策略与替代路径
194
+ - `v2.0.0` 不接受“先宣布完成,再慢慢补长尾”
104
195
 
105
- ### v2.x Long-tail Native Module Extension
196
+ ### v2.0.0 Any Expo Project Reliable Packaging
106
197
 
107
- 目标日期:`2027-03-31` 前启动
198
+ 目标日期:`2026-12-31`
108
199
 
109
- 目标:把“任何 Expo 项目都能打包成鸿蒙 APP”从内建承诺,转成有边界、可扩展、可持续维护的 extension model。
200
+ 定义:任何 Expo 项目,只要依赖已经存在于主线 capability catalog 内,就能可靠打包成鸿蒙 App;`v2.0.0` 本身就是基本接近最完美、最最终的形态。
110
201
 
111
- - 引入第三方 native module extension / onboarding 模型
112
- - 建立 capability registry、adapter、fixture、acceptance 规范
113
- - 把未知或未验证第三方包从“公开承诺”切换为“显式扩展”
114
- - 不对未验证长尾模块提前给出正式可用声明
202
+ - 不再只覆盖“主流项目”,而是把“任何 Expo 项目都能可靠打包成鸿蒙 App”作为正式版本定义
203
+ - `Managed/CNG` bare workflow 都必须进入稳定交付路径
204
+ - 高频官方 Expo 模块与高频第三方 native blockers 必须已经进入同一公开 capability catalog
205
+ - `doctor -> sync-template -> bundle -> build-hap --mode debug|release` 必须对主线 catalog 内项目形成稳定闭环
206
+ - 只允许极少数、明确列名、已有替代策略的已知例外存在;不允许存在大类空白地带
115
207
 
116
208
  ## 长期方向
117
209
 
118
- - 先做到 `Managed/CNG Core Expo Coverage`
119
- - 再通过 `Long-tail Native Module Extension` 逼近“任意 Expo 项目”
120
- - 推进速度依赖 `next` 快速收敛反馈,但公开承诺继续由 `latest` 控制
210
+ - 所有输入最终都进入同一个 `mainline capability catalog`
211
+ - `v2.0.0` 就是“任何 Expo 项目可靠打包成鸿蒙 App”的正式目标版本
212
+ - `latest` 只由完整验收能力驱动
213
+ - `next` 用来加速收敛主线 backlog,而不是制造伪 verified 叙事
214
+ - roadmap 的关键问题不再是“要不要把某类项目算进主线”,而是“它何时进入主线、当前缺哪格 evidence、下一步怎么 unblock”
121
215
 
122
216
  ## 路线约束
123
217
 
124
- - `v2.0` 前继续坚持单一 verified runtime matrix
125
- - `v2.0` 前不把 bare Expo 拉进主线,只保留 `Managed/CNG`
218
+ - 当前公开 `verified` runtime matrix 仍然只有 `expo55-rnoh082-ui-stack`
126
219
  - `doctor --strict` 继续只代表 `verified`
127
- - `latest` 只承诺完整验收的 `verified` 能力
220
+ - `latest` 只承诺完整验收的 `verified`
128
221
  - `next` 可以承接 preview fast track,但不得伪装成 verified
222
+ - 没有 fixture、sample、文档、构建证据、人工验收记录的能力,不得晋升到 `verified`
129
223
  - roadmap、support matrix、README、acceptance 记录必须在同一 PR 同步更新
130
- - 没有 sample、fixture、文档、构建证据、人工验收记录的能力,不得晋升到 `verified`
224
+ - 目标扩大不等于当前对外承诺扩大;任何公开边界放宽都必须先有证据闭环
131
225
 
132
226
  ## 风险与顺延条件
133
227
 
134
- - 收官前提是从 `2026-03-31` 起持续具备 Harmony 模拟器或真机验证条件,并保持周级别验收节奏
135
- - 如果 Expo SDK / RNOH 在 `2026-05-15` 前发生大矩阵漂移,`v2.0` 收官点应顺延到 `2026-12-31` 左右
228
+ - 继续依赖 Harmony 模拟器或真机的稳定验证条件
229
+ - 继续依赖周级别的 acceptance 节奏,而不是只做 sample 展示
230
+ - 如果 Expo SDK / RNOH 在 `2026-05-15` 前发生较大矩阵漂移,`v1.8.x` 收口和 `v2.0.0` 时间点都需要相应顺延
@@ -27,6 +27,7 @@ expo-harmony env
27
27
 
28
28
  - `debug` 构建仍可继续做本地验证
29
29
  - `release` 构建不应视为 ready
30
+ - 可以直接从 `.expo-harmony/signing.local.example.json` 复制出 `.expo-harmony/signing.local.json` 再填入真实材料
30
31
 
31
32
  ## 推荐流程
32
33
 
@@ -40,6 +41,8 @@ expo-harmony build-hap --mode debug
40
41
  ### Release 验证
41
42
 
42
43
  ```bash
44
+ cp .expo-harmony/signing.local.example.json .expo-harmony/signing.local.json
45
+ $EDITOR .expo-harmony/signing.local.json
43
46
  expo-harmony env
44
47
  expo-harmony build-hap --mode release
45
48
  ```
@@ -1,10 +1,19 @@
1
- # v1.7 支持矩阵
1
+ # v1.8 支持矩阵
2
2
 
3
- `v1.7` 继续采用 tiered support model,但从现在开始把“层级”与“晋升距离”拆开表达:
3
+ `v1.8` 继续采用 tiered support model,但从现在开始把“层级”与“晋升距离”拆开表达:
4
4
 
5
5
  - `supportTier` 表示公开承诺层级
6
6
  - `runtimeMode` 表示当前运行时接入形态:`shim`、`adapter`、`verified`
7
7
  - `evidence` 表示距离 verified 还缺哪些证据格
8
+ - `evidenceSource` 表示每个证据格来自自动化、人工记录,还是当前无证据
9
+ - `coverageProfile` 表示当前项目属于哪条主线输入形态
10
+ - `nextActions` 表示 toolkit 为当前项目生成的有序下一步
11
+
12
+ 同时,`v1.8.x` 的 roadmap 已经改成单一 `mainline capability catalog` 方向:
13
+
14
+ - bare workflow 与第三方 native package 不再被描述成“收官后才考虑的另一条 extension 终局”
15
+ - `v2.0.0` 本身被定义成“任何 Expo 项目都能可靠打包成鸿蒙 App”的目标版本
16
+ - 但当前公开承诺依旧没有放宽;它们只是进入同一主线 backlog,而不是已经进入 `verified`
8
17
 
9
18
  `doctor --strict` 继续只代表 `verified`。
10
19
 
@@ -12,6 +21,7 @@
12
21
 
13
22
  唯一 `verified` 矩阵仍是 `expo55-rnoh082-ui-stack`。
14
23
 
24
+ <!-- GENERATED:support-matrix-verified-matrix:start -->
15
25
  | 项目 | 要求 |
16
26
  | --- | --- |
17
27
  | Expo SDK | `55` |
@@ -21,9 +31,10 @@
21
31
  | `@react-native-oh/react-native-harmony-cli` | `0.82.18` |
22
32
  | `@react-native-community/cli` | `20.x` |
23
33
  | `metro` | `0.83.x` |
24
- | App Shell 依赖 | `expo-router` `6.x`、`expo-linking` `55.x`、`expo-constants` `55.x` |
34
+ | 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
35
  | UI stack 依赖 | `react-native-reanimated` `3.6.0`、`react-native-svg` `15.0.0` |
26
36
  | 原生标识 | 至少设置 `android.package` 或 `ios.bundleIdentifier` |
37
+ <!-- GENERATED:support-matrix-verified-matrix:end -->
27
38
 
28
39
  ## Support Tiers
29
40
 
@@ -36,26 +47,31 @@
36
47
 
37
48
  ## Verified Allowlist
38
49
 
50
+ <!-- GENERATED:support-matrix-verified-allowlist:start -->
39
51
  - `expo`
52
+ - `@expo/metro-runtime`
40
53
  - `expo-constants`
41
54
  - `expo-linking`
42
55
  - `expo-router`
43
56
  - `react`
57
+ - `react-dom`
44
58
  - `react-native`
45
59
  - `expo-status-bar`
46
60
  - `@babel/runtime`
47
61
  - `@react-native-community/cli`
48
62
  - `metro`
49
- - `expo-harmony-toolkit`
50
63
  - `@react-native-oh/react-native-harmony`
51
64
  - `@react-native-oh/react-native-harmony-cli`
65
+ - `expo-harmony-toolkit`
52
66
  - `react-native-reanimated`
53
- - `react-native-svg`
54
67
  - `@react-native-oh-tpl/react-native-reanimated`
68
+ - `react-native-svg`
55
69
  - `@react-native-oh-tpl/react-native-svg`
70
+ <!-- GENERATED:support-matrix-verified-allowlist:end -->
56
71
 
57
72
  ## Capability Telemetry
58
73
 
74
+ <!-- GENERATED:support-matrix-capability-telemetry:start -->
59
75
  所有 capability 从现在开始都同时公开:
60
76
 
61
77
  - `supportTier`
@@ -64,31 +80,40 @@
64
80
  - `evidence.debugBuild`
65
81
  - `evidence.device`
66
82
  - `evidence.release`
83
+ - `evidenceSource.bundle`
84
+ - `evidenceSource.debugBuild`
85
+ - `evidenceSource.device`
86
+ - `evidenceSource.release`
67
87
 
68
88
  判读规则:
69
89
 
70
90
  - `runtimeMode=shim`:说明当前还在桥接或占位阶段,即使 bundle / debug build 已完成,也不应宣称 verified
71
91
  - `runtimeMode=adapter`:说明已经进入真实适配路径,但仍缺少某些验收证据
72
92
  - `runtimeMode=verified`:说明能力已进入正式承诺,且证据闭环完成
93
+ <!-- GENERATED:support-matrix-capability-telemetry:end -->
73
94
 
74
- 为了避免把“只差真机”与“当前子 API 还没实现到位”混在一起,`v1.7.x` 文档额外使用以下标记:
95
+ 为了避免把“只差真机”与“当前子 API 还没实现到位”混在一起,`v1.8.x` 文档额外使用以下标记:
75
96
 
76
97
  - `🟡 可用待晋升`:当前子集已经有可信实现,样例和模拟器路径可用;下一步主要缺真机 / release 证据
77
98
  - `⛔ 完全不支持`:能力仍在 catalog 外,或根本不在当前公开承诺范围
78
99
 
79
100
  ## Preview 能力
80
101
 
102
+ <!-- GENERATED:support-matrix-preview-capabilities:start -->
81
103
  | Expo 能力 | 当前层级 | runtimeMode | evidence | Harmony 依赖方向 | 受管权限 | 官方 sample route |
82
104
  | --- | --- | --- | --- | --- | --- | --- |
83
- | `expo-file-system` | `preview` | `adapter` | `bundle=yes, debugBuild=yes, device=yes, release=no` | toolkit-managed sandbox file adapter | 无新增必需权限 | `/file-system` |
84
- | `expo-image-picker` | `preview` | `adapter` | `bundle=yes, debugBuild=yes, device=yes, release=no` | toolkit-managed Harmony media picker adapter | `ohos.permission.CAMERA`、`ohos.permission.MICROPHONE`、`ohos.permission.READ_IMAGEVIDEO` | `/image-picker` |
85
- | `expo-location` | `preview` | `adapter` | `bundle=yes, debugBuild=yes, device=yes, release=no` | toolkit-managed `@ohos.geoLocationManager` TurboModule | `ohos.permission.LOCATION`、`ohos.permission.APPROXIMATELY_LOCATION`、`ohos.permission.LOCATION_IN_BACKGROUND`、`ohos.permission.ACCELEROMETER` | `/location` |
86
- | `expo-camera` | `preview` | `adapter` | `bundle=yes, debugBuild=yes, device=yes, release=no` | toolkit-managed embedded camera preview + control TurboModule | `ohos.permission.CAMERA`、`ohos.permission.MICROPHONE` | `/camera` |
105
+ | `expo-file-system` | `preview` | `adapter` | `bundle=yes[automated], debugBuild=yes[automated], device=yes[manual-doc], release=no[none]` | react-native-fs | 无新增必需权限 | `/file-system` |
106
+ | `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.CAMERAohos.permission.MICROPHONEohos.permission.READ_IMAGEVIDEO | `/image-picker` |
107
+ | `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.LOCATIONohos.permission.APPROXIMATELY_LOCATIONohos.permission.LOCATION_IN_BACKGROUNDohos.permission.ACCELEROMETER | `/location` |
108
+ | `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.CAMERAohos.permission.MICROPHONE | `/camera` |
109
+ <!-- GENERATED:support-matrix-preview-capabilities:end -->
87
110
 
88
111
  说明:
89
112
 
90
113
  - 当前四项 preview capability 都已经完成 preview baseline 的 bundle / debug build / route walkthrough
91
- - 四项 preview capability 都已经进入 `adapter` 路径;`device=yes` 只表示已有样例侧与运行时路径证据,仍不代表 verified 或 release-ready
114
+ - 四项 preview capability 都已经进入 `adapter` 路径;`device=yes[manual-doc]` 只表示已有人工设备验收记录,仍不代表 verified 或 release-ready
115
+ - 当前 preview baseline 的默认 evidenceSource 固定为:`bundle/debugBuild=automated`、`device=manual-doc`、`release=none`
116
+ - `v1.8.x` 开始,combined sample smoke 只负责总回归;每项 capability 还必须单独维护 device / release acceptance 记录,见 [acceptance/v1.8.x-capability-board.md](../acceptance/v1.8.x-capability-board.md)
92
117
  - `expo-file-system`
93
118
  - `🟡` 当前主路径是 UTF-8/base64 sandbox I/O、append/partial read、`getInfoAsync({ md5: true })` 与 `downloadAsync`
94
119
  - `expo-image-picker`
@@ -107,6 +132,7 @@
107
132
 
108
133
  ## UI Stack 配对规则
109
134
 
135
+ <!-- GENERATED:support-matrix-ui-stack:start -->
110
136
  canonical 包与 Harmony adapter 包固定为双向强制:
111
137
 
112
138
  - `react-native-reanimated` ↔ `@react-native-oh-tpl/react-native-reanimated`
@@ -123,6 +149,7 @@ canonical 包与 Harmony adapter 包固定为双向强制:
123
149
 
124
150
  - `@react-native-oh-tpl/react-native-reanimated`: `github:react-native-oh-library/react-native-harmony-reanimated#9fdbe676209937383907be0592291223c6ca7ad7&path:react-native-harmony-reanimated`
125
151
  - `@react-native-oh-tpl/react-native-svg`: `github:react-native-oh-library/react-native-harmony-svg#97c31d2f72559931d62fa84a9c86e86d343753d3&path:react-native-harmony-svg`
152
+ <!-- GENERATED:support-matrix-ui-stack:end -->
126
153
 
127
154
  ## `doctor`
128
155
 
@@ -147,11 +174,22 @@ expo-harmony doctor --project-root /path/to/app --target-tier preview
147
174
  - `capabilities[].evidence.debugBuild`
148
175
  - `capabilities[].evidence.device`
149
176
  - `capabilities[].evidence.release`
177
+ - `capabilities[].evidenceSource.bundle`
178
+ - `capabilities[].evidenceSource.debugBuild`
179
+ - `capabilities[].evidenceSource.device`
180
+ - `capabilities[].evidenceSource.release`
181
+ - `coverageProfile`
182
+ - `dependencies[].gapCategory`
183
+ - `nextActions[]`
150
184
 
151
185
  判读方式:
152
186
 
153
187
  - 任一 `evidence.* = false`,表示晋升到 verified 前仍缺证据
188
+ - `evidenceSource.device = manual-doc`,表示该证据来自人工验收记录,不应被表述成自动化设备验证
154
189
  - `runtimeMode !== verified`,表示即使已有部分证据,也仍不属于正式承诺
190
+ - `coverageProfile=bare`,表示当前项目已落入 bare workflow 主线规划,但不等于当前 matrix 已正式支持 bare
191
+ - `gapCategory=third-party-native-gap`,表示问题不应再被模糊描述成普通 matrix drift,而是主线 blocker
192
+ - `nextActions[]` 的顺序即 toolkit 当前建议的处理顺序
155
193
 
156
194
  当前公开阻断 issue code 继续包括:
157
195
 
@@ -184,13 +222,15 @@ toolkit 受管的核心产物仍包括:
184
222
 
185
223
  - `entry/src/main/module.json5` 的 `requestPermissions` 由 toolkit 根据已启用能力自动补齐
186
224
  - preview / experimental 能力的 Metro import path 通过 `.expo-harmony/shims/<package>` 接管
187
- - `toolkit-config.json` 会记录 capability 的 `runtimeMode` 与 `evidence`
225
+ - `toolkit-config.json` 会记录 capability 的 `runtimeMode`、`evidence` 与 `evidenceSource`
226
+ - `toolkit-config.json` 也会记录当前项目的 `coverageProfile` 与有序 `nextActions`
188
227
  - verified UI stack 依赖继续走现有 autolinking + `.har` 管理逻辑
189
228
 
190
229
  ## Release Tracks
191
230
 
192
231
  从 `v1.8` 开始,发布节奏按双轨设计:
193
232
 
233
+ <!-- GENERATED:support-matrix-release-tracks:start -->
194
234
  - `latest`
195
235
  - 只承接完整验收的 `verified` 能力
196
236
  - 只允许 verified sample / gate 作为发布依据
@@ -198,6 +238,7 @@ toolkit 受管的核心产物仍包括:
198
238
  - 承接 preview fast track
199
239
  - 必须至少通过 preview sample、bundle、debug build gate
200
240
  - 不得被描述为 verified 或 release-ready
241
+ <!-- GENERATED:support-matrix-release-tracks:end -->
201
242
 
202
243
  ## Capability Promotion Gate
203
244
 
@@ -211,8 +252,13 @@ toolkit 受管的核心产物仍包括:
211
252
  - release signing / release HAP 验收完成
212
253
  - 文档、矩阵、roadmap、acceptance 记录同 PR 更新
213
254
 
214
- ## 当前不在短期输入范围
255
+ ## 当前仍未进入正式公开承诺
215
256
 
216
257
  - bare Expo
217
258
  - 多 Expo / RNOH 并行 verified 矩阵
218
259
  - 任意第三方 native package 的即时正式承诺
260
+
261
+ 说明:
262
+
263
+ - 上述项目并没有从 roadmap 消失;它们会逐步进入同一条主线 capability catalog
264
+ - 这份 support matrix 只记录当前已经公开验证到哪一步,而不是未来愿景本身
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-harmony-toolkit",
3
- "version": "1.7.2",
3
+ "version": "1.8.0",
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
- "pack:check": "npm pack --dry-run",
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"