Flutter OpenHarmony 工程结构剖析
本文说明 Flutter 在 OpenHarmony(OHOS) 侧的工程形态:纯 OHOS 应用、多平台应用、**为存量工程补充 ohos/**,以及 Plugin 的目录约定。
两类场景
| |
|---|
| 应用 | lib/ 与 pubspec.yaml 多端共享;宿主与构建在仓库的 ohos/ 下(DevEco / hvigor)。 |
| 插件 | Dart 在包根 lib/;平台实现在各平台子目录,OHOS 一般为包根下的 **ohos/**,example/ 可再带一套应用级 ohos/。 |
1. 新建仅支持 OHOS 的应用
减少无关平台目录、仓库更干净:
flutter create --platforms ohos my_ohos_appcd my_ohos_app
目录要点
my_ohos_app/├── lib/ # Dart 入口(如 main.dart)├── pubspec.yaml├── test/└── ohos/ # OpenHarmony 工程根 ├── AppScope/ # app.json5、应用级资源 ├── entry/ # 主模块:Ability、页面、module.json5 ├── oh-package.json5 # OHOS 侧依赖 ├── build-profile.json5 ├── hvigorfile.ts ├── hvigorconfig.ts ├── package.json # 常配合 flutter-hvigor-plugin └── node_modules/ # 本地路径因 SDK 安装位置而异,不必与文档逐字一致
2. 新建多平台应用(含 Android、iOS、OHOS 等)
flutter create my_appcd my_app
除 lib/、pubspec.yaml、test/ 外,顶层常见 **android/、ios/、web/、windows/、linux/、macos/、ohos/**。其中 ohos/ 内部布局与上一节「仅 OHOS」工程中的 ohos/ 一致(AppScope、entry、hvigor、oh-package 等)。
3. 为现有 Flutter 工程添加 OHOS
在工程根目录执行:
flutter create --platforms ohos .
成功后新增 **ohos/**,典型结构如下(与新建模板一致,便于对照 DevEco):
your_flutter_project/├── lib/ # 原有 Dart,多端复用├── android/ # 若曾创建├── ios/├── ohos/ # 本次新增│ ├── AppScope/│ │ ├── app.json5│ │ └── resources/│ ├── build-profile.json5│ ├── entry/│ │ ├── build-profile.json5│ │ ├── hvigorfile.ts│ │ ├── oh-package.json5│ │ └── src/main/│ │ ├── ets/ # EntryAbility、pages/Index 等│ │ ├── module.json5│ │ └── resources/│ ├── hvigorfile.ts│ ├── local.properties│ ├── oh-package.json5│ └── package.json├── pubspec.yaml└── ...
引擎与嵌入相关 HAR、原生库等多通过 oh-package.json5 / overrides 等 引入。
4. 插件(Plugin)与 OHOS
4.1 为已有插件增加 OHOS 平台
在插件根目录执行:
flutter create . --template=plugin --platforms=ohos
常见新增内容:
- **插件根目录
ohos/**:oh-package.json5、build-profile.json5、hvigorfile.ts、index.ets、src/main/...(ArkTS 实现以模板为准)。 - **
example/**:若生成示例应用,其下的 example/ohos/ 与独立应用的 ohos/结构同类,用于调试插件。
4.2 新建多平台插件(含 Android、iOS、OHOS)
flutter create --org com.example --template=plugin --platforms=android,ios,ohos hello
4.3 新建仅支持 OHOS 的插件
flutter create --org com.example --template=plugin --platforms=ohos hello
插件仓库层次(示意)
hello/├── lib/ # Dart:对外 API、MethodChannel 等├── ohos/ # OpenHarmony 平台实现├── example/│ ├── lib/│ └── ohos/ # 示例 App 的 OHOS 工程├── pubspec.yaml└── test/