徹底解決 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 問題。

一、報錯場景復現

執行創建命令後,終端輸出如下(核心報錯標紅):

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根目錄/toolchainsSDK根目錄/native

即使你的 DevEco Studio 已安裝完整 SDK,但部分版本默認未創建這兩個空目錄,導致 Flutter 誤判 “無 SDK”,進而觸發報錯。

為什麼上面的配置能生效,看下面的代碼(路徑:你的Flutter運行環境目錄/packages/flutter_tools/lib/src/ohos/ohos_sdk.dart)

Flutter踩坑 錯誤解決整理_flutter

三、解決方案:3 步創建空目錄,讓 Flutter 識別 SDK(Mac 專屬)

1. 移除舊配置(避免衝突,關鍵前提)

如果之前通過 flutter config --ohos-sdk 手動配置過 SDK 路徑,先清空該配置(否則會覆蓋自動識別邏輯):

flutter config --ohos-sdk=""  # 執行後無報錯即成功

2. 找到 DevEco Studio 內置 OHOS SDK 根目錄

DevEco Studio 安裝後,SDK 默認路徑(Mac 系統):

/Applications/DevEco Studio.app/Contents/HarmonyOS SDK

✅ 驗證路徑準確性:

  1. 打開 DevEco Studio → 點擊頂部菜單欄「Preferences」(偏好設置);
  2. 左側導航欄找到「HarmonyOS SDK」;
  3. 複製右側 “SDK 存放路徑”(後續需用,若自定義過路徑以實際為準)。

3. 手動創建缺失的兩個空目錄(核心步驟)

打開終端,執行以下命令(將 SDK_PATH 替換為你複製的 SDK 根目錄):

如果之前flutter config配置了ohos-sdk,建議移除:flutter config --ohos-sdk=“”。

然後通過分析Flutter運行邏輯(最底下解釋這麼做原因),可打開DevStudio安裝目錄(Mac找打應用程序顯示包內容),按照下圖增加兩個空目錄即可。

Flutter踩坑 錯誤解決整理_flutter_02

至此不管DevStudio是什麼版本,再也不用因為報SDK找不到無法運行而煩惱。還不用因為配置–ohos-sdk,需要在執行Flutter run與Flutter builld之間切換SDK配置。

# 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 根目錄結構如下(新增兩個空目錄):

HarmonyOS SDK/
├─ toolchains/ (新增空目錄)
├─ native/     (新增空目錄)
├─ api/
├─ tool/
└─ ...(其他原有目錄)

四、驗證 SDK 識別成功

終端執行以下命令,查看 Flutter 配置:

flutter config --list

若輸出中包含 harmonyos-sdk-path: 你的 SDK 根目錄(例如 /Applications/DevEco Studio.app/Contents/HarmonyOS SDK),説明 Flutter 已成功識別 SDK!

五、重新創建 + 編譯運行 Flutter-OHOS 項目

1. 重新創建項目(無報錯驗證)

# 進入目標目錄(替換為你的項目存放路徑)
cd /Users/jianguo/Desktop/harmonyos/demo

# 創建支持 OHOS 平台的 Flutter 項目
flutter create --platforms ohos flutterdemo

此時不會再提示 No Hmos SDK found,將正常創建項目並自動下載依賴。

2. 編譯運行(解決後續 ProcessException 255)

進入項目根目錄,直接執行 flutter run(無需手動拼接複雜的 Hvigor 命令,Flutter 會自動調用編譯流程):

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”,需配置環境變量:

# 將 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

七、方案優勢

  1. 永久生效:一次創建空目錄,後續所有 Flutter-OHOS 項目均能識別 SDK;
  2. 無需切換配置:不用在 flutter runflutter build 之間手動切換 SDK 路徑;
  3. 同步解決 255 錯誤:SDK 識別成功後,Flutter 會自動生成編譯所需的 flutter_native_arm64/x86_64 目錄,規避之前的 ProcessException: exit code 255

參考資料