第二章 架构全景:鸿蒙系统整体分层架构

聊鸿蒙,绕不开它的分层架构。

说实话,我第一次看到鸿蒙的架构图时,第一反应是——嗯,这跟Android长得有点像,但仔细一琢磨,骨子里完全不是一回事。今天我就带你把每一层扒开看看,顺便聊聊我这些年踩过的坑。

2.1 鸿蒙的四层架构长什么样?

鸿蒙系统从上到下,一共四层:

  • 应用层——你手机上的App、桌面上的应用,都在这一层
  • 框架层——给开发者用的API、UI组件、能力接口
  • 系统服务层——各种系统级服务,比如分布式软总线、账号服务、安全服务
  • 内核层——最底层,负责调度、内存、文件系统这些硬核活儿

每一层各司其职,层与层之间通过IDL接口通信。我习惯把这四层想象成一栋楼——应用层是住户,框架层是物业,系统服务层是水电管网,内核层是地基。

核心要点:鸿蒙的分层不是简单的功能拆分,而是为了「硬件解耦」和「分布式协同」这两个目标服务的。

2.2 内核层:不止一个内核

这一层最有意思。

Android的内核是Linux,iOS的内核是XNU,都是单一内核。鸿蒙呢?它支持多内核方案——你可以用Linux内核,也可以用LiteOS内核,甚至未来可能用自研的微内核。

为什么会这样?说白了,鸿蒙要跑在各种设备上。智能手表用Linux?太浪费资源了。路由器用微内核?性能不够。所以鸿蒙干脆搞了个「内核抽象层」,把内核的差异屏蔽掉,上层不用管底下跑的是什么内核。

我的经验:我在做智能家居项目时,遇到过一个问题——同一个App在手机和智能音箱上表现不一致。后来发现是底层内核的调度策略不同。鸿蒙的KAL(内核抽象层)就是为了解决这种问题而设计的。

2.3 系统服务层:分布式能力的核心

这一层是鸿蒙的「杀手锏」。

传统Android的系统服务层,主要管的是本地设备的事——比如通知、定位、WiFi。鸿蒙的系统服务层,多了一个关键角色:分布式软总线

你想想看,两台设备之间要协同工作,传统做法是走网络协议栈,TCP/IP那一套,延迟高、配置复杂。鸿蒙的分布式软总线,相当于在系统层面直接打通了设备间的通信通道,延迟可以做到毫秒级。

服务类型 Android 鸿蒙
设备发现 依赖第三方协议 系统原生支持
数据传输 走网络栈 软总线直连
任务迁移 不支持 原生支持
安全认证 应用层实现 系统层内置

我曾经在一个多设备协同的项目里,用Android的WiFi Direct做设备间文件传输,延迟高不说,还经常断连。换成鸿蒙的分布式软总线后,体验直接上了一个台阶。

2.4 框架层:开发者的主战场

这一层,说白了就是给开发者用的。

Android有Android SDK,鸿蒙有ArkUI框架和Ability框架。但两者的设计思路完全不同。

Android的框架层,是「组件化」的——Activity、Service、BroadcastReceiver,各管各的。鸿蒙的框架层,是「能力化」的——一个Ability可以同时包含UI和后台逻辑,而且天然支持分布式。

注意:我刚从Android转鸿蒙时,最大的坑就是「用Android的思维写鸿蒙代码」。比如在Android里,Activity和Service是分开的,但在鸿蒙里,一个Page Ability可以同时处理界面和后台任务。如果你硬要拆开写,反而会引入不必要的复杂度。

2.5 应用层:一次开发,多端部署

这一层最直观——用户看到的就是它。

但鸿蒙的应用层有个特点:原子化服务。你不需要安装一个完整的App,可以只用一个服务卡片,就能完成某个功能。比如查快递、看天气,点一下卡片就行,不用打开App。

我刚开始觉得这玩意儿就是个「小程序翻版」,后来发现不是。原子化服务的底层是鸿蒙的分布式能力,卡片可以在手机、平板、手表之间流转,这是小程序做不到的。

2.6 对比传统架构:差异在哪?

咱们拿Linux和Android来对比一下。

  • 内核层:Linux是单一内核,Android也是Linux内核。鸿蒙是多内核方案,更灵活。
  • 系统服务层:Android的服务是本地化的,鸿蒙的服务是分布式的。
  • 框架层:Android的框架是Java/Kotlin + XML,鸿蒙的框架是ArkTS +声明式UI。
  • 应用层:Android的App是单体应用,鸿蒙支持原子化服务和全场景流转。

说白了,Android是为「手机」设计的,鸿蒙是为「万物互联」设计的。出发点不同,架构自然不同。

2.7 一张图看懂鸿蒙架构

下面这张SVG图,是我自己画的。它把四层架构和关键组件都标出来了,你可以保存下来当参考。

应用层 原子化服务 | 传统App | 服务卡片 框架层 ArkUI框架 | Ability框架 | 分布式数据管理 系统服务层 分布式软总线 | 安全服务 | 账号服务 | 设备管理 内核层 Linux内核 | LiteOS内核 | 内核抽象层(KAL) 用户可见 硬件相关 鸿蒙系统四层架构全景图 层间通过IDL接口通信,内核层支持多内核方案

2.8 避坑指南:我踩过的三个坑

最后,分享几个我实际项目中遇到的坑,希望能帮你少走弯路。

坑一:我曾经以为「分布式软总线」是万能的,结果发现它需要硬件支持。有些低端设备没有对应的硬件模块,软总线就跑不起来。所以选设备时,一定要确认硬件兼容性。

坑二:刚开始写Ability时,我习惯把逻辑全塞在一个Ability里。后来发现,一个Ability挂了,整个功能都崩了。正确的做法是:按功能拆分成多个Ability,每个Ability只做一件事。

坑三:多内核方案虽然灵活,但调试起来很痛苦。同一个Bug,在Linux内核上不出现,在LiteOS内核上就出现。我后来养成了一个习惯——开发阶段统一用Linux内核,上线前再针对不同内核做回归测试。

嗯,架构全景就聊到这儿。记住一句话:鸿蒙的架构,是为「分布式」和「多设备」而生的。理解了这两个核心目标,你就能看懂它每一层设计背后的逻辑。


公众号:蓝海资料掘金营,微信deep3321