@ohos-cpf/3rdloop 0.0.11 → 0.0.13

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 (46) hide show
  1. package/lib/cli.js +2 -2
  2. package/package.json +1 -1
  3. package/vendor/Server/Routes/controllers/LoopEngineController.js +36 -3
  4. package/vendor/Server/Routes/controllers/OrchestratorController.js +193 -9
  5. package/vendor/Server/Skills/flutter-build-test/SKILL.md +252 -0
  6. package/vendor/Server/Skills/flutter-build-test/assets/BUILDENV_TEMPLATE.md +42 -0
  7. package/vendor/Server/Skills/flutter-build-test/assets/BUILD_REPORT_TEMPLATE.md +64 -0
  8. package/vendor/Server/Skills/flutter-build-test/assets/README_SECTION_TEMPLATE.md +78 -0
  9. package/vendor/Server/Skills/flutter-build-test/references/BUILD_TROUBLESHOOTING.md +128 -0
  10. package/vendor/Server/Skills/flutter-build-test/references/DOC_UPDATE_GUIDE.md +119 -0
  11. package/vendor/Server/Skills/flutter-build-test/references/FLVM_GUIDE.md +89 -0
  12. package/vendor/Server/Skills/flutter-build-test/scripts/build-matrix.cjs +374 -0
  13. package/vendor/Server/Skills/flutter-build-test/scripts/locate-example.cjs +189 -0
  14. package/vendor/Server/Skills/flutter-build-test/scripts/update-buildenv.cjs +171 -0
  15. package/vendor/Server/Skills/flutter-code-use/SKILL.md +316 -0
  16. package/vendor/Server/Skills/flutter-code-use/references/event-channel.md +440 -0
  17. package/vendor/Server/Skills/flutter-code-use/references/federated.md +295 -0
  18. package/vendor/Server/Skills/flutter-code-use/references/ffi-binding-translate.md +130 -0
  19. package/vendor/Server/Skills/flutter-code-use/references/ffi-compile-from-source.md +169 -0
  20. package/vendor/Server/Skills/flutter-code-use/references/ffi-fetch-at-build.md +161 -0
  21. package/vendor/Server/Skills/flutter-code-use/references/ffi-prebuilt-bundle.md +175 -0
  22. package/vendor/Server/Skills/flutter-code-use/references/ffi-rhttp-guide.md +235 -0
  23. package/vendor/Server/Skills/flutter-code-use/references/ffi-rust-cross-compile.md +514 -0
  24. package/vendor/Server/Skills/flutter-code-use/references/ffi.md +220 -0
  25. package/vendor/Server/Skills/flutter-code-use/references/method-channel.md +643 -0
  26. package/vendor/Server/Skills/flutter-code-use/references/monorepo.md +188 -0
  27. package/vendor/Server/Skills/flutter-code-use/references/ohos-api-pitfalls.md +717 -0
  28. package/vendor/Server/Skills/flutter-code-use/references/platform-view.md +448 -0
  29. package/vendor/Server/Skills/flutter-code-use/references/pure-dart.md +180 -0
  30. package/vendor/Server/Skills/flutter-code-use/references/texture.md +459 -0
  31. package/vendor/Server/Skills/flutter-demo-code-generator/SKILL.md +270 -0
  32. package/vendor/Server/Skills/flutter-demo-code-generator/assets/PAGE_TEMPLATES.md +544 -0
  33. package/vendor/Server/Skills/flutter-demo-code-generator/references/CODE_STANDARDS.md +328 -0
  34. package/vendor/Server/Skills/flutter-demo-code-generator/references/DEMO_DOC_PARSING.md +126 -0
  35. package/vendor/Server/Skills/flutter-demo-code-generator/references/EXAMPLES.md +629 -0
  36. package/vendor/Server/Skills/flutter-demo-code-generator/scripts/validate-flutter-demo.cjs +268 -0
  37. package/vendor/Server/Skills/flutter-demo-doc-generator/SKILL.md +227 -0
  38. package/vendor/Server/Skills/flutter-demo-doc-generator/assets/DEMO_DOC_TEMPLATE.md +78 -0
  39. package/vendor/Server/Skills/flutter-demo-doc-generator/references/COVERAGE_REPORT_PARSING.md +174 -0
  40. package/vendor/Server/Skills/flutter-demo-doc-generator/references/EXAMPLES.md +162 -0
  41. package/vendor/Server/Skills/flutter-demo-doc-generator/references/MCP_TOOL_GUIDE.md +123 -0
  42. package/vendor/Server/Skills/flutter-demo-doc-generator/references/OUTPUT_FORMAT.md +190 -0
  43. package/vendor/Server/Skills/flutter-demo-doc-generator/references/QUALITY_CHECKLIST.md +83 -0
  44. package/vendor/Server/Skills/flutter-demo-doc-generator/scripts/validate-skill.cjs +259 -0
  45. package/vendor/Server/Skills/flutter-library-demo-coverage/SKILL.md +175 -0
  46. package/vendor/VERSION +3 -3
@@ -0,0 +1,220 @@
1
+ # FFI 插件鸿蒙适配 — 路由
2
+
3
+ ## 适用条件
4
+
5
+ - `plugin_type_skill` 为 `type-ffi`
6
+
7
+ ---
8
+
9
+ ## §0 分诊(必读)
10
+
11
+ 读取 `.ohos-adaptation/02-planning.json` 的 `ffi_strategy` 字段,按下表加载**唯一**对应配方文件:
12
+
13
+ | `ffi_strategy` | 加载配方(相对本SKILL根目录) |
14
+ |---|---|
15
+ | `compile_from_source` | `references/ffi-compile-from-source.md` |
16
+ | `rust_cross_compile` | `references/ffi-rust-cross-compile.md` |
17
+ | `prebuilt_bundle` | `references/ffi-prebuilt-bundle.md` |
18
+ | `fetch_at_build` | `references/ffi-fetch-at-build.md` |
19
+ | `not_applicable` / `null` | 跳过本文件,走普通 plugin 路径 |
20
+
21
+ **不要全加载**,只加载对应的那一份配方。配方包含完整的工程搭建、编码实现和常见错误修复指导。
22
+
23
+ ---
24
+
25
+ ## §F caveat 长尾处理
26
+
27
+ 读取 `.ohos-adaptation/02-planning.json` 的 `ffi_strategy_caveat` 字段:
28
+
29
+ - **caveat 为 null**:严格按配方模板执行
30
+ - **caveat 非 null**:caveat 优先级高于配方模板,配方仅作参考骨架,具体落实按 caveat 描述
31
+
32
+ 常见 caveat 处理建议:
33
+
34
+ | caveat 关键词 | 处理方式 |
35
+ |---|---|
36
+ | "构建系统是 autotools" | 用 OHOS SDK 的 clang 跑 `./configure --host=aarch64-linux-ohos`,产物按 IMPORTED 模式接入 |
37
+ | "源码在 git submodule" | 在 `.gitmodules` 注 OHOS 分支,coding-library 阶段先 `git submodule update --init` |
38
+ | "FFI 仅 Linux/Windows 启用,OHOS 走非 FFI" | 改 plugin_type 为普通 plugin,不创建 cpp/ |
39
+ | "system lib 直绑" | 不需要构建,只在 Dart 层 `DynamicLibrary.open('libxxx.so')`;确认 OHOS 系统提供该库 |
40
+ | "需要前置 codegen" | 在 `build-profile.json5` hooks 中调用 codegen 工具 |
41
+ | "源码缺失" | 按 `prebuilt_bundle` 策略处理,尝试从上游获取预编译 `.so` |
42
+ | `rust_tls` | rustls/ring 在 OHOS 真机可能 TLS 握手挂起(HTTP 正常 HTTPS 无响应);按 `references/ffi-rust-cross-compile.md` §3 缓解方案处理;禁用 HTTP/3 |
43
+ | `frb` | flutter_rust_bridge 标准 Fork 版本滞后(2.7.0 vs 上游 2.12.0+),推荐 patch 标准版:Dart 侧添加 `Platform.isOhos`、Rust 侧编译 `dart_api_dl.c`(见 `references/ffi-rust-cross-compile.md` §4.4.1) |
44
+ | `http3` | OHOS 不支持 HTTP/3(UDP 行为未验证),Cargo.toml 中禁用 `http3` feature,Rust 代码中对应分支改为 no-op |
45
+
46
+ ### caveat 自动检测规则(仅 `rust_cross_compile` 策略)
47
+
48
+ Planning 阶段应扫描 `Cargo.toml` 和 `pubspec.yaml` 依赖,按以下模式自动标注 caveat(多个命中时用分号连接):
49
+
50
+ | 依赖特征 | caveat 关键词 |
51
+ |----------|-------------|
52
+ | 含 TLS/HTTP crate(reqwest、rustls、native-tls、openssl、ureq、hyper) | `rust_tls` |
53
+ | pubspec.yaml 含 `flutter_rust_bridge` | `frb` |
54
+ | Cargo.toml 含 HTTP/3 / QUIC 相关 crate 或 feature | `http3` |
55
+
56
+ 这些 caveat 不代表策略降级,而是提示 coding 阶段按上表执行对应处理。
57
+
58
+ ---
59
+
60
+ ## §G 反检验清单(加载配方前必跑)
61
+
62
+ 校验 `ffi_strategy` 是否与仓库实际内容一致:
63
+
64
+ | `ffi_strategy` | 必须满足 | 不满足时处理 |
65
+ |---|---|---|
66
+ | `compile_from_source` | `src/` 下存在 `.c` / `.cpp` 文件 | 降级,caveat 标注 "源码缺失,尝试 prebuilt_bundle" |
67
+ | `rust_cross_compile` | 仓库内存在 `Cargo.toml`(根目录或 `rust/` 子目录) | 视为错误,需回到 planning 重新决策 |
68
+ | `prebuilt_bundle` | 有 arm64-v8a 的 `.so` 来源(jniLibs / 上游 release / 自行编译) | 降级 `not_supported`,在 risk_items 标记 |
69
+ | `fetch_at_build` | 能定位下载脚本(Gradle task / cargokit hook / build.dart) | 降级,caveat 标注 "下载源不明" |
70
+
71
+ 反检验不通过时,在 `03-coding-library.json` 的 `risk_items` 中记录,并按降级策略调整实现方式。
72
+
73
+ ---
74
+
75
+ ## §H 全模式通用规则
76
+
77
+ 以下规则适用于所有 FFI 策略。
78
+
79
+ ### 平台检测
80
+
81
+ 必须使用 `Platform.isOhos`(继承 CLAUDE.md「平台检测标准」),与 Android 合并处理:
82
+
83
+ ```dart
84
+ import 'dart:ffi';
85
+ import 'dart:io' show Platform;
86
+
87
+ DynamicLibrary _openLibrary() {
88
+ if (Platform.isAndroid || Platform.isLinux || Platform.isOhos) {
89
+ return DynamicLibrary.open('libxxx.so');
90
+ }
91
+ if (Platform.isIOS || Platform.isMacOS) {
92
+ return DynamicLibrary.process();
93
+ }
94
+ if (Platform.isWindows) {
95
+ return DynamicLibrary.open('xxx.dll');
96
+ }
97
+ throw UnsupportedError('Unsupported platform: ${Platform.operatingSystem}');
98
+ }
99
+ ```
100
+
101
+ > **禁止**:不允许使用排除法(`!isAndroid && !isIOS && ...`)或 `Platform.operatingSystem == 'ohos'` 字符串比较。
102
+
103
+ ### .so 文件名校验与 OHOS 重命名规则(必须)
104
+
105
+ **OHOS 硬约束:安装器只识别 `.so` 后缀的文件,会丢弃 `.so.2`、`.so.1.1` 等带版本号的文件。** 即使 `.so.2` 被打包进 HAP,安装到设备时也不会出现在 `libs/arm64/` 目录下,导致 `DynamicLibrary.open()` 失败。
106
+
107
+ 因此,**所有预编译 `.so` 在打包前必须重命名为 `libxxx.so` 格式**(去除 soname 版本号后缀),Dart 层统一使用 `DynamicLibrary.open('libxxx.so')`。
108
+
109
+ | 上游实际文件名 | 安装到设备的文件名 | Dart 加载名 |
110
+ |---------------|-------------------|------------|
111
+ | `libmpv.so.2` | `libmpv.so` | `DynamicLibrary.open('libmpv.so')` |
112
+ | `libcrypto.so.1.1` | `libcrypto.so` | `DynamicLibrary.open('libcrypto.so')` |
113
+ | `libavcodec.so.58.134.100` | `libavcodec.so` | `DynamicLibrary.open('libavcodec.so')` |
114
+ | `libxxx.so`(无版本号) | `libxxx.so` | `DynamicLibrary.open('libxxx.so')` |
115
+
116
+ **重命名方式**(在 CMakeLists.txt 中执行):
117
+
118
+ ```cmake
119
+ # 方式 A:下载/解压后直接 file(RENAME)
120
+ if(EXISTS "${LIBS_DIR}/libmpv.so.2")
121
+ file(RENAME "${LIBS_DIR}/libmpv.so.2" "${LIBS_DIR}/libmpv.so")
122
+ endif()
123
+
124
+ # 方式 B:install 时 RENAME(注意:部分 OHOS 构建版本 RENAME 不生效,推荐方式 A)
125
+ install(FILES "${LIBS_DIR}/libmpv.so.2" DESTINATION ... RENAME libmpv.so)
126
+ ```
127
+
128
+ **校验步骤**(编码阶段必须执行):
129
+
130
+ 1. 确认 `ohos/libs/arm64-v8a/` 下的 `.so` 文件名是 `libxxx.so` 格式(无版本号后缀)
131
+ 2. 确认 CMakeLists.txt 的 `install(FILES ...)` 引用的文件名是重命名后的 `libxxx.so`
132
+ 3. 确认 Dart 层 `DynamicLibrary.open('libxxx.so')` 与打包文件名一致
133
+ 4. 构建后用 `hdc shell find /data/app/el1/bundle/public/<bundleName> -name '*.so*'` 验证设备上的实际文件名
134
+
135
+ > **常见错误**:上游 Release 提供的是 `libmpv.so.2`,agent 直接 `install(FILES ... libmpv.so.2)` → 构建成功但安装到设备后文件被丢弃 → 运行时报 "Cannot find libmpv.so"。
136
+
137
+ ### pubspec.yaml
138
+
139
+ ```yaml
140
+ flutter:
141
+ plugin:
142
+ platforms:
143
+ ohos:
144
+ ffiPlugin: true
145
+ ```
146
+
147
+ ### .so 落点
148
+
149
+ 编译产物 `.so` 必须落入 `ohos/libs/${OHOS_ARCH}/` 目录。`OHOS_ARCH` 通常为 `arm64-v8a`。
150
+
151
+ ### CMakeLists.txt + build-profile.json5 双配置(FFI .so 打包必须)
152
+
153
+ FFI 插件的 `.so` 要被打包到 HAR/HAP,**必须同时配置**两个文件。缺少任一个,`.so` 都不会出现在最终产物中。
154
+
155
+ **1. `ohos/src/main/cpp/CMakeLists.txt`**(即使没有 C/C++ 源码也需要)
156
+
157
+ 通过 `target_link_libraries()` 链接预编译 `.so`,通过 `install(FILES ...)` 将其打包。没有源码时使用 `dummy.c` 作为空编译入口。各 recipe 提供了具体 CMake 模板。
158
+
159
+ **2. `ohos/build-profile.json5`**(必须添加 `externalNativeOptions`)
160
+
161
+ ```json5
162
+ {
163
+ "apiType": "stageMode",
164
+ "buildOption": {
165
+ "externalNativeOptions": {
166
+ "path": "./src/main/cpp/CMakeLists.txt",
167
+ "abiFilters": ["arm64-v8a"]
168
+ }
169
+ },
170
+ "buildOptionSet": [],
171
+ "targets": [
172
+ {
173
+ "name": "default"
174
+ }
175
+ ]
176
+ }
177
+ ```
178
+
179
+ > **注意**:`flutter create -t plugin_ffi --platforms ohos .` 生成的默认 `build-profile.json5` **不包含** `externalNativeOptions`,必须手动添加。如果 `ohos/` 目录已存在(之前创建过),确认该配置存在。
180
+
181
+ ### oh-package.json5
182
+
183
+ ```json5
184
+ {
185
+ dependencies: {}
186
+ }
187
+ ```
188
+
189
+ > **`@ohos/flutter_ohos` 依赖由 Flutter 构建工具自动注入,无需手动添加。** 如果 `flutter create` 生成了 `"@ohos/flutter_ohos": "file:./libs/flutter.har"`,**必须将其移除**(将 dependencies 设为 `{}`),否则会导致 `Failed to resolve OhmUrl` 编译错误。
190
+
191
+ ### 工程创建
192
+
193
+ ```bash
194
+ flutter create -t plugin_ffi --platforms ohos .
195
+ ```
196
+
197
+ ### 条件编译宏
198
+
199
+ 鸿蒙 NDK 预定义宏:`__OHOS__`(鸿蒙平台标识)、`__aarch64__`(ARM64 架构)。
200
+
201
+ ```c
202
+ #if defined(__OHOS__)
203
+ // 鸿蒙特定代码
204
+ #elif defined(__ANDROID__)
205
+ // Android 特定代码
206
+ #endif
207
+ ```
208
+
209
+ ### FFI 不可适配判定
210
+
211
+ **必须先查 `flutter-adapted-library` Skill 数据库**,确认是否已有适配版本。
212
+
213
+ 不可适配的情况:
214
+ 1. **预编译二进制分发且无源码**:不包含 C/C++ 源码,只分发预编译 `.so`,且无法获取 arm64 版本
215
+ 2. **依赖 Android/iOS 专有系统库**:C/C++ 代码深度依赖平台特有 API(如 Android Binder),且鸿蒙无等效替代
216
+ 3. **ABI 不兼容**:仅有 x86 或 armeabi-v7a 的 `.so`,无法在 arm64 OHOS 上运行
217
+
218
+ **替代策略**(仅在确认不可适配后使用):
219
+ - 标记为 `not_supported`,在 Dart 层做平台降级
220
+ - 在 `01-analysis.json` 和 `02-planning.json` 中明确记录不可适配原因