Windows 11 搭建 OpenHarmony 版 Flutter 开发环境实战指南

作者根据实际搭建经验,总结从零开始搭建 OpenHarmony 版 Flutter 开发环境的完整过程,重点记录遇到的坑点和解决方案,帮助开发者少走弯路。


一、环境搭建简要流程

1.1 前置条件

在开始之前,需要确保已安装以下软件:

软件 版本要求 用途
Windows 11 任意版本 操作系统
Visual Studio Code 最新版 代码编辑器
Git 最新版 版本控制
DevEco Studio 最新版 HarmonyOS开发IDE
Java 17 LTS版本 Java运行环境
Android Studio 最新版 Android SDK

1.2 环境变量配置

关键环境变量清单:

# DevEco Studio 相关
TOOL_HOME=C:\Tools\Huawei\DevEco Studio
DEVECO_SDK_HOME=%TOOL_HOME%\sdk
HDC_HOME=%DEVECO_SDK_HOME%\default\openharmony\toolchains

# Flutter 相关
PUB_CACHE=C:\PUB
PUB_HOSTED_URL=https://pub.flutter-io.cn
FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

# PATH 添加
%TOOL_HOME%\tools\ohpm\bin
%TOOL_HOME%\tools\hvigor\bin
%TOOL_HOME%\tools\node
C:\Tools\flutter_flutter\bin

1.3 克隆源码

# 克隆 OpenHarmony 版 Flutter
git clone https://gitcode.com/openharmony-tpc/flutter_flutter.git
cd flutter_flutter

# 查看可用分支
git branch -a

# 切换到开发分支(以 oh-3.32.4-dev 为例)
git checkout -b oh-3.32.4-dev origin/oh-3.32.4-dev

1.4 创建项目

# 创建仅 OpenHarmony 平台项目
flutter create --platforms ohos my_harmony_app

# 或创建多平台项目
flutter create my_cross_platform_app

# 编译 HAP 包
cd my_harmony_app
flutter build hap --debug

二、常见问题及解决方案(重点)

在搭建过程中,我遇到了不少坑,下面详细记录问题和解决方法。

问题 1:flutter doctor 显示 Unable to locate Android SDK

现象:

Unable to locate Android SDK.

原因分析:
系统找不到 Android SDK 的安装路径。

解决方案:

  1. 确认 Android Studio 已安装并下载了 SDK
  2. 打开 Android Studio → FileSettingsLanguages & FrameworksAndroid SDK
  3. 记录 SDK 路径,通常为:
    C:\Users\你的用户名\AppData\Local\Android\Sdk
    
  4. 配置环境变量:
变量名 变量值
ANDROID_HOME C:\Users\你的用户名\AppData\Local\Android\Sdk
  1. 在 PATH 中添加:
    %ANDROID_HOME%\platform-tools
    %ANDROID_HOME%\tools
    

问题 2:cmdline-tools component is missing

现象:

cmdline-tools component is missing

原因分析:
Android SDK 命令行工具未安装。

解决方案:

  1. 打开 Android Studio
  2. 进入 FileSettingsLanguages & FrameworksAndroid SDK
  3. 切换到 SDK Tools 页签
  4. 勾选 Android SDK Command-line Tools (latest)
  5. 点击 OKApply 进行下载安装

问题 3:Some Android licenses not accepted

现象:

Some Android licenses not accepted.

解决方案:

在命令提示符中执行:

flutter doctor --android-licenses

然后一路输入 y 并按回车,直到所有协议都接受完成。


问题 4:pub upgrade 下载失败或速度很慢

现象:
执行 flutter pub get 时下载失败或速度极慢。

解决方案:

方法一:清理缓存

# 删除缓存目录
rmdir /s /q C:\Tools\flutter_flutter\bin\cache

方法二:配置国内镜像源

在环境变量中添加:

变量名 变量值
PUB_HOSTED_URL https://mirrors.tuna.tsinghua.edu.cn/dart-pub
FLUTTER_STORAGE_BASE_URL https://mirrors.tuna.tsinghua.edu.cn/flutter

或者使用官方源:

变量名 变量值
PUB_HOSTED_URL https://pub.dev
FLUTTER_STORAGE_BASE_URL https://storage.googleapis.com

注意:配置环境变量后必须重新打开命令提示符!


问题 5:Node.js 版本冲突(高频问题!)

现象:
编译构建时出现 Node.js 相关错误:

Error: Cannot find module 'xxx'

原因分析:
系统 PATH 中存在多个 Node.js 版本,DevEco Studio 自带的 Node.js 版本被其他版本覆盖。

解决方案:

  1. 检查当前 Node.js 版本:

    node --version
    
  2. 打开环境变量设置,编辑 系统变量 中的 Path

  3. 关键操作:将 DevEco Studio 自带的 Node.js 路径移到最前面:

    %TOOL_HOME%\tools\node
    
  4. 删除或注释其他 Node.js 路径(如果存在)

  5. 验证配置:

    # 重新打开命令提示符后
    node --version
    

    应该显示 DevEco Studio 自带的 Node.js 版本。

环境变量 PATH 顺序示例:

%TOOL_HOME%\tools\node           ← 放在最前面!
%TOOL_HOME%\tools\ohpm\bin
%TOOL_HOME%\tools\hvigor\bin
C:\Tools\flutter_flutter\bin
...

问题 6:flutter 命令找不到

现象:

C:\>flutter
'flutter' 不是内部或外部命令,也不是可运行的程序

解决方案:

  1. 检查 PATH 中是否添加了 Flutter 的 bin 目录
  2. 确保路径正确,例如:C:\Tools\flutter_flutter\bin
  3. 必须关闭所有命令提示符窗口,重新打开
  4. 如果还不行,尝试重启电脑

问题 7:环境变量配置后不生效

现象:
配置完环境变量后,输入命令仍然无效。

解决方案:

这是新手最容易遇到的问题!环境变量配置后,已打开的命令提示符不会自动更新。

正确操作:

  1. 配置完环境变量
  2. 关闭所有命令提示符窗口
  3. 重新打开命令提示符
  4. 验证命令是否可用

问题 8:模拟器启动失败

现象:
点击启动模拟器后,模拟器无法正常启动。

解决方案:

  1. 检查 BIOS 中是否启用了虚拟化功能(VT-x 或 AMD-V)
  2. 确保有足够的磁盘空间(至少 5 GB)
  3. 尝试重启 DevEco Studio
  4. 检查模拟器日志查看具体错误
  5. 删除并重新创建模拟器

问题 9:应用签名失败

现象:
配置签名时提示失败。

解决方案:

  1. 确保使用已实名认证的华为开发者账号(这是关键!)
  2. 检查网络连接是否正常
  3. 尝试重新登录华为账号
  4. 如果问题持续,联系华为开发者支持

问题 10:编译 HAP 包失败

现象:
执行 flutter build hap 时编译失败。

解决方案:

  1. 检查错误信息,根据具体错误进行排查
  2. 确保所有环境变量配置正确
  3. 确保 DevEco Studio SDK 已正确下载
  4. 尝试清理构建缓存:
    flutter clean
    flutter pub get
    flutter build hap --debug
    
  5. 检查项目配置是否正确

三、详细代码与配置

3.1 完整的环境变量配置脚本

创建一个 setup_env.bat 文件:

@echo off
REM ========================================
REM OpenHarmony Flutter 环境变量配置脚本
REM ========================================

echo 设置环境变量...

REM 设置 DevEco Studio 路径(请根据实际安装路径修改)
setx TOOL_HOME "C:\Tools\Huawei\DevEco Studio" /M
setx DEVECO_SDK_HOME "%TOOL_HOME%\sdk" /M
setx HDC_HOME "%DEVECO_SDK_HOME%\default\openharmony\toolchains" /M

REM 设置 Flutter 相关
setx PUB_CACHE "C:\PUB" /M
setx PUB_HOSTED_URL "https://pub.flutter-io.cn" /M
setx FLUTTER_STORAGE_BASE_URL "https://storage.flutter-io.cn" /M

REM 设置 Android SDK(请根据实际路径修改)
setx ANDROID_HOME "C:\Users\%USERNAME%\AppData\Local\Android\Sdk" /M

echo.
echo ========================================
echo 环境变量设置完成!
echo 请关闭所有命令提示符窗口后重新打开
echo ========================================
pause

3.2 PATH 变量配置

需要手动添加到系统 PATH 的路径:

# DevEco Studio 工具链
%TOOL_HOME%\tools\ohpm\bin
%TOOL_HOME%\tools\hvigor\bin
%TOOL_HOME%\tools\node

# Flutter
C:\Tools\flutter_flutter\bin

# Android SDK
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\tools
%ANDROID_HOME%\tools\bin

# HDC 工具
%HDC_HOME%

3.3 验证脚本

创建 verify_env.bat 验证环境配置:

@echo off
REM ========================================
REM 环境验证脚本
REM ========================================

echo 正在验证环境配置...
echo.

echo [1/7] 检查 Git...
git --version
if %errorlevel% neq 0 (
    echo [ERROR] Git 未安装或未添加到 PATH
) else (
    echo [OK] Git 已正确配置
)
echo.

echo [2/7] 检查 Java...
java -version
if %errorlevel% neq 0 (
    echo [ERROR] Java 未安装或未添加到 PATH
) else (
    echo [OK] Java 已正确配置
)
echo.

echo [3/7] 检查 Node.js...
node --version
if %errorlevel% neq 0 (
    echo [ERROR] Node.js 未安装或未添加到 PATH
) else (
    echo [OK] Node.js 已正确配置
)
echo.

echo [4/7] 检查 Flutter...
flutter --version
if %errorlevel% neq 0 (
    echo [ERROR] Flutter 未安装或未添加到 PATH
) else (
    echo [OK] Flutter 已正确配置
)
echo.

echo [5/7] 检查 OHPM...
ohpm --version
if %errorlevel% neq 0 (
    echo [ERROR] OHPM 未安装或未添加到 PATH
) else (
    echo [OK] OHPM 已正确配置
)
echo.

echo [6/7] 检查 HDC...
hdc --version
if %errorlevel% neq 0 (
    echo [ERROR] HDC 未安装或未添加到 PATH
) else (
    echo [OK] HDC 已正确配置
)
echo.

echo [7/7] 运行 Flutter Doctor...
flutter doctor -v
echo.

echo ========================================
echo 验证完成!
echo ========================================
pause

3.4 创建 Flutter 项目脚本

@echo off
REM ========================================
REM 创建 OpenHarmony Flutter 项目
REM ========================================

if "%1"=="" (
    echo 用法: create_ohos_project.bat 项目名称
    echo 示例: create_ohos_project.bat my_app
    pause
    exit /b 1
)

set PROJECT_NAME=%1

echo 正在创建 OpenHarmony Flutter 项目: %PROJECT_NAME%
echo.

flutter create --platforms ohos %PROJECT_NAME%

if %errorlevel% equ 0 (
    echo.
    echo ========================================
    echo 项目创建成功!
    echo 项目路径: %CD%\%PROJECT_NAME%
    echo.
    echo 下一步:
    echo   cd %PROJECT_NAME%
    echo   flutter build hap --debug
    echo ========================================
) else (
    echo.
    echo [ERROR] 项目创建失败,请检查错误信息
)

pause

3.5 清理缓存脚本

@echo off
REM ========================================
REM 清理 Flutter 缓存
REM ========================================

echo 正在清理 Flutter 缓存...
echo.

echo [1/3] 清理 Flutter bin 缓存...
if exist "C:\Tools\flutter_flutter\bin\cache" (
    rmdir /s /q "C:\Tools\flutter_flutter\bin\cache"
    echo [OK] bin\cache 已删除
) else (
    echo [SKIP] bin\cache 不存在
)
echo.

echo [2/3] 清理 PUB 缓存...
if exist "C:\PUB\.pub-cache" (
    rmdir /s /q "C:\PUB\.pub-cache"
    echo [OK] PUB 缓存已删除
) else (
    echo [SKIP] PUB 缓存不存在
)
echo.

echo [3/3] 清理项目缓存...
if exist ".dart_tool" (
    rmdir /s /q ".dart_tool"
    echo [OK] .dart_tool 已删除
) else (
    echo [SKIP] .dart_tool 不存在
)
echo.

echo ========================================
echo 缓存清理完成!
echo 运行 'flutter pub get' 重新获取依赖
echo ========================================
pause

3.6 编译和运行脚本

@echo off
REM ========================================
REM 编译并运行 HAP 包
REM ========================================

echo [1/3] 清理旧的构建...
flutter clean
echo.

echo [2/3] 获取依赖...
flutter pub get
echo.

echo [3/3] 编译 HAP 包(Debug)...
flutter build hap --debug
echo.

if %errorlevel% equ 0 (
    echo ========================================
    echo 编译成功!
    echo HAP 文件位置: build\hap\debug\
    echo.
    echo 请使用 DevEco Studio 打开 ohos 目录
    echo 并在模拟器或真机上运行
    echo ========================================
) else (
    echo [ERROR] 编译失败,请检查错误信息
)

pause

四、项目配置文件

4.1 pubspec.yaml 示例

name: my_harmony_app
description: A Flutter OpenHarmony project.
version: 1.0.0+1

environment:
  sdk: '>=3.0.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.6

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^3.0.1

flutter:
  uses-material-design: true

4.2 main.dart 示例

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter OpenHarmony Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'OpenHarmony Flutter 首页'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              '你已经按下了按钮这么多次:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

五、调试技巧

5.1 查看设备连接状态

# 列出所有设备
hdc list targets

# 查看设备信息
hdc device info

# 查看已安装的应用
hdc shell pm list packages

5.2 日志查看

# 查看 Flutter 日志
flutter logs

# 查看 HarmonyOS 系统日志
hdc shell hilog

# 过滤特定标签的日志
hdc shell hilog -T MyAppTag

5.3 常用调试命令

# 清理构建缓存
flutter clean

# 获取依赖
flutter pub get

# 升级依赖
flutter pub upgrade

# 运行 Doctor 诊断
flutter doctor -v

# 分析代码
flutter analyze

六、总结

通过本文的实战指南,你应该能够成功搭建 OpenHarmony 版 Flutter 开发环境。以下是关键要点:

  1. 环境变量是关键:确保所有环境变量正确配置,特别是 PATH 的顺序
  2. 必须重启终端:配置环境变量后务必关闭所有命令提示符并重新打开
  3. 使用国内镜像:配置 PUB_HOSTED_URL 和 FLUTTER_STORAGE_BASE_URL 可显著提升下载速度
  4. Node.js 版本:确保 DevEco Studio 自带的 Node.js 优先于其他版本
  5. 实名认证账号:签名需要已实名认证的华为开发者账号

如果遇到其他问题,可以:


七、参考资源

欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net


作者声明:本文基于实际搭建经验编写,如遇问题欢迎在评论区交流讨论。

原文来源

Logo

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

更多推荐