Files
xianyan/packages/开发FFI plugin.md
Developer 35202b51e8 feat: 闲言APP v0.9.1 — 编辑器全面重写 + 迷你编辑器
- 标准编辑器: freezed数据模型 + 5Tab工具栏 + 多图层管理 + 文字增强 + 背景系统 + 导出链路
- 迷你编辑器: 极简6项功能(文字/字号/颜色/背景/预览/导出) + 三种调用方式(全屏/半屏/内嵌)
- 共享组件: GlassSlider/ColorPicker/FontPicker/TipsView
- 服务层: ExportService/ImageImportService/FontService/XycardService
- 设计系统: 统一主题令牌 + Liquid Glass风格
2026-04-20 07:48:07 +08:00

165 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 开发FFI plugin
可参考 [开发FFI插件](https://flutter.cn/docs/packages-and-plugins/developing-packages#plugin-ffi)。
## 1. 创建 package
```sh
flutter create --template=plugin_ffi hello --platforms=android,ios,ohos
```
## 2. 构建和绑定本地原生代码
pubspec.yaml 中指定 FFI插件的平台如下
```yaml
plugin:
platforms:
android:
ffiPlugin: true
ohos:
ffiPlugin: true
ios:
ffiPlugin: true
```
## 3. 绑定本地原生代码
为了使用本地原生代码,需要在 Dart 中进行绑定。
为了避免手工编写,它们由头文件 (src/hello.h) 中的 package:ffigen 生成。运行以下指令重新生成绑定:
```sh
dart run ffigen --config ffigen.yaml
```
## 4. 调用本地原生代码
运行时间很短的本地原生函数可以在任何 isolate 中直接调用。例如,请查看 `lib/hello.dart` 中的 sum。
运行时间较长的本地原生函数应在 [helper isolate](https://dart.cn/guides/language/concurrency#background-workers) 上调用,以避免在 Flutter 应用程序中掉帧。例如,请查看 lib/hello.dart 中的 sumAsync。
# 开发plugin
本文介绍了如何开发ohos平台的 Flutter Packages。
## 开发原生插件类型的Packages
### 1. 创建Package
```sh
flutter create --org com.example --template=plugin --platforms=android,ios,ohos hello
```
这将在 hello 目录下创建一个插件项目,其中包含以下内容:
`lib/hello.dart` 文件Dart 插件 API 实现。
`android/src/main/java/com/example/hello/HelloPlugin.kt` 文件Android 平台原生插件 API 实现(使用 Kotlin 编程语言)。
`ios/Classes/HelloPlugin.m` 文件iOS 平台原生插件 API 实现(使用 Objective-C 编程语言)。
`ohos/hello/src/main/ets/components/plugin/HelloPlugin.ets` 文件ohos 平台原生插件 API 实现 (使用 ArkTS 编程语言)。
`example/` 文件:
一个依赖于该插件并说明了如何使用它的 Flutter 应用。
#### 指定支持ohos平台
插件可以通过向 pubspec.yaml 中的 platforms map 添加 keys 来指定其支持的平台。例如,以下是 hello 插件的 flutter: map它支持Android、iOS和Ohos
```yaml
flutter:
plugin:
platforms:
android:
package: com.example.hello
pluginClass: HelloPlugin
ios:
pluginClass: HelloPlugin
ohos:
pluginClass: HelloPlugin
environment:
sdk: ">=2.19.6 <3.0.0"
flutter: ">=2.5.0"
```
### 2. 实现Package
#### 2.1 定义package API
打开 hello 主目录,并找到 lib/hello.dart 文件。
#### 2.2 编译example
```sh
cd hello/example
flutter pub get
flutter build hap --debug
```
#### 2.3 添加 ohos 平台代码 (.ets)
建议使用 DevEco-Studio 来编译 ohos 代码。
1. 启动 DevEco-Studio打开 hello/example/ohos 目录。
2. 配置签名信息: File->Project Structure->Signing Configs->Support HarmonyOS & Automatically generate signature->Sign in。
3. 在打开的网页中登录华为开发者账号然后回到DevEco-Studio保存签名信息。
4. 运行项目。
## 为现有的插件项目加入ohos平台的支持
如果现有plugin类型插件未支持ohos平台可在插件根目录执行如下指令用于添加对ohos平台的支持。
```sh
flutter create . --template=plugin --platforms=ohos
```
## 开发FFI插件
```sh
flutter create hello --template=plugin_ffi --platforms=ohos
```
## 参考文档
1. [Flutter Packages 的开发和提交](https://flutter.cn/docs/packages-and-plugins/developing-packages)
2. [开发原生插件](https://flutter.cn/docs/packages-and-plugins/developing-packages#plugin)
3. [OpenHarmony文档](https://docs.openharmony.cn/pages/v6.0/zh-cn/application-dev/application-dev-guide.md)
4. [HarmonyOS文档](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/start-overview)
# 开发package
可参考 [开发纯Dart的packages](https://flutter.cn/docs/packages-and-plugins/developing-packages#dart)。
## 1. 创建 package
```sh
flutter create --template=package hello
```
## 2. 实现 package
对于纯 Dart 库的 package只要在 `lib/<package name>.dart` 文件中添加功能实现,或在 lib 目录中的多个文件中添加功能实现。
https://docs.flutter.cn/packages-and-plugins/developing-packages