去年接了个智能硬件朋友的私活,要给一台家用香薰机做配套App。他给的需求很明确:国内客户主要用鸿蒙设备,后续还得覆盖iOS和安卓,团队里没有原生鸿蒙开发经验,但会Flutter。这个项目我可以说是踩着坑走完的,从环境配置到最终打成hap包上线,中间有太多文档里不写、论坛里也没人系统讲的问题。这篇文章就把整个过程完整复盘一遍,包括为什么选Flutter做鸿蒙、香薰规划功能怎么拆、数据库怎么设计、通道怎么打通、以及打包签名那些“临门一脚”的细节。准备用Flutter切入鸿蒙开发的同学,或者正在做智能家居App的人,这篇应该能帮你省下不少弯路。
1. 从香薰机需求到技术选型,我是怎么判断的
1.1 先想清楚产品到底要做什么
很多人一上来就谈技术框架,但真正的问题在产品侧。香薰机App不是做一个“开关”就完事,用户需要的是一整套“环境规划”能力。我花了两天时间跟朋友反复确认,最终把需求拆成了五块:
- 设备管理:绑定、解绑、多台设备切换,这是所有物联网类App的地基。
- 场景模式:按使用场景区分,比如睡眠模式、冥想模式、书桌专注模式、客厅提神模式,每种模式对应不同的香型、雾量档位、持续时长。
- 定时规划:用户可以设置“每天晚上22点开启睡眠模式”“工作日早上8点开启提神模式”之类的周期任务。
- 精油库存管理:记录家里有哪些精油、剩余用量、使用频次,到期提醒补充。
- 数据统计:每天实际运行了多久、用了哪个香型、湿度温度变化等,这些数据后续可以做健康建议。
这里的核心不是“控制设备”,而是“结合时间、场景、库存做自动化规划”。产品定位清楚了,技术选型才有依据——你需要的不是一个单纯的SDK封装,而是一个具备本地状态管理、定时调度、数据持久化能力的完整应用框架。
1.2 Flutter和鸿蒙结合的底层逻辑
技术选型阶段,团队里其实有过争论。有人建议直接用ArkUI(ArkTS)原生开发,理由是鸿蒙生态官方支持力度大;也有人建议用uni-app,觉得国内生态支持更全。最后我们还是定了Flutter,判断维度有三条。
第一,跨端复用是硬需求。朋友的公司不是纯软件公司,他们还要做iOS版和安卓版,一套Flutter代码可以同时覆盖三端,人力成本直接压缩到原来的三分之一。如果每一端都写原生,这个项目的预算根本扛不住。
第二,Flutter的渲染机制更适合IoT类应用。香薰机的控制界面要经常刷新状态(当前雾量、剩余水量、温度传感器读数),Flutter的声明式UI配合组件级刷新,做这种高频小数据量的界面更新非常舒服,不会像传统原生开发那样需要手动管理大量View state。
第三,鸿蒙侧对Flutter的适配已经走过了最难的阶段。底层引擎的兼容性问题基本解决,现在的主要矛盾在插件生态。这一点我后面会用一整章来讲,这也是这个项目里踩坑最多的地方。
1.3 鸿蒙生态的边界条件要提前摸底
这里必须先说清楚一个残酷的现实:Flutter跑在鸿蒙上,不等于所有Flutter插件都能跑在鸿蒙上。你在pub.dev上看到的每一个插件,底层都调用的是Android或iOS的系统API,到了鸿蒙这边,如果没有厂商或者社区做了HarmonyOS适配,插件大概率是编译不过去的。
所以在动工之前,我把项目中计划用到的所有插件列了一个盘点表,逐个确认鸿蒙适配情况。梳理完之后发现,基础能力类的插件(比如路径获取、本地存储、网络请求)大多数没问题,但是硬件能力类的插件(蓝牙、定位、系统通知的深度定制)基本都要做二次开发。
这一点上我的建议是:做鸿蒙侧的Flutter项目,第一步不是写代码,而是先做“插件兼容性审计”。把项目中要用到的所有依赖列出来,确认哪些能直接用、哪些需要找替代方案、哪些必须自己封装原生通道,这决定了整个项目的排期和架构设计。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建:比官方教程多走的几步路
2.1 版本组合是最大的隐性门槛
我先说结论:Flutter做鸿蒙开发,环境版本不是一个可以随意组合的事。SDK、Java、Gradle、OpenHarmony SDK之间有一个微妙的“匹配链”,任何一个版本错位,编译的时候都会给你上课。
我实际用的这套版本组合,折腾了两天才稳定下来:
| 组件 | 版本 | 备注 |
|---|---|---|
| Flutter SDK | 3.22.x 兼容分支 | 需要支持鸿蒙的fork版本,注意不是官方原版 |
| OpenHarmony SDK | API 11及以上 | 以目标设备系统版本为准 |
| Java JDK | 17 | 不要用8,也不要试21,17最稳 |
| Gradle | 8.x | 跟AGP版本严格对应 |
| 鸿蒙开发工具 | DevEco Studio对应版本 | 建议先装这个再配Flutter环境 |
这里最坑的是Flutter SDK。官方主分支目前对鸿蒙的支持还不够直
