HarmonyOS鸿蒙Next中ohos平台适配flutter三方库,其中第五项第2步中关于flutter.har不存在的问题可以怎么处理

HarmonyOS鸿蒙Next中ohos平台适配flutter三方库,其中第五项第2步中关于flutter.har不存在的问题可以怎么处理 [https://gitee.com/openharmony-sig/flutter_samples/blob/master/ohos/docs/07_plugin/ohos平台适配flutter三方库指导.md#2修改相关配置文件)

2、修改相关配置文件

1)在path_provider目录内的oh-package.json5添加libs/flutter.har 依赖:

{
  "name": "path_provider",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "Index.ets",
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "@ohos/flutter_ohos": "file:libs/flutter.har"  //此处为添加的依赖
  }
}

关于file:libs/flutter.har文件是从哪来的,在后续打har包时提示不存在。

以下截图为flutter doctor及当前机器环境配置:

cke_10508.png

cke_10801.png


更多关于HarmonyOS鸿蒙Next中ohos平台适配flutter三方库,其中第五项第2步中关于flutter.har不存在的问题可以怎么处理的实战教程也可以访问 https://www.itying.com/category-92-b0.html

8 回复

方法B:直接配置依赖指向SDK里的har,不用复制文件

你不用把har文件复制到插件目录,直接在oh-package.json5 里写绝对路径或者相对路径,指向SDK里的har文件就行,比如:

"dependencies":{
"@ohos/flutter_ohos": "file:/Users/newstart/flutter_flutter/packages/flutter_ohos/ohos/har/flutter.har"
}

这样就不用手动复制文件,也不会出现"文件不存在"的问题。

3.检查并修正你的环境配置

从你的.zshrc配置看,有几个地方需要调,不然也会影响依赖解析:

  1. 你给鸿蒙版Flutter起了别名 fluoh,但你的 PATH 里还是优先走了FVM的Flutter,建议把别名调整清楚,避免命令混淆。
  2. 确保 ohpm 工具的路径已经正确加入PATH,你配置了 $TOOL_HOME/tools/ohpm/bin:$PATH,可以在终端执行 ohpm -v 验证一下是否能正常运行。
  3. 建议把 PUB_HOSTED_URL 和 FLUTTER_STORAGE_BASE_URL 换成国内镜像,避免依赖拉取失败:
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

4.额外的避坑操作

  • 清理缓存:执行 flutter clean 和 ohpm clean,再重新执行 ohpm install。
  • 检查插件目录结构:确保你的path_provider 插件的ohos目录结构正确,oh-package.json5 要放在 ohos/目录下,而不是插件根目录。
  • 确认你的DevEco Studio和OpenHarmony SDK版本和Flutter适配版本匹配,比如你用的 1.0.5 适配版,对应的OpenHarmony API版本一般是API 10/11,别用太高的版本。

更多关于HarmonyOS鸿蒙Next中ohos平台适配flutter三方库,其中第五项第2步中关于flutter.har不存在的问题可以怎么处理的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


别名处理了flutter,常清缓存问题不大。问题出在创建插件的ohos模块后没有预先编译一下,导致后续引用flutter.har包时,IDE不能自动引用;

“第五项 编写ohos插件的原生ets模块,第3步删除entry以及其他多余目录”在做删除步骤之前最好能先把工程构建编译一下,或者是有个示例能让工程正常运行,这样在Android Studio 下

"dependencies": {
  "[@ohos](/user/ohos)/flutter_ohos": "file:libs/flutter.har"   //此处为添加的依赖
}

查看 @ohos/flutter_ohos 时可以查看到出处。最终指向这三个中的一个

/Users/newstart/flutter_flutter/bin/cache/artifacts/engine/ohos-arm64/ohos-arm64-release/ohos-arm64-debug/ 文件夹下有个flutter.har文件,此时再拷贝出来或使用绝对路径。

我的flutter sdk没有flutter_ohos/这个目录。此前没有明白flutter.har文件的由来。

三、如果还是报错?

如果按上面的步骤配置完还是提示找不到,大概率是这两个问题:

  1. 路径写错了:比如相对路径 libs/flutter.har 是相对于 oh-package.json5 文件的位置,如果你在 ohos/ 目录下写 libs/flutter.har,那文件要放在 ohos/libs/ 里,别放错位置

  2. SDK版本不匹配:你的Flutter适配版和OpenHarmony SDK版本不兼容,建议用官方推荐的对应版本,比如 3.27.5-ohos-1.0.5 搭配DevEco Studio 4.1+, OpenHarmony SDK 4.0.10.13,

一、先搞明白:flutter.har 到底是啥、从哪来?

你遇到的核心问题,其实是 oh-package.json5 里写了 @ohos/flutter_ohos: “file:libs/flutter.har” 这个依赖,但项目里根本没有这个文件,打包就报错了。

这个 flutter.har 不是你自己凭空生成的,它是 OpenHarmony 适配版 Flutter SDK 里,专门给 HarmonyOS/OpenHarmony 平台用的核心依赖包,作用是给 Flutter 三方库提供平台交互的基础 API 支持。

二、分步解决:从根源上让这个文件“存在”

1. 先确认你的 OpenHarmony Flutter SDK 是否完整

从你的 flutter doctor 输出看,你用的是 3.27.5-ohos-1.0.5 这个鸿蒙适配版的 Flutter,首先要确认这个 SDK 里有没有自带这个依赖:

打开你的 Flutter SDK 目录,路径是:/Users/newstart/flutter_flutter/packages/flutter_ohos/ohos/har/

看看里面有没有 flutter.har 这个文件

如果有,直接复制到你 path_provider 插件目录的 libs/ 文件夹里(没有就自己建个 libs 文件夹)

如果没有,说明你的适配版 Flutter SDK 是残缺的,这就是问题根源

2. 补全缺失的 flutter.har(两种方法)

方法A:从官方完整适配 SDK 里提取(最稳妥)

去官方适配仓库拉取完整的 Flutter SDK:

官方镜像地址:https://gitcode.com/openharmony-tpc/flutter_flutter.git

切换到你当前用的分支(比如 3.27.5-ohos-1.0.5),拉取完整代码

进入 packages/flutter_ohos/ohos/har/ 目录,就能找到 flutter.har

把这个文件复制到你的 path_provider/ohos/libs/ 目录下,再修改 oh-package.json5 里的路径,确保路径和文件实际位置对应。

flutter.har是打包生成的,建议每次编译前调试运行:

flutter clean && flutter pub get && flutter run

如果是打包发布的app包运行:

flutter clean && flutter clean && flutter build app --release

如果仍有报错,可到ohos目录下删除har文件夹后再运行上面的命令。

你好,flutter.har 是 Flutter OpenHarmony 嵌入层产物,要通过命令构建生成,不是手动新建文件。从你贴的 fluoh doctor 能看到两个问题,不改会一直出错:1.Currently on an unknown channel  修复:

fluoh channel master
fluoh upgrade

2.环境变量没生效 执行命令

source ~/.zshrc
fluoh doctor -v

在HarmonyOS Next中,flutter.har 缺失通常因未执行 flutter build har --target-platform ohos 生成,或产物路径未添加到模块依赖。请确认项目根目录下 build/har/ 是否存在该文件,若不存在则重新执行构建命令;若存在,检查 oh-package.json5dependencies 是否正确引用相对路径。

flutter.har 是通过编译 Flutter 引擎或插件工程生成的 HarmonyOS 静态共享包,其常见来源与处理方法如下:

  1. 从 Flutter SDK 获取

    • 进入 Flutter SDK 目录,路径类似 flutter/bin/cache/artifacts/engine/ohos/,在其中可找到预置的 flutter.har(若存在)。将其复制到你的插件 ohos/libs/ 目录下即可。
  2. 通过命令编译生成

    • 在插件的 ohos 目录(即含有 oh-package.json5 的模块根目录)执行构建命令,例如:
      Build-Har
      
      hvigorw assembleHar --mode module -p product=default -p buildMode=release
      
      编译完成后会在 ohos/build/default/outputs/default/ 下生成 flutter.har,再手动复制到 libs/
  3. 确保依赖正确配置

    • 确认 oh-package.json5 中的依赖路径与真实文件位置一致:
      "dependencies": {
        "@ohos/flutter_ohos": "file:libs/flutter.har"
      }
      
    • 同时检查根目录的 ohos/entry/oh-package.json5 是否已正确引用该插件。

若以上路径仍无法找到 flutter.har,请确认当前使用的 Flutter SDK 版本已完整支持 HarmonyOS,并已成功执行 flutter pub get 及环境初始化。

回到顶部