彻底解决 Flutter 开发 HarmonyOS 应用:No Hmos SDK found 报错
在使用 flutter create --platforms ohos 创建 HarmonyOS(简称 OHOS)相关 Flutter 项目时,很多开发者会遇到核心报错:No Hmos SDK found. Try setting the HOS_SDK_HOME environment variable,导致项目创建后无法编译运行。本文结合 Flutter 底层运行逻辑,提供一套无需复杂配置、永久生效 的解决方案,同时规避后续编译时的 ProcessException: exit code 255 问题。
一、报错场景复现
执行创建命令后,终端输出如下(核心报错标红):
bash
ianguo@jianguodeMacBook-Pro demo % flutter create --platforms ohos flutterdemo
Creating project flutterdemo...
Resolving dependencies in `flutterdemo`...
Downloading packages...
Got dependencies in `flutterdemo`.
**[!]** No Hmos SDK found. Try setting the HOS_SDK_HOME environment variable.
二、核心原因:Flutter 对 OHOS SDK 目录结构的强制校验
通过分析 Flutter 工具链源码(路径:你的 Flutter 环境目录/packages/flutter_tools/lib/src/ohos/ohos_sdk.dart),发现关键逻辑:Flutter 识别 OHOS SDK 时,不只是校验 SDK 是否存在,还会强制检查两个核心目录是否存在 ------SDK根目录/toolchains 和 SDK根目录/native。
即使你的 DevEco Studio 已安装完整 SDK,但部分版本默认未创建这两个空目录,导致 Flutter 误判 "无 SDK",进而触发报错。
为什么上面的配置能生效,看下面的代码(路径:你的Flutter运行环境目录/packages/flutter_tools/lib/src/ohos/ohos_sdk.dart)

三、解决方案:3 步创建空目录,让 Flutter 识别 SDK(Mac 专属)
1. 移除旧配置(避免冲突,关键前提)
如果之前通过 flutter config --ohos-sdk 手动配置过 SDK 路径,先清空该配置(否则会覆盖自动识别逻辑):
bash
flutter config --ohos-sdk="" # 执行后无报错即成功
2. 找到 DevEco Studio 内置 OHOS SDK 根目录
DevEco Studio 安装后,SDK 默认路径(Mac 系统):
plaintext
/Applications/DevEco Studio.app/Contents/HarmonyOS SDK
✅ 验证路径准确性:
- 打开 DevEco Studio → 点击顶部菜单栏「Preferences」(偏好设置);
- 左侧导航栏找到「HarmonyOS SDK」;
- 复制右侧 "SDK 存放路径"(后续需用,若自定义过路径以实际为准)。
3. 手动创建缺失的两个空目录(核心步骤)
打开终端,执行以下命令(将 SDK_PATH 替换为你复制的 SDK 根目录):
如果之前flutter config配置了ohos-sdk,建议移除:flutter config --ohos-sdk=""。
然后通过分析Flutter运行逻辑(最底下解释这么做原因),可打开DevStudio安装目录(Mac找打应用程序显示包内容),按照下图增加两个空目录即可。

至此不管DevStudio是什么版本,再也不用因为报SDK找不到无法运行而烦恼。还不用因为配置--ohos-sdk,需要在执行Flutter run与Flutter builld之间切换SDK配置。
bash
# 1. 替换为你的 OHOS SDK 根目录(必改!)
SDK_PATH="/Applications/DevEco Studio.app/Contents/HarmonyOS SDK"
# 2. 创建 toolchains 目录(--parents 确保父目录存在)
mkdir -p "$SDK_PATH/toolchains"
# 3. 创建 native 目录
mkdir -p "$SDK_PATH/native"
# 4. 赋予读写权限(避免 Mac 权限限制)
chmod 777 "$SDK_PATH/toolchains"
chmod 777 "$SDK_PATH/native"
操作完成后,SDK 根目录结构如下(新增两个空目录):
plaintext
HarmonyOS SDK/
├─ toolchains/ (新增空目录)
├─ native/ (新增空目录)
├─ api/
├─ tool/
└─ ...(其他原有目录)
四、验证 SDK 识别成功
终端执行以下命令,查看 Flutter 配置:
bash
flutter config --list
若输出中包含 harmonyos-sdk-path: 你的 SDK 根目录(例如 /Applications/DevEco Studio.app/Contents/HarmonyOS SDK),说明 Flutter 已成功识别 SDK!
五、重新创建 + 编译运行 Flutter-OHOS 项目
1. 重新创建项目(无报错验证)
bash
# 进入目标目录(替换为你的项目存放路径)
cd /Users/jianguo/Desktop/harmonyos/demo
# 创建支持 OHOS 平台的 Flutter 项目
flutter create --platforms ohos flutterdemo
此时不会再提示 No Hmos SDK found,将正常创建项目并自动下载依赖。
2. 编译运行(解决后续 ProcessException 255)
进入项目根目录,直接执行 flutter run(无需手动拼接复杂的 Hvigor 命令,Flutter 会自动调用编译流程):
bash
cd flutterdemo # 进入新创建的项目
flutter run # 自动编译 HAP 包并部署到设备/模拟器
六、关键补充:避免后续踩坑的 3 个检查
1. 确保 DevEco Studio 安装 SDK 核心组件
打开 DevEco Studio → Preferences → HarmonyOS SDK,勾选并安装以下组件:
- HarmonyOS SDK Platform(API 10+,推荐 API 10 或 11,需与 Flutter 兼容);
- Native Development Kit(NDK,对应
native目录的功能依赖); - Toolchains(部分版本默认未安装,手动勾选安装)。
2. 配置 ohpm 环境变量(避免依赖安装失败)
若终端执行 ohpm --version 提示 "command not found",需配置环境变量:
bash
# 将 DevEco Studio 内置的 ohpm 路径添加到系统环境
echo 'export PATH="$PATH:/Applications/DevEco Studio.app/Contents/ohpm/bin"' >> ~/.zshrc
# 生效配置(无需重启终端)
source ~/.zshrc
验证:执行 ohpm --version 输出版本号(如 1.2.0+)即成功。
3. 确认设备 / 模拟器已连接
- 真机:开启开发者模式 → 允许 USB 调试 → 终端执行
hdc list targets能看到设备 ID; - 模拟器:在 DevEco Studio 中创建 OHOS 模拟器(API 10+)→ 启动模拟器后再执行
flutter run。
七、方案优势
- 永久生效:一次创建空目录,后续所有 Flutter-OHOS 项目均能识别 SDK;
- 无需切换配置:不用在
flutter run和flutter build之间手动切换 SDK 路径; - 同步解决 255 错误:SDK 识别成功后,Flutter 会自动生成编译所需的
flutter_native_arm64/x86_64目录,规避之前的ProcessException: exit code 255。