适合谁看

  • 想做完整鸿蒙 Flutter 项目的人

  • 正在梳理系统入口矩阵的人

  • 想把 Demo 做成更完整产品的人

问题背景

"适配鸿蒙"和"被鸿蒙系统理解"不是同一件事。

前者更偏运行:能构建、能启动、能调用一些能力。

后者更偏入口和系统协同:系统知道怎么打开你、系统知道你支持哪些能力、用户能在系统层提前感知你。

两者的差距:

维度

适配鸿蒙

被鸿蒙系统理解

启动方式

只有主图标

主图标 + 搜索直达 + 桌面卡片

系统搜索

找不到

能被小艺搜索发现

桌面展示

有桌面卡片

系统能力

基础 API

语音 + TTS + 防窥

用户感知

"能用"

"好用"

项目中的真实场景

食界探味当前已经体现的入口和系统协同:

能力

文件

作用

主图标启动

EntryAbility.ets

应用主入口

语义入口

insight_intent.json + InsightIntentExecutorImpl.ets

搜索直达

跨层桥接

IntentNavigationPlugin.ets

原生 → Flutter

桌面卡片

DailyRecommendFormAbility.ets

每日推荐

防窥保护

AntiPeepProtectionPlugin.ets

系统安全

语音识别

SpeechRecognitionPlugin.ets

语音输入

TTS

TextToSpeechPlugin.ets

语音播报

核心实现

一、四层入口矩阵

一个更完整的鸿蒙 Flutter 项目,至少可以从四层补入口:

┌─────────────────────────────────────────────────┐
│              第 1 层:主应用入口                    │
│                                                   │
│  EntryAbility                                     │
│    ├─ 主图标启动                                   │
│    ├─ 冷启动参数承接                               │
│    └─ 热启动参数转发                               │
│                                                   │
├─────────────────────────────────────────────────┤
│              第 2 层:系统理解型入口                 │
│                                                   │
│  Intents Kit                                      │
│    ├─ 搜索直达(小艺搜索)                         │
│    ├─ 功能页直达                                   │
│    └─ 参数化页面跳转                               │
│                                                   │
├─────────────────────────────────────────────────┤
│              第 3 层:系统触达型入口                 │
│                                                   │
│  Form Kit(桌面卡片)                              │
│    ├─ 每日推荐                                     │
│    ├─ 快捷入口                                     │
│    └─ 内容展示                                     │
│                                                   │
├─────────────────────────────────────────────────┤
│              第 4 层:系统协同型能力                 │
│                                                   │
│  系统能力                                          │
│    ├─ 防窥保护(DeviceSecurityKit)                │
│    ├─ 语音识别(CoreSpeechKit ASR)                │
│    ├─ 文本转语音(CoreSpeechKit TTS)              │
│    └─ Intent 导航                                 │
│                                                   │
└─────────────────────────────────────────────────┘

二、第 1 层:主应用入口——EntryAbility

这是最基础的一层。EntryAbility.ets 负责:

export default class EntryAbility extends FlutterAbility {
  configureFlutterEngine(flutterEngine: FlutterEngine) {
    super.configureFlutterEngine(flutterEngine)
    GeneratedPluginRegistrant.registerWith(flutterEngine)
    flutterEngine.getPlugins()?.add(new SpeechRecognitionPlugin())
    flutterEngine.getPlugins()?.add(new TextToSpeechPlugin())
    flutterEngine.getPlugins()?.add(new IntentNavigationPlugin())
    flutterEngine.getPlugins()?.add(new AntiPeepProtectionPlugin())
  }

  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    super.onCreate(want, launchParam)
    const pageId = want.parameters?.['pageId'] as string;
    if (pageId) {
      IntentNavigationPlugin.setPendingNavigation(pageId, dishId);
    }
  }
}

主应用入口需要处理:

能力

说明

主图标启动

用户点击应用图标

冷启动参数

从系统入口启动时携带参数

插件注册

注册所有原生插件

窗口配置

全屏、状态栏等

三、第 2 层:系统理解型入口——Intents Kit

Intents Kit 让鸿蒙系统理解你的应用"能做什么":

{
  "insightIntents": [{
    "intentName": "JumpFunctionPage",
    "inputParams": [{
      "properties": {
        "pageId": {
          "type": "string",
          "enum": [
            { "value": "search", "displayName": "搜索美食", "keywords": ["搜索", "找菜"] },
            { "value": "explore", "displayName": "探索美食", "keywords": ["探索", "推荐"] },
            { "value": "dish_detail", "displayName": "查看菜品详情", "keywords": ["菜品", "详情"] }
          ]
        }
      }
    }]
  }]
}

系统理解型入口的价值:

能力

说明

用户感知

搜索直达

用户搜索关键词可直达

"这个应用能搜美食"

语义化入口

displayName + keywords

系统知道应用能做什么

参数化跳转

pageId + dishId

精准直达目标页面

四、第 3 层:系统触达型入口——桌面卡片

桌面卡片让应用内容出现在鸿蒙桌面上:

{
  "forms": [{
    "name": "DailyRecommendCard",
    "displayName": "今日探味",
    "updateEnabled": true,
    "scheduledUpdateTime": "00:05",
    "defaultDimension": "2*4"
  }]
}

桌面卡片的价值:

能力

说明

用户感知

每日推荐

每天自动更新内容

"系统每天给我推荐"

快捷入口

点击直达应用

"不用打开应用就能看到"

固定展示位

不和应用内布局竞争

"桌面上有个推荐"

五、第 4 层:系统协同型能力

这些能力虽然不是入口本身,但会显著影响项目"像不像鸿蒙应用":

能力

鸿蒙 API

作用

用户感知

防窥保护

DeviceSecurityKit

保护隐私内容

"别人偷看时自动隐藏"

语音识别

CoreSpeechKit ASR

语音输入

"可以直接说话搜索"

TTS

CoreSpeechKit TTS

语音播报

"可以听推荐"

六、Flutter 侧的承接

鸿蒙原生入口再多,Flutter 侧也需要承接:

// intent_navigation_channel.dart
static const _pageIdToRoute = <String, String>{
  'search': '/search',
  'ai_assistant': '/ai-assistant',
  'wish_box': '/wish-box',
  'ingredients': '/ingredients',
  'explore': '/explore',
};

Flutter 侧要做的是:

工作

说明

路由映射

pageId → Flutter 路由

内容承接

卡片点击后打开对应页面

语义一致

应用内推荐和卡片推荐内容一致

语音交互

接收 ASR 文本,调用 AI,播放 TTS

七、完整的入口矩阵图

┌─────────────────────────────────────────────────┐
│                 鸿蒙系统层                        │
│                                                   │
│  小艺搜索 → 匹配 keywords → 调起应用              │
│  桌面卡片 → 展示推荐 → 点击进入                    │
│  系统设置 → 防窥保护 → 保护隐私                    │
│  语音助手 → ASR 识别 → 语音输入                    │
│                                                   │
├─────────────────────────────────────────────────┤
│                 鸿蒙壳工程层                      │
│                                                   │
│  EntryAbility → 主入口 + 插件注册                  │
│  InsightIntentExecutorImpl → 参数校验             │
│  IntentNavigationPlugin → 桥接 Flutter            │
│  DailyRecommendFormAbility → 卡片生命周期         │
│  SpeechRecognitionPlugin → 语音识别               │
│  TextToSpeechPlugin → TTS                        │
│  AntiPeepProtectionPlugin → 防窥保护              │
│                                                   │
├─────────────────────────────────────────────────┤
│                 Flutter 层                        │
│                                                   │
│  intent_navigation_channel → 路由映射             │
│  anti_peep_protection_channel → 防窥状态          │
│  speech_recognition_channel → 语音识别            │
│  text_to_speech_channel → TTS                    │
│  AI 助手页 → 接收语音 + 调用 AI + 播报            │
│                                                   │
└─────────────────────────────────────────────────┘

关键代码位置

文件

作用

app/ohos/entry/src/main/ets/entryability/EntryAbility.ets

主入口

app/ohos/entry/src/main/resources/base/profile/insight_intent.json

语义入口配置

app/ohos/entry/src/main/ets/entryability/InsightIntentExecutorImpl.ets

参数校验

app/ohos/entry/src/main/ets/plugins/IntentNavigationPlugin.ets

跨层桥接

app/ohos/entry/src/main/ets/formability/DailyRecommendFormAbility.ets

桌面卡片

app/ohos/entry/src/main/ets/plugins/AntiPeepProtectionPlugin.ets

防窥保护

app/ohos/entry/src/main/ets/plugins/SpeechRecognitionPlugin.ets

语音识别

app/ohos/entry/src/main/ets/plugins/TextToSpeechPlugin.ets

TTS

app/lib/core/platform/intent_navigation_channel.dart

Flutter 路由映射

鸿蒙入口成熟度评估

等级

入口

说明

L1 基础

主图标启动

能安装、能打开

L2 理解

Intents Kit + 搜索直达

系统能理解应用

L3 触达

桌面卡片

内容出现在桌面

L4 协同

语音 + TTS + 防窥

系统能力深度整合

L5 生态

多入口矩阵

完整的鸿蒙入口体验

食界探味当前已经从 L1 做到了 L4,正在向 L5 迈进。

常见坑

  • 只做主图标启动,就以为已经完成系统接入 — 至少还应该有 Intents Kit

  • 接了搜索直达,却没有稳定路由映射层 — pageId → Flutter 路由必须可靠

  • 做了桌面卡片,却没有应用内承接 — 用户点击卡片后应该进入有意义的页面

  • 系统能力很多,但边界和分工没有提前划清 — 四层入口各司其职

  • 没有处理冷启动参数 — EntryAbility.onCreate 必须缓存 pending

  • 关键词覆盖不全 — 小艺搜索找不到你的入口

可复用模板

鸿蒙入口矩阵检查清单

第 1 层:主应用入口
  □ EntryAbility 是否注册了所有插件?
  □ 冷启动参数是否处理?
  □ 热启动参数是否转发?

第 2 层:系统理解型入口
  □ insight_intent.json 是否配置?
  □ intent 名称是否稳定?
  □ pageId 是否有 enum 限制?
  □ keywords 是否覆盖用户搜索词?

第 3 层:系统触达型入口
  □ 桌面卡片是否配置?
  □ updateEnabled 是否启用?
  □ 卡片点击后是否跳转正确?

第 4 层:系统协同型能力
  □ 语音识别是否接入?
  □ TTS 是否接入?
  □ 防窥保护是否接入?
  □ 各能力的边界是否清晰?

鸿蒙入口优先级模板

优先级 1(必须):
  - 主图标启动
  - 冷启动参数处理

优先级 2(强烈建议):
  - Intents Kit 搜索直达
  - 路由映射层

优先级 3(推荐):
  - 桌面卡片
  - 语音识别 + TTS

优先级 4(锦上添花):
  - 防窥保护
  - 更多系统能力

本篇总结

真正被 HarmonyOS 系统理解的 Flutter 应用,一定不止一个图标入口。食界探味的实践展示了四层入口矩阵:

  1. 主应用入口 — EntryAbility + 冷启动参数

  2. 系统理解型入口 — Intents Kit + 搜索直达

  3. 系统触达型入口 — 桌面卡片

  4. 系统协同型能力 — 语音 + TTS + 防窥

入口矩阵、触达矩阵和系统能力矩阵一起补,项目的完整度会明显提升。到这一步,Flutter 项目才算真正进入"鸿蒙化"阶段。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐