从环境配置到模拟器跑通,我遇到了十几个坑,这篇全记下来了

最近尝试把一个 Flutter 插件适配到 OpenHarmony,本以为引擎层已经成熟,结果在环境配置和运行阶段踩了无数坑。这篇文章不写完整教程,只记录我遇到的具体问题和解决方法,希望能帮到同样在折腾的朋友。

一、环境准备

1.1 基础环境要求

工具 版本要求
Windows 10/11 64位
Flutter SDK OHOS 定制版
DevEco Studio 5.0+
OpenHarmony SDK API 22+
PowerShell 7.0+(推荐)

1.2 安装 DevEco Studio

  1. 访问华为开发者联盟:https://developer.harmonyos.com/cn/develop/deveco-studio
  2. 下载 Windows 版本安装包
  3. 安装时勾选 DevEco Studio 和 OpenHarmony SDK

1.3 配置 Flutter OHOS 环境

# 克隆 OHOS 定制版 Flutter SDK
git clone https://gitcode.com/openharmony-tpc/flutter_flutter.git

# 配置环境变量
$env:PUB_HOSTED_URL="https://pub.flutter-io.cn"
$env:FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"

# 验证环境
flutter doctor -v

二、踩坑经历

坑1:WHERE 不是内部或外部命令

现象:'WHERE' 不是内部或外部命令,也不是可运行的程序或批处理文件。

原因:C:\Windows\System32 不在系统 PATH 中,Flutter 找不到 where.exe。这个 where 命令是 Windows 自带的,用于查找可执行文件的位置,Flutter 内部依赖它来定位 PowerShell。

解决:

  1. 按 Win + R,输入 sysdm.cpl,回车
  2. 点击 “高级” 选项卡
  3. 点击 “环境变量”
  4. 在 “系统变量” 中找到 Path,双击
  5. 检查列表里有没有 C:\Windows\System32
  6. 如果没有,点击"新建",添加:
    C:\Windows\System32
    
  7. 点击"确定"保存所有窗口
    完成后再运行
    $env:PUB_HOSTED_URL="https://pub.flutter-io.cn"
    $env:FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
    flutter doctor -v
    
    就可以出现如下的代码
    在这里插入图片描述
    这个坑是困扰我时间最久的,最终我依靠ai的帮助解决了它。

坑2:PowerShell executable not found

现象:

Error: PowerShell executable not found.
Either pwsh.exe or PowerShell.exe must be in your PATH.

原因: 系统缺少 PowerShell 7,或者 PATH 中没有 PowerShell 的安装路径。Flutter 内部调用的是 pwsh.exe(PowerShell 7的可执行文件名),而不是系统自带的 powershell.exe。

解决:

# 安装 PowerShell 7
winget install --id Microsoft.PowerShell --source winget

# 添加到 PATH
$env:Path += ";C:\Program Files\PowerShell\7"

# 检查Powershell版本号
pwsh --version

运行成功的图像应与下图一致
在这里插入图片描述

坑3: 路径格式错误

现象:

Exists failed, path = ' <PUB Path>\git\cache\...'
文件名、目录名或卷标语法不正确。

原因: PUB_CACHE 环境变量被设置成了包含空格或特殊字符的无效值。注意错误信息中的路径开头有一个空格:’ ',这导致 Flutter 无法正确解析路径。

解决:

$env:PUB_CACHE =
 "$env:USERPROFILE\.pub-cache"
Remove-Item -Recurse -Force "$env:USERPROFILE\.pub-cache" -ErrorAction SilentlyContinue

处理完成后再运行flutter doctor -v就可以出现与坑一一致的图像了

坑4:Node 环境变量配置错误

现象:

Node is missing, please configure "node" to the environment variable PATH

原因:按照某些文档配置了 …/node/bin 到 PATH,但实际 DevEco Studio 自带的 Node 安装目录中没有 bin 文件夹。Node 的可执行文件直接放在 node 目录下。

解决:不要照搬文档的 …/node/bin 路径,而是根据实际目录结构配置:

❌ 错误配置:D:\DevEco Studio\tools\node\bin

✅ 正确配置:D:\DevEco Studio\tools\node

操作步骤:

1.打开 DevEco Studio 安装目录,找到 tools\node

2.确认 node.exe 直接在这个目录下

3.将这个路径添加到系统 PATH 中

坑5:项目名不能以数字开头

现象:

"14529" is not a valid Dart package name.
The name should consist of lowercase words separated by underscores, "like_this".
Use only basic Latin letters and Arabic digits: [a-z0-9_], 
and ensure the name is a valid Dart identifier (i.e., it does not start with a digit).

原因: Dart 包名不允许以数字开头。

解决: 使用字母开头,小写 + 下划线,如 my_plugin。

# 1. 切换到有效目录
cd C:\Users\14529\Desktop

# 2. 创建符合命名规范的项目
flutter create my_plugin

# 或者指定其他有效名称
flutter create my_flutter_plugin

坑6:pubspec.yaml 格式错误

现象: 编译失败,各种奇怪报错。

Error on line X: Expected a key while parsing a block mapping.

原因: YAML 语法问题,常见错误:

· name: my plugin ❌(有空格)
· publish to: ❌(应该是 publish_to:)
· dev dependencies: ❌(应该是 dev_dependencies:)

解决: 严格遵循 YAML 语法,冒号后面有空格,不能用空格代替下划线。

❌ 错误示例

name: my flutter plugin
publish to: ‘none’
dev dependencies:
flutter_test:
sdk: flutter

✅ 正确示例

name: my_flutter_plugin
publish_to: ‘none’
dev_dependencies:
flutter_test:
sdk: flutter

坑7:Flutter 找不到 OHOS 设备

现象:

> flutter run -d ohos
No supported devices found with name or id matching 'ohos'.

The following devices were found:
127.0.0.1:5555 (mobile) • 127.0.0.1:5555 • ohos-x64 • Ohos OpenHarmony-6.0.2.130 (API 22)

解决方法:

  1. 打开 DevEco Studio
  2. 菜单栏:Tools → Device Manager
  3. 点击 “New Emulator”
  4. 选择设备类型(如 Phone)
  5. 下载系统镜像(选择 API 版本)
  6. 点击 ▶️ 启动模拟器
  7. 等待模拟器完全启动(显示桌面)

坑8:缺少 flutter_embedding_debug.har

现象: 构建时提示缺少 .har 文件。

原因:Flutter 构建 OHOS 应用依赖一些二进制产物(artifacts),包括 flutter_embedding_debug.har 等文件。这些文件在首次构建时会自动下载,但如果网络问题或环境问题导致下载失败,就会出现这个错误。

解决:

flutter precache

代码运行成功截图如下
在这里插入图片描述
坑9:Cannot find module ‘@ohos/flutter_ohos’

现象: DevEco Studio 报错找不到 Flutter 模块。

Error: Cannot find module '@ohos/flutter_hvigor_plugin'
Require stack:
- .../ohos/hvigorconfig.ts

原因: hvigorconfig.ts 引用了 @ohos/flutter_hvigor_plugin 插件,但 oh-package.json5 中没有声明这个依赖。flutter_hvigor_plugin 是 Flutter 与 OHOS 构建系统 Hvigor 之间的桥接插件。

解决: 用 DevEco Studio 打开 ohos 目录,让它自动同步依赖。或手动在 oh-package.json5 中添加:

"dependencies": {
  "@ohos/flutter_ohos": "1.0.0",
  "@ohos/flutter_hvigor_plugin": "1.0.0"
}

坑10:文件编码乱码导致编译失败

现象:

Error when reading 'lib/my_plugin.dart': 维莘辉铼句写铼版...

原因: 文件保存格式不是 UTF-8,或者包含 BOM(Byte Order Mark)头。当 Flutter 编译器读取非 UTF-8 编码的文件时,无法正确解析其中的字符,导致编译失败。复制粘贴代码时很容易产生这个问题。

解决: 使用 VS Code

1.用 VS Code 打开问题文件
2.点击右下角的编码标识(如 “UTF-8” 或 “GBK”)
3.选择 “Save with Encoding”
4.选择 UTF-8(推荐选择 “UTF-8 without BOM”)

三、踩坑心得

  1. 环境配置的坑比代码多:90% 的时间花在配置上,写代码只用了 10%
  2. PATH 是万恶之源:大部分"找不到 xxx"的问题都跟 PATH 有关
  3. 用 DevEco Studio 打开 OHOS 项目:让它自动处理依赖,省去很多手动配置
  4. 编码问题很隐蔽:复制粘贴的代码可能带着 BOM,编译失败时优先检查

用一句话来说,Flutter 鸿蒙适配最大的坑不在代码,而在环境配置。 把 PATH、PUB_CACHE、SDK 路径、文件编码这几个基础问题搞定,90% 的错误就消失了。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐