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.
- package/README.en.md +25 -11
- package/README.md +27 -13
- 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 +130 -0
- package/build/core/env.js +1 -1
- package/build/core/report.js +162 -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 +3 -6
- package/build/core/template.js +49 -4457
- 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 +250 -0
- package/build/types.d.ts +19 -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 +12 -2
- package/docs/official-ui-stack-sample.md +2 -1
- package/docs/roadmap.md +146 -51
- package/docs/signing-and-release.md +3 -0
- package/docs/support-matrix.md +59 -13
- 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/roadmap.md
CHANGED
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## 收官定义
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
10
|
-
- `latest` 只承诺已经完成完整验收的 `verified` 能力
|
|
11
|
-
- 长尾第三方 native module 不再挤进同一条公开承诺,而是进入 `extension model`
|
|
13
|
+
这意味着:
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
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
|
-
-
|
|
63
|
+
- `doctor` 增加 `buildabilityRisk`
|
|
64
|
+
- 文档生成链收口到 marker block + renderer source data
|
|
63
65
|
|
|
64
66
|
## 当前主线
|
|
65
67
|
|
|
66
|
-
### v1.8
|
|
68
|
+
### v1.8.0 Intake Hardening + Parallel Promotion
|
|
67
69
|
|
|
68
70
|
目标日期:`2026-05-15`
|
|
69
71
|
|
|
70
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
169
|
+
### v1.10.0 Any-project Intake Freeze
|
|
83
170
|
|
|
84
|
-
|
|
171
|
+
目标日期:`2026-11-15`
|
|
85
172
|
|
|
86
|
-
|
|
87
|
-
- 每个能力都必须同时具备:
|
|
88
|
-
fixture、sample route、doctor、sync-template、bundle、debug build、acceptance 记录
|
|
89
|
-
- 完成 `expo-location`、`expo-camera` verified 晋升
|
|
90
|
-
- 如果某项能力无法在同版晋升,则必须明确记录阻塞点与缺失证据,而不是模糊停留
|
|
173
|
+
目标:先冻结“任何 Expo 项目”入口面的产品故事,确保不存在无法分类、无法给下一步、无法明确阻断原因的项目。
|
|
91
174
|
|
|
92
|
-
|
|
175
|
+
- `doctor` 对任意 Expo 项目必须满足:
|
|
176
|
+
- 能分类
|
|
177
|
+
- 能指出 blocker 属于官方模块、bare workflow、还是第三方 native gap
|
|
178
|
+
- 能输出有顺序的 remediation actions
|
|
179
|
+
- roadmap / support matrix / acceptance board 与实际 catalog 保持零漂移
|
|
180
|
+
- 对外叙事从“更多项目开始进入主线”升级成“任何项目都有明确处理路径”
|
|
93
181
|
|
|
94
|
-
|
|
182
|
+
### v1.11.0 Final Blocker Burn-down
|
|
95
183
|
|
|
96
|
-
|
|
184
|
+
目标日期:`2026-11-30`
|
|
97
185
|
|
|
98
|
-
|
|
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.
|
|
196
|
+
### v2.0.0 Any Expo Project Reliable Packaging
|
|
106
197
|
|
|
107
|
-
目标日期:`
|
|
198
|
+
目标日期:`2026-12-31`
|
|
108
199
|
|
|
109
|
-
|
|
200
|
+
定义:任何 Expo 项目,只要依赖已经存在于主线 capability catalog 内,就能可靠打包成鸿蒙 App;`v2.0.0` 本身就是基本接近最完美、最最终的形态。
|
|
110
201
|
|
|
111
|
-
-
|
|
112
|
-
-
|
|
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
|
-
-
|
|
119
|
-
-
|
|
120
|
-
-
|
|
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
|
-
- `
|
|
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
|
-
-
|
|
224
|
+
- 目标扩大不等于当前对外承诺扩大;任何公开边界放宽都必须先有证据闭环
|
|
131
225
|
|
|
132
226
|
## 风险与顺延条件
|
|
133
227
|
|
|
134
|
-
-
|
|
135
|
-
-
|
|
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
|
```
|
package/docs/support-matrix.md
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
# v1.
|
|
1
|
+
# v1.8 支持矩阵
|
|
2
2
|
|
|
3
|
-
`v1.
|
|
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` `
|
|
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.
|
|
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` |
|
|
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` |
|
|
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.CAMERA、ohos.permission.MICROPHONE、ohos.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.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND、ohos.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.CAMERA、ohos.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`
|
|
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` 与 `
|
|
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.
|
|
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
|
-
"
|
|
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"
|