1. 从零搭一个能跑起来的Flutter鸿蒙工程
做OpenHarmony上的Flutter开发,第一个门槛往往不是业务逻辑,而是环境。很多人在Windows上装完Flutter SDK,打开DevEco Studio准备建工程,结果发现两边根本不互通,折腾一天连hello world都跑不到板子上。我这边把环境准备到第一行命令能出画面的完整路径拆开讲,照着做基本不会卡壳。
1.1 工具链选型与版本匹配逻辑
先说结论:Flutter SDK要用OpenHarmony官方维护的分支,不能直接用Google主干版本。OpenHarmony的Flutter适配由OpenHarmony SIG组在维护,仓库地址是gitee.com/openharmony-sig/flutter_flutter,这个分支基于Flutter 3.7.x做了鸿蒙侧的引擎适配和Platform Channel桥接。你要是图省事直接flutter pub get跑主干,编译到ohos target的时候必然报一堆链接错误,因为鸿蒙的渲染层、字体加载、国际化资源路径跟Android根本不是一套。
版本匹配上有个很容易踩的坑:OpenHarmony的设备SDK版本、Flutter SDK版本、DevEco Studio版本三者要能对上。以我用的RK3568开发板为例,系统镜像烧的是OpenHarmony 3.2 Release,对应的SDK是ohos-sdk-windows_linux-public-4.0.0.6,DevEco Studio必须用4.0.0.6及以上(我用的是4.0.0.7)。Flutter分支选OpenHarmony-3.2-Release,这个Tag对应的引擎版本适配了API 9的接口,能直接调鸿蒙的Ability和分布式软总线能力。你要是用Dayu200或者RK3566,镜像和SDK版本同理,但设备树选型上会有差异,后面单独说。
版本对应关系整理成表格,方便排查问题:
| 组件 | 推荐版本 | 注意事项 |
|---|---|---|
| OpenHarmony系统 | 3.2 Release | 对应API 9,4.0.0.6 SDK |
| DevEco Studio | 4.0.0.7 | 必须高于或等于SDK版本 |
| ohos-sdk | 4.0.0.6 | 解压后配置local.properties时需要 |
| Flutter SDK | OpenHarmony-3.2-Release分支 | 不要用Google master |
| Dart SDK | 随Flutter分支自带 | 单独装Dart会版本错乱 |
| 开发板 | RK3568 / RK3566 / Dayu200 | 需要烧录对应系统镜像 |
1.2 环境变量、local.properties和命令行构建
环境变量这块我吃过亏,所以重点说。OpenHarmony版Flutter需要两个关键的环境变量:DEVECO_SDK_HOME指向DevEco Studio内置的SDK目录,一般是D:\DevEcoStudio\sdk;OHOS_SDK_HOME指向解压出来的ohos-sdk目录,解压后你会看到里面还有windows、linux这种平台子目录,配置的时候要指到平台子目录的上一级,否则构建脚本永远找不到toolchains。
命令行的构建流程是:
bash复制flutter create --platforms ohos my_app
cd my_app
flutter pub get
flutter build hap --debug
这里有个很关键的点:--platforms ohos这个参数只存在于OpenHarmony分支的Flutter CLI里,Google主干压根不认识ohos这个platform。另外在pubspec.yaml的同级目录下,需要手动创建local.properties文件,写入SDK路径:
properties复制sdk.dir=/path/to/ohos-sdk/windows
flutter.sdk=/path/to/flutter
如果你不写local.properties,DevEco Studio打开工程时会报"SDK not found",而命令行构建时又会去读环境变量,两边必须保持一致。项目里如果用了其他Native插件,还需要配置ohos.modules和签名信息,但初期只跑Flutter页面不需要签名,flutter build hap --debug默认用debug签名就能装上。
1.3 RK3568设备树选择的困惑与解法
OpenHarmony的RK3568开发板在烧录和内核编译时,设备树(DTS)的选择确实让人头大。网上搜"openharmony的rk3568有许多设备树到底咋选",基本能看到一堆人在问,原因是官方仓库的kernel/linux/linux-5.10里,arch/arm64/boot/dts/rockchip/目录下同时存在rk3568-evb1-ddr4-v10.dtb、rk3568-evb2-linux.dtb、rk3568-toybrick.dtb等十多个文件,每个对应不同的硬件变体。
我的选择逻辑很简单:先看开发板的丝印和原理图标识,再对内存颗粒和网络芯片型号。手上这块板子是EVB1样机,DDR4颗粒,网卡是RTL8211F,对应rk3568-evb1-ddr4-v10.dtb。如果用Dayu200开发套件,通常选rk3568-evb2-linux.dtb。设备树选错最典型的现象是启动日志在[rockchip] probe阶段卡住,或者以太网起不来、HDMI无输出。所以拿到板子第一件事就是确认型号,别看到RK3568就默认同一个dtb。
如果你不确定手里的板子对应哪个dtb,可以看烧录时的config.cfg文件,RK3568的partition配置里通常写了device_tree字段,直接照抄那个名字。烧录系统镜像的时候,parameter.txt里的device_tree分区如果对应不上,板子会反复重启在bootloader阶段,这个属于硬件适配问题,跟Flutter本身无关,但影响开发调试,提前排除能省很多时间。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 衣橱管家App的需求拆解与页面架构设计
衣橱管家这个项目,核心场景就一个:用户想知道今天穿什么。但背后要处理的东西不少——衣物数据怎么录入、天气数据从哪里来、推荐逻辑怎么算、主界面怎么让用户一眼看懂。我把它拆成四个模块:衣橱数据层、天气接入层、推荐引擎层、UI展示层,每层职责单一,后续要加功
