官方适配库虽然提供了不同 Flutter 版本对应的三方库适配版本,且数量在不断增加,但仍有相当数量的第三方库尚未支持鸿蒙系统。此时就需要通过桥接的方式来完成适配。
每个三方库实现的业务逻辑不同,没有固定的公式,但有一套相似的底层逻辑,最终差异点在于具体的库功能实现上。
一、适配前期准备
对于不在官方适配单上的小众库,只能依靠自行适配。
1.1 创建 OHOS 模块
使用命令行工具初始化插件工程。
flutter create --template=plugin --platforms=ohos <project_name>
执行后会在项目中生成相应的目录结构。注意命名规范,建议使用小写英文字母,避免大写导致构建问题。
1.2 完善创建配置
在三方库的 pubspec.yaml 文件的 flutter 字段下添加 ohos 配置,确保构建系统识别到鸿蒙平台。
至此,OHOS 部分的基础框架已建立,接下来开始着手具体适配工作。
二、适配闭源库
2.1 生成功能模块介绍
创建完成后,查看 ohos 文件夹下的 src 目录,里面会包含 .ets 后缀的文件。系统会自动生成一个包含基础适配逻辑的代码框架。
其中导入的部分主要涉及从 @ohos/flutter_ohos 导出的核心接口和类:
FlutterPlugin:表示一个 Flutter 插件。FlutterPluginBinding:提供插件与 Flutter 引擎之间的绑定信息。MethodCall、MethodChannel等:用于处理 Flutter 与原生代码之间的方法调用和通信。
生成的 GetuiflutPlugin 类实现了 FlutterPlugin 和 MethodCallHandler 接口,表明它是一个可以处理 Flutter 方法调用的插件实例。
关键组件说明:
- channel:
MethodChannel类型的私有属性,负责 Flutter 与原生代码之间的通信。 - constructor:构造函数,通常用于初始化插件实例。
- getUniqueClassName:返回插件的唯一类名。
- onAttachedToEngine:插件被附加到 Flutter 引擎时调用,负责创建方法通道并设置处理器。
- onDetachedFromEngine:插件从引擎分离时调用,负责清除处理器并释放资源。
- onMethodCall:处理来自 Flutter 的方法调用,默认仅处理特定方法,其他未实现的方法需调用
result.notImplemented()。
2.2 适配的几种情况
具体适配方式主要分为两种情况:
- 有官方适配的 HAR 包:例如网易易盾、旷视等。这类相对简单,引入 HAR 包并参考 Android/iOS 端逻辑完成适配即可。
- 无官方适配的闭源库:例如友盟推送。这种情况相对麻烦,需要对 Android 和 iOS 端的逻辑理解较为深刻,难度较高,通常需要自行编写桥接代码。
2.3 正式开始适配
以 getuiflut 库为例,该库官方适配计划文档中未收录,需要手动适配。
2.3.1 GetuiflutPlugin 类
鸿蒙端适配只需关注鸿蒙环境,无需修改其他端代码。参考 文件夹下的文件,可适当借鉴 Android 的适配逻辑。


