鸿蒙的诞生背景
说实话,鸿蒙这个系统刚出来的时候,我第一反应是:又一套安卓换皮?
但真正深入进去才发现,完全不是那么回事。鸿蒙的诞生,说白了是被逼出来的。2019年那会儿,华为被制裁,谷歌服务不让用了。你想想看,一个手机厂商,突然没法用安卓的GMS了,这多要命。
但华为的选择不是去求谷歌,而是——自己搞一套。我当时在内部交流会上听到一个说法:与其被别人卡脖子,不如自己造一条路。嗯,这话糙理不糙。
技术层面的驱动力
除了外部压力,还有技术上的原因。我这些年做嵌入式开发,最头疼的就是设备碎片化。手机一套系统,手表一套系统,电视又一套系统。每套系统都得单独维护,累不累?
鸿蒙想解决的就是这个问题:一套系统,搞定所有设备。从128KB内存的传感器,到8GB内存的手机,都能跑。这在当时,我觉得有点天方夜谭。但后来看到他们的技术方案,确实有点东西。
核心目标:实现「一次开发,多端部署」,让开发者不用为每个设备单独写代码。
设计理念:分布式不是噱头
鸿蒙的设计理念,我总结成三个词:分布式、原子化、统一OS。
分布式架构
这个理念其实不新鲜,但鸿蒙把它玩出了花。传统系统里,每个设备都是孤岛。手机是手机,平板是平板。鸿蒙不一样,它把多个设备当成一个「超级终端」。
我举个例子你就明白了。你在手机上打游戏,突然有电话进来。传统做法是游戏暂停,接电话。鸿蒙的做法是:电话来了,自动流转到耳机上,游戏继续在手机上跑。或者更夸张一点,游戏画面可以投到平板上,手机只当手柄用。
为什么会这样?因为鸿蒙把设备的硬件能力抽象成了资源池。屏幕、摄像头、扬声器、传感器……这些不再是某个设备的私有财产,而是整个系统的共享资源。
个人经验:我在做智能家居项目时,试过用鸿蒙的分布式软总线把门锁和摄像头连起来。门锁开了,摄像头自动抓拍。代码量比传统方式少了大概40%。
原子化服务
这个理念更狠。传统App你得先安装才能用。鸿蒙搞了个「原子化服务」,说白了就是:用的时候才加载,用完就销毁。
比如你扫个共享单车二维码,不需要下载App,直接调出原子化服务就能开锁。用完就没了,不占空间。我刚开始觉得这玩意儿就是小程序换皮,但后来发现底层机制完全不同。原子化服务是系统级的,权限管控更严格,性能开销也更低。
统一OS
这个好理解。鸿蒙把系统分成了两个版本:
- 轻量系统:面向IoT设备,内存128KB起步,跑在MCU上
- 标准系统:面向手机、平板、车机,内存128MB起步,跑在应用处理器上
但内核层是统一的。轻量系统用LiteOS内核,标准系统用Linux内核。上层API完全一致。这意味着你写一套代码,稍微改改配置,就能在两个平台上跑。
注意:虽然API一致,但轻量系统的功能集是标准系统的子集。比如轻量系统不支持GPU加速,也不支持Java。这个在选型时一定要想清楚。
技术架构全景图
下面这张图是我自己画的鸿蒙技术架构。说实话,第一次看官方文档时我头都大了,层数太多。后来我把它简化成四层,好理解多了。
这张图我画得比较简洁,但核心逻辑都在了。从上往下看:
- 应用层:你写的代码最终跑在这一层。原子化服务和传统App共存。
- 框架层:这是鸿蒙最牛的地方。分布式软总线让设备之间像插U盘一样即插即用。我调试的时候经常用这个功能,手机和平板之间拖文件,跟本地操作一样。
- 系统服务层:各种子系统。注意图形子系统,轻量系统用的是轻量级图形栈,标准系统用的是完整的GPU管线。
- 内核层:轻量系统用LiteOS,标准系统用Linux。但上层API是统一的,所以你的代码不用改。
避坑指南:我曾经在轻量系统上调用过标准系统才有的图形API,结果编译过了,运行直接崩。后来查文档才发现,轻量系统不支持GPU。所以写代码前,一定先确认目标设备的系统类型。
轻量系统 vs 标准系统:核心差异
这两个版本的区别,我整理了一张表,方便你对照:
| 对比项 | 轻量系统 | 标准系统 |
|---|---|---|
| 内存要求 | 128KB ~ 128MB | 128MB 以上 |
| 处理器 | MCU(如Cortex-M) | 应用处理器(如Cortex-A) |
| 内核 | LiteOS | Linux |
| 图形能力 | 轻量级2D图形 | 完整GPU + 3D图形 |
| 编程语言 | C/C++ | C/C++ + Java + JS/TS |
| 典型设备 | 智能灯、传感器、手表 | 手机、平板、车机 |
说白了,轻量系统就是给「小设备」用的。你想想看,一个智能灯泡,总共就128KB内存,你让它跑Linux?不现实。LiteOS内核只有几KB,调度器也简单,但够用。
标准系统则是给「大设备」用的。手机、平板这些,需要完整的进程管理、内存管理、文件系统。Linux内核在这块很成熟,鸿蒙直接拿来用,省了不少事。
我的建议:如果你做的是IoT设备,选轻量系统。如果你做的是带屏幕的交互设备,选标准系统。别想着用轻量系统跑复杂UI,那是在给自己挖坑。
写在最后
鸿蒙这套架构,说实话,刚开始我觉得有点复杂。但用久了你会发现,它的设计逻辑其实很清晰:用一套系统,覆盖所有设备。轻量系统管小设备,标准系统管大设备,中间通过分布式软总线连起来。
嗯,这一章就聊这么多。下一章我们深入看看轻量系统的内核实现,到时候我会拿一个实际的MCU项目来拆解。
公众号:蓝海资料掘金营,微信deep3321