徹底解決 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根目錄/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 路徑,先清空該配置(否則會覆蓋自動識別邏輯):
flutter config --ohos-sdk="" # 執行後無報錯即成功
2. 找到 DevEco Studio 內置 OHOS SDK 根目錄
DevEco Studio 安裝後,SDK 默認路徑(Mac 系統):
/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配置。
# 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。
七、方案優勢
- 永久生效:一次創建空目錄,後續所有 Flutter-OHOS 項目均能識別 SDK;
- 無需切換配置:不用在
flutter run和flutter build之間手動切換 SDK 路徑; - 同步解決 255 錯誤:SDK 識別成功後,Flutter 會自動生成編譯所需的
flutter_native_arm64/x86_64目錄,規避之前的ProcessException: exit code 255。