HarmonyOS鸿蒙Next中应用要适配Flutter版本较高目前鸿蒙还没有适配(3.44)鸿蒙目前适配的是3.35的版本 我这边如果想适配鸿蒙的话改怎么操作(包括一些依赖的改动和其他的一些变动需要怎么去修改, 目前没有在鸿蒙的官方找到这个说明)

HarmonyOS鸿蒙Next中应用要适配Flutter版本较高目前鸿蒙还没有适配(3.44)鸿蒙目前适配的是3.35的版本 我这边如果想适配鸿蒙的话改怎么操作(包括一些依赖的改动和其他的一些变动需要怎么去修改, 目前没有在鸿蒙的官方找到这个说明) 【问题描述】:Flutter版本较高目前鸿蒙还没有适配(3.44)鸿蒙目前适配的是3.35的版本 我这边如果想适配鸿蒙的话改怎么操作 是否有详细一点的说明/具体步骤参考等

【问题现象】:无

【版本信息】:Flutter3.44降级Flutter3.35适配鸿蒙

【复现代码】:无

【尝试解决方案】:无

8 回复

开发者您好,可以参考以下适配改动:

  • 三方库替换
    • 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进行编译

更多具体内容可以参考文章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,再改依赖和工程

  1. 把你现在 3.44 的项目 → 降级到 3.35 兼容代码
  2. 卸载官方 Flutter,安装鸿蒙定制版 Flutter 3.35.7-ohos
  3. 改造项目:添加 ohos 平台、替换所有原生插件为鸿蒙适配版
  4. 修复代码中 3.35 不兼容的 API
  5. 配置签名、编译 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),所以不能直接拿现有工程一键编译鸿蒙。

现在业内主流做法其实就两种:

  1. 降 Flutter 主版本(最稳)
  2. 双 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。

————————————————

六、最容易踩坑的几个地方

  1. WebView

很多 H5 功能:

下载、文件选择、JSBridge

都需要重新适配。

  1. 推送

Firebase 不存在。

必须:

Push Kit

或者极光鸿蒙版。

  1. 支付

Google Pay 不存在。

要:

华为 IAP

微信鸿蒙 SDK

支付宝鸿蒙 SDK。

  1. 登录

Google 登录没了。

要换:

华为账号登录。

  1. 文件路径

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.yamlsdk约束,指定3.35。
所有第三方插件需替换为鸿蒙兼容版本(如flutter_plugin_ohos),并在ohos目录下配置原生层。
无需改动业务代码,仅调整构建环境和依赖。

要将 Flutter 3.44 降级适配鸿蒙(当前仅支持 3.35),可执行以下步骤:

  1. 切换 Flutter SDK
    使用 FVM 或直接替换本地 Flutter 目录为 3.35 版本(可从 Flutter 官方归档下载)。运行 flutter --version 确认为 3.35。

  2. 调整项目配置
    pubspec.yaml 中将 environment.sdk 改为 '>=2.18.0 <3.0.0' 并指定 flutter: "3.35.0"。删除 pubspec.lock 后执行 flutter pub get

  3. 处理依赖冲突
    检查第三方库是否依赖高于 3.35 的 Flutter 版本,若有则替换为兼容版本或降级。例如,若某个包强制 sdk: ">=3.44.0",需寻找替代或修改版本约束(仅当库自身兼容 3.35 时)。

  4. 适配鸿蒙原生工程
    从鸿蒙 Flutter 仓库(gitee)获取 3.35 对应的 ohos 嵌入层模板,替换项目中的 ohos 目录,并确保 build.gradle 等指向正确的鸿蒙 SDK 与 Flutter 引擎。

完成以上操作即可在鸿蒙设备上正确编译运行。

回到顶部