HarmonyOS鸿蒙Next中应用要适配Flutter版本较高目前鸿蒙还没有适配(3.44)鸿蒙目前适配的是3.35的版本 我这边如果想适配鸿蒙的话改怎么操作(包括一些依赖的改动和其他的一些变动需要怎么去修改, 目前没有在鸿蒙的官方找到这个说明)
HarmonyOS鸿蒙Next中应用要适配Flutter版本较高目前鸿蒙还没有适配(3.44)鸿蒙目前适配的是3.35的版本 我这边如果想适配鸿蒙的话改怎么操作(包括一些依赖的改动和其他的一些变动需要怎么去修改, 目前没有在鸿蒙的官方找到这个说明) 【问题描述】:Flutter版本较高目前鸿蒙还没有适配(3.44)鸿蒙目前适配的是3.35的版本 我这边如果想适配鸿蒙的话改怎么操作 是否有详细一点的说明/具体步骤参考等
【问题现象】:无
【版本信息】:Flutter3.44降级Flutter3.35适配鸿蒙
【复现代码】:无
【尝试解决方案】:无
开发者您好,可以参考以下适配改动:
- 三方库替换
- Flutter Plugin中会涉及到平台代码,当适配HarmonyOS时,也需要对这些plugin也进行鸿蒙化。根据使用量排序已经适配了一批plugin,归档在GitCode上,使用方法可以参考Flutter三方库依赖引用及常见问题
- 针对尚未适配的插件可以去官方开发者论坛提需求,会有官方技术支持响应评估,可以选择功能相同或类似的鸿蒙化插件进行替换
- 针对自研插件,需要自行适配,文档可以参考开发plugin
- 平台代码适配 其它平台上可能开发了一些平台代码(Java、swift等),在适配时,需要将此部分代码使用ArkTS重写,经验评估: ArkTS代码行数 = 0.7 * Java代码行数
- C++相关适配 分为SO和源码两种:
- SO文件需要对源码进行交叉编译成HarmonyOS上可运行的SO,再使用
dart:ffi调用 - 源码可以使用FFI插件的方式,HarmonyOS上需要使用cmake进行编译
- SO文件需要对源码进行交叉编译成HarmonyOS上可运行的SO,再使用
更多具体内容可以参考文章Flutter应用如何快速适配HarmonyOS。
更多关于HarmonyOS鸿蒙Next中应用要适配Flutter版本较高目前鸿蒙还没有适配(3.44)鸿蒙目前适配的是3.35的版本 我这边如果想适配鸿蒙的话改怎么操作(包括一些依赖的改动和其他的一些变动需要怎么去修改, 目前没有在鸿蒙的官方找到这个说明)的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
背景知识:
现在官方 Flutter 3.44,鸿蒙只适配到 3.35.7,所以你不能直接用 3.44 跑鸿蒙,必须切到鸿蒙定制版 3.35.7,并把项目降级兼容到 3.35。
问题解决:
正常的 Andorid / IOS 跑在 3.44 版本上,鸿蒙的版本需要单独拉一套代码,配置 flutter 版本为 3.35.7。
创建一个鸿蒙应用工程:
flutter create --platforms ohos .
需要使用 DevEco Studio 打开项目,配置如下信息:
配置 pubspec.yaml:
environment:
# 从原来的 3.44.x 改成兼容3.35
sdk: '>=3.0.0 <3.10.0'
flutter: ">=3.35.0 <3.36.0"
dependencies:
flutter:
sdk: flutter
# 示例:替换为鸿蒙适配版(TPC仓库)
# 原来的 path_provider、shared_preferences、dio 等都要换
path_provider:
git:
url: "https://gitcode.com/openharmony-tpc/flutter_packages.git"
path: "packages/path_provider/path_provider"
ref: "br_path_provider-v2.1.5_ohos"
shared_preferences:
git:
url: "https://gitcode.com/openharmony-tpc/flutter_packages.git"
path: "packages/shared_preferences/shared_preferences"
ref: "br_shared_preferences-v2.2.2_ohos"
判断平台:
import 'dart:io';
if (Platform.isAndroid) {
// 安卓逻辑
} else if (Platform.isIOS) {
// iOS逻辑
} else if (Platform.operatingSystem == 'ohos') {
// 鸿蒙专属逻辑(比如用鸿蒙剪贴板、AppLinking等)
}
程序运行:
flutter devices
# 看到 HarmonyOS 设备/模拟器
flutter run -d 设备id
# 编译并安装到鸿蒙设备
打包:
flutter build hap --release
# 输出在 build/ohos/entry/build/outputs/hap/release
Flutter 适配不要直接按上游最新 3.44 迁移,先以当前 OHOS Flutter fork/官方适配版本为准。建议固定可用 Flutter SDK 和 engine 版本,再逐个检查插件是否有 OHOS 实现;没有 OHOS 端代码的插件,需要替换、fork 适配或用 MethodChannel 自己封装原生能力。
查了一下,目前社区官方适配的Flutter版本为3.35.x。那你适配的核心思路是将Flutter工程环境切换至鸿蒙支持的版本,并对项目依赖及平台特定代码进行相应调整。
Flutter 已有工程适配鸿蒙开发指南 | 华为开发者联盟
**整体思路:**先降级,再换鸿蒙 Flutter,再改依赖和工程
- 把你现在 3.44 的项目 → 降级到 3.35 兼容代码
- 卸载官方 Flutter,安装鸿蒙定制版 Flutter 3.35.7-ohos
- 改造项目:添加 ohos 平台、替换所有原生插件为鸿蒙适配版
- 修复代码中 3.35 不兼容的 API
- 配置签名、编译 HAP、真机 / 模拟器测试
一、环境准备与Flutter版本切换
鸿蒙平台需要使用社区维护的专用Flutter分支(flutter_flutter)。您需要安装此分支并切换到与鸿蒙兼容的版本(如3.35.8-ohos)。
获取鸿蒙Flutter分支:克隆社区维护的仓库,并设置环境变量。
git clone https://gitcode.com/openharmony-tpc/flutter_flutter.git
export PATH="$PATH:/path/to/flutter_flutter/bin"
export FLUTTER_ROOT=/path/to/flutter_flutter
切换至兼容版本:进入分支目录,切换到指定的鸿蒙适配版本。
git checkout 3.35.8-ohos-0.0.3
验证环境:运行 flutter doctor -v,确认输出中显示鸿蒙支持已就绪。同时,请确保已安装DevEco Studio及HarmonyOS SDK。
二、为现有项目添加鸿蒙平台支持
在你的Flutter项目根目录下,执行命令以生成鸿蒙平台的原生工程代码。
cd your_flutter_project
flutter create --platforms=ohos .
执行成功后,项目中将新增 ohos目录,其中包含了鸿蒙应用的入口、模块配置及资源文件。
三、处理依赖与第三方插件兼容性
这是适配过程中的关键环节,因为许多官方Pub插件尚未原生支持鸿蒙。
调整SDK约束:在 pubspec.yaml中,将Flutter SDK版本约束修改为鸿蒙分支支持的版本范围,例如:
environment: sdk: ‘>=3.0.0 <4.0.0’ flutter: “>=3.35.0”
替换为鸿蒙兼容的插件版本:对于项目中使用到的第三方插件(如path_provider、shared_preferences等),应替换为OpenHarmony三方库组件中心(TPC)维护的适配版本。在 pubspec.yaml中修改依赖声明:
dependencies:
path_provider:
git:
url: "https://gitcode.com/openharmony-tpc/flutter_packages.git"
path: "packages/path_provider/path_provider"
ref: "br_path_provider-v2.1.5_ohos"
你需要根据实际使用的插件,在TPC仓库中查找对应的鸿蒙分支。纯Dart编写的库通常无需改动。
处理未适配的插件:如果某个必需插件没有鸿蒙版本,需要为其自主开发鸿蒙平台实现。可参考联邦插件架构(如url_launcher),创建 your_plugin_harmony包,并实现ArkTS原生代码。
四、平台特定代码适配
在你的Dart业务代码中,若有针对平台(Android/iOS)的判断逻辑,需要补充对鸿蒙(OpenHarmony)的支持。
import 'dart:io';
if (Platform.isAndroid) {
// Android 逻辑
} else if (Platform.isIOS) {
// iOS 逻辑
} else if (Platform.isOhos) { // 添加鸿蒙平台判断
// 鸿蒙特定逻辑
}
五、构建、运行与调试
配置签名:使用DevEco Studio打开项目中的 ohos目录,在Project Structure中完成应用签名配置。
连接设备:使用 flutter devices命令确认已连接鸿蒙真机或模拟器。
运行调试:执行 flutter run -d [设备ID]将应用运行到鸿蒙设备上。
打包构建:执行 flutter build hap --release生成发布版的HAP安装包。
你现在的 Flutter 主版本(3.44)已经超过了 HarmonyOS Flutter 官方适配版本(目前主流还是 3.35.x),所以不能直接拿现有工程一键编译鸿蒙。
现在业内主流做法其实就两种:
- 降 Flutter 主版本(最稳)
- 双 Flutter SDK 并行维护(最现实)
目前大部分真正上线的鸿蒙 Flutter 项目,基本都是第二种。
你可以这样理解:
- Android/iOS 继续用 Flutter 3.44
- HarmonyOS 单独用 Flutter OH 3.35
- Dart 业务代码尽量共用
- 平台层和插件层做条件适配
这其实已经是目前 Flutter 鸿蒙适配的标准方案了。
你现在最推荐的落地方案:
一、先确认你的项目复杂度
先看你项目里有没有:
- 自定义 Plugin
- Camera
- WebView
- 蓝牙
- 推送
- 地图
- 支付
- 音视频
- FFmpeg
- FlutterBoost
- GetX/Riverpod/Bloc
- Firebase
如果只是普通 UI + 网络 + 状态管理:
适配鸿蒙难度不大。
如果大量依赖平台能力:
工作量主要在 plugin 鸿蒙化。
————————————————
二、目前不要硬怼 3.44
这个是重点。
目前 HarmonyOS Flutter 生态并没有完整跟进 3.44。
你如果硬升:
- engine 对不上
- plugin ABI 不兼容
- ohos 平台层缺失
- 三方库没有 ohos 实现
- 编译链不兼容
最后会陷入:
“业务代码没问题,但整个生态炸了”。
所以别想着:
“能不能我自己 patch 一下 engine”
这个成本非常高。
目前生产环境最稳的还是:
Flutter OH 3.35.x。
————————————————
三、推荐的真实生产方案(业内常用)
建议:
Android/iOS:
继续 Flutter 3.44
HarmonyOS:
单独拉一个 ohos 分支
使用 Flutter OH 3.35.7
业务层代码共用。
这是目前最稳的方案。
目录一般会变成:
project/
├ android/
├ ios/
├ ohos/
├ lib/
├ pubspec.yaml
然后:
flutter create --platforms ohos .
生成 ohos 工程。
————————————————
四、依赖库怎么处理(这是核心)
这是鸿蒙适配真正的重点。
不是 Flutter 版本。
而是:
插件生态。
因为很多 Flutter 插件:
只有 Android/iOS 实现。
没有 ohos 实现。
————————————————
五、目前插件适配有三种情况
① 已经有鸿蒙版
这种最舒服。
pubspec 直接换 Git 仓库:
dependencies:
shared_preferences:
git:
url: https://xxx
很多插件鸿蒙版都是 Git 依赖。
不是 pub.dev 官方包。
————————————————
② 官方没适配,但社区有
这种很多。
比如:
- webview
- video_player
- path_provider
- device_info
一般:
AtomGit
HarmonyOS 社区
GitCode
都能搜到。
————————————————
③ 完全没适配
这种就得自己写。
比如:
if (Platform.isAndroid) {
} else if (Platform.isIOS) {
} else if (Platform.operatingSystem == 'ohos') {
}
然后:
MethodChannel + ArkTS。
————————————————
六、最容易踩坑的几个地方
- WebView
很多 H5 功能:
下载、文件选择、JSBridge
都需要重新适配。
- 推送
Firebase 不存在。
必须:
Push Kit
或者极光鸿蒙版。
- 支付
Google Pay 不存在。
要:
华为 IAP
微信鸿蒙 SDK
支付宝鸿蒙 SDK。
- 登录
Google 登录没了。
要换:
华为账号登录。
- 文件路径
Android 的:
/storage/emulated/0/
鸿蒙不能直接这么玩。
————————————————
七、真正推荐你的做法(重点)
不要直接迁移主项目。
先做:
最小 Demo 验证。
建议步骤:
第一步:
创建 Flutter OH 3.35 工程。
第二步:
把你现有项目:
lib/
直接复制进去。
第三步:
先跑:
- 首页
- 路由
- 网络
- 状态管理
第四步:
再逐个解决 plugin。
这样最稳。
————————————————
八、关于 Flutter 3.44 怎么办
目前行业现状其实是:
鸿蒙 Flutter 生态整体滞后于 Flutter 官方。
所以:
跨平台项目如果必须支持 HarmonyOS NEXT:
通常会锁版本。
很多公司现在:
- Android/iOS 用高版本
- HarmonyOS 用兼容版本
这是正常现象。
不是你项目有问题。
————————————————
九、最后给你一个最现实建议
如果你项目:
强依赖 Flutter 新特性(3.40+)
那鸿蒙适配成本会明显变高。
如果项目:
主要是普通业务应用。
建议:
直接降到 Flutter OH 3.35.7。
这是目前最稳、坑最少、社区案例最多的方案。
可以向官方提需求升级适配版本
将Flutter SDK版本回退至鸿蒙适配的3.35,使用鸿蒙官方提供的Flutter引擎分支(如 HarmonyOS-flutter-3.35)。
修改项目pubspec.yaml中sdk约束,指定3.35。
所有第三方插件需替换为鸿蒙兼容版本(如flutter_plugin_ohos),并在ohos目录下配置原生层。
无需改动业务代码,仅调整构建环境和依赖。
要将 Flutter 3.44 降级适配鸿蒙(当前仅支持 3.35),可执行以下步骤:
-
切换 Flutter SDK
使用 FVM 或直接替换本地 Flutter 目录为 3.35 版本(可从 Flutter 官方归档下载)。运行flutter --version确认为 3.35。 -
调整项目配置
在pubspec.yaml中将environment.sdk改为'>=2.18.0 <3.0.0'并指定flutter: "3.35.0"。删除pubspec.lock后执行flutter pub get。 -
处理依赖冲突
检查第三方库是否依赖高于 3.35 的 Flutter 版本,若有则替换为兼容版本或降级。例如,若某个包强制sdk: ">=3.44.0",需寻找替代或修改版本约束(仅当库自身兼容 3.35 时)。 -
适配鸿蒙原生工程
从鸿蒙 Flutter 仓库(gitee)获取 3.35 对应的 ohos 嵌入层模板,替换项目中的ohos目录,并确保build.gradle等指向正确的鸿蒙 SDK 与 Flutter 引擎。
完成以上操作即可在鸿蒙设备上正确编译运行。

