前言
写完了《工具篇》,我们再来看看 HarmonyOS 的系统结构,为什么不先说编码而选择系统先进行介绍?俗话说,编程语言只是一个工具,工具多种多样,而工具作用的对象才是最需要先了解的,这样可以做到有的放矢(先找钉子,再用趁手锤子),在编码学习的时候也可以相互映照,起得事半功倍的效果。所以思路上,是先介绍《系统篇》,再展开《编码篇》。
HarmonyOS 从刚开始推出的时候,就伴随各种不同的声音,可以说是褒贬不一,有说是 「Android 套壳,华而不实」,也有说是「突破封锁,国产之光」,而有趣的是,消费者市场上的华为手机也经历了极其相似的各种讨论。我们从结果上看,今年(2023年)华为推出的 Mate60 系列打破了各种质疑,造就了众所周知的「遥遥领先」。很难说,搭载在「遥遥领先」手机上的 HarmonyOS 也再一次走到了「聚光灯」下,但这次和之前不一样的是,再少了很多质疑声的同时,也引起了各大软件厂商的注意,各家都在紧锣密鼓地开发自家 APP 的鸿蒙版本,甚至招聘鸿蒙开发岗位需求也在互联网寒冬之下显得独树一帜。
说了这么多技术不强相关的话,也只是想感叹句,「轻舟已过万重山」。那我们接下来就具体看一下这个充满戏剧性色彩的「国产」开发系统到底有什么秘密。
历史
2019年8月9日,华为在中国东莞召开开发者大会,正式发布了鸿蒙系统。鸿蒙系统最初被设计为一个面向物联网(IoT)设备的操作系统,但华为表示鸿蒙系统也可以用于智能手机、平板电脑和其他类型的设备。
2020年9月,华为发布了鸿蒙系统 2.0 版本,并宣布将在未来的智能手机上使用鸿蒙系统。
2021年6月,华为推出了首批搭载鸿蒙系统的智能手机。
2022年7月,HarmonyOS 3 正式发布。
2023年8月,HarmonyOS 4 正式发布,同时公开 HarmonyOS NEXT 开发预览版,并宣称在 NEXT 版本上将作为完全独立于 Android 的操作系统。
架构
在介绍一个系统之前,首先祭出的肯定是系统架构图,这里也不例外,从面到点去理解整个系统的设计思想和意图是最快速准确了解系统的一个重要方法。
我们知道,鸿蒙系统不仅仅针对的是移动端手机平台的系统,而是基于「万物互联」概念,能运行在 PC、平板、车机、IoT 各类设备上的系统。所以该系统的设计,首先保证的就是系统的兼容性和模块的灵活可扩展性。
](/img/bVdbwvT)
如上图所示,HarmonyOS 分为四层,从下向上依次是:内核层、系统服务层、框架层和应用层。系统功能按照「系统>子系统>功能/模块」逐级展开,在多端部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块,符合高内聚、低耦合的特点。
而鸿蒙系统是如何实现「万物互联」的“超级终端”系统呢?
我们可以看到,软总线实现了软硬协同,优先级调度的功能,数据上通过分布式技术实现了文件、数据库和沙箱的数据共享,作为可原子化的应用,实现了可流转/迁移的特点,一次开发多端部署。
分布式软总线:实现近场设备间统一的分布式通信能力,提供不区分链路的设备发现和传输接口,具备快速发现并连接设备,高效分发任务和传输数据。
内核层
HarmonyOS 的内核子系统采用多内核设计,支持针对不同资源受限设备,选用适合的 OS 内核。而驱动子系统(HDF,硬件驱动框架)是 HarmonyOS 硬件生态开放的基础,提供统一外设访问能力和驱动开发管理框架。鸿蒙支持三类系统:
- 迷你系统:运行在一些诸如连接模块、传感器、可穿戴设备,运存介于 128KB 左右的处理器上
- 小型系统:运行在路由器、网络摄像头等运存介于 1MB 左右的处理器上
- 标准系统:运行在增强型交互、3D GPU、丰富动画和多样化组件等 128M 及以上的处理器上
系统服务层
是 HarmonyOS 的核心能力集合,包括适用于各类设备的基础能力以及面向特定设备的专有能力,涵盖四个子系统集,根据不同设备形态的部署环境,基础软件/增强软件/硬件服务子系统集内部可以按子系统粒度裁剪,子系统内部还可按功能粒度裁剪。不同维度的裁剪,保证了鸿蒙架构上的设备灵活性,而分布式的引入,则让整体系统服务有了互通的可能。这里对一些理解上可能会有陌生的概念做些解释:
DFX 子系统(Design for X)
DFX 是为了提升软件质量设计的工具集,包含 DFR(Design for Reliability,可靠性)、 DFT(Design for Testability,可测试性)、可制造性(Design for Manufacturability)、可服务性(Design for Serviceability)、生命周期设计(Design for LifeCycle)等。X表示产品的某个特性或者产品生命周期的某个阶段,目前实现的功能有:
- HiLog:日志系统,提供给系统框架、服务以及应用打印日志,记录用户操作、系统运行状态的功能
- HiSysEvent:系统事件记录接口,定义了 HiSysEvent 埋点接口供应用框架、系统服务使用,用于向 HiView 上报系统时间信息
- HiView:由框架和插件平台组成,包括插件配置,插件管理
- FaultLoggered:应用故障订阅和收集,C/C++ 运行时 Crash 临时日志的生成和管理模块
- HiAppEvent:JS 应用事件记录接口,即打点接口,用于帮助应用记录在运行过程中发生的故障信息、统计信息、安全信息、用户行为信息,以支撑开发者分析应用的运行情况。
DFX 对于开发者而言,更像是一个复杂的事件和日志系统,该系统贯穿了整个鸿蒙系统的周期和模块,不管是设备商还是开发者都可以通过 DFX 准确快速地定位到问题,同时 DFX 还提供了分析和诊断服务。
对于日志分类,日志可以按类型(Type)、领域(Domain)、标签(Tag)等进行分类;对于流量管控,有具备流控机制有效地识别滥打日志的领域;对于隐私管控,采集的日志是最小化,仅为提供必须服务时收集设备型号、操作系统、唯一设备标识符、登录 IP 地址、软件版本号、接入网络方式和类型、操作日志等信息。DFX 有效保障了在设备出现应用崩溃、应用卡死、分布式故障、死机、自动重启、不开机等问题上能分析定位到具体原因并解决问题。
MSDP & DV 子系统
MSDP & DV(Mobile Sensing Development Platform,移动感知平台;Device Virtualization,设备虚拟化),可以简单理解为传感器和虚拟化能力,MSDP 提供分布式融合感知能力,汇总融合来自多个设备的多种感知源,从而精确感知用户的空间、移动、手势、运动健康等多种状态,实现不同设备的能力和资源融合。
框架层
包含 UI 框架(包括适用于 Java 的 UI 框架和适用于 JS 的 UI 框架)、Ability 框架、用户程序框架以及各种软硬件服务对外开放的多语言框架 API,为 HarmonyOS 应用开发提供了 Java/C/C++/JS/TS 等多语言的用户程序框架和 Ability 框架。根据系统的组件化裁剪程度,HarmonyOS 设备支持的 API 也会有所不同。
ArkCompiler 方舟编译器
这里再对核心编码工具 ArkCompiler 做下介绍,ArkCompiler 是华为自研的统一编程平台,包含编译器、工具链、运行时等关键部件,支持高级语言在多种芯片平台编译和运行,并支撑应用和服务运行在手机、个人电脑、平板、电视、汽车和智能穿戴等多种设备上的需求。ArkCompiler 利用 ArkTS 的静态类型信息,进行类型推导并生成对象描述和内敛缓存,加速运行时对字节码的解释执行,AOT(Ahead-of-Time)Compiler 利用静态类型信息直接将字节码编译生成优化机器码,让应用启动即可运行高性能代码。
相对于动态类型语言的传统编译模式,在编译时期只进行打包源码,并且是在安装之后的运行时执行源码解析、编译执行字节码、获取 Profile 信息、编译优化执行机器码,而「号称」首个动态 AOT 类型语言编译模式的方舟编译器,则是将解析源码、编译字节码、获取 Profile 信息、编译优化机器码并且打包成字节码和优化机器码放在了编译阶段,在应用安装后,本地直接执行优化后的机器码和字节码,这样做的好处就是减少设备上的编译时间,直接做到「运行即可用」。
LiteActor 轻量化并发,提供了 Worker API 支持并发编程,在运行时实例内存隔离的基础上,ArkCompiler 通过共享运行实例中的不可变或者不易变对象、内建代码块、方法字节码等技术手段,优化了并发运行实例的启动性能和内存开销。
Actor 模型,一个 actor 定义为一个计算单元,每个 actor 包含了存储、通信、计算等能力,在分布式系统中,通常包含了非常多的服务器集群,每一台服务器又包含了大量 actor 实例,他们共同构成了强大的并行计算能力。Actor 的核心思想是独立维护隔离状态,并基于消息传递实现异步通信。
我们知道 JS 是一门单线程语言,在设计之初没有考虑多线程运行的支持和优化,所以对于 Actor 模型而言,每一个并发实例都会创建一个完整的引擎实例来支持运行,这样做的优势在于让开发者可以不关注共享状态和锁,容易维护和测试,并且非常容易将并发实例迁移成分布式服务,但也造成了启动慢、内存开销大的问题。而 ArkCompiler 虽然实质上还是 Actor 模型,但通过共享进程内各个并发实例间的不可变对象,将一些基础设施分层和轻量化,并且重用来减轻并发启动时间和内存负担。
在源码安全方面,区别于 Android Java/Kotlin 代码的混淆,方舟编译器会把 ArkTS/TS/JS 编译为方舟字节码,并且使用多种混淆技术提供更高强度的混淆和保护,使 HarmonyOS 应用包中装在的是多重混淆后的字节码,有效提测应用代码安全的强度。
应用层
支持基于框架层实现业务逻辑的原子化开发,构建以 FA/PA 为基础组成单元的应用(包括系统和三方应用),FA/PA 可以按需下载、加载和运行,基于 FA/PA 实现的应用生态,可以实现三方服务跨设备智能分发,提供一致、高效的用户体验。在《工具篇》的时候,我们提到 FA 和 PA 的区别在于有没有 UI 界面,后面 FA 又被 Stage 模型所取代,但在设计结构上不会有太多变化。
从下图我们可以看到,应用是怎么灵活动态部署到各个不同设备中的。华为在除了传统应用市场之外,还提供给开发者和企业一个分发平台,在该分发平台上,用户可以独立配置开发的应用可以通过二维码、碰一碰(NFC)、搜索、语音、感知等将一些原子化的服务应用部署到不同设备当中。
以下是对鸿蒙系统对原子化开发的一个例子,简单而言,通过分发平台,开发者可以将一个应用中的完整功能(PA1、PA2、PA3)「有选择地」分发到不同鸿蒙设备上。这里的有选择,代表根据设备特性选择特定的原子能力,比如图中智慧屏只用到了 PA1 的能力,而手机用到了 PA1、PA2、PA3 的完整能力,甚至可以想象下如果有一个搭载了鸿蒙系统的摄像头 IoT 设备,只需要用到 PA1 的视频采集能力,而用不到 FA 的界面能力。
总结
从整个鸿蒙系统的设计而言,已经不单单是一个手机系统那么简单,而是一个「生态」,通过分布式技术实现多端部署和数据互联的特性。同时可移植内核能力给鸿蒙覆盖诸如车机、穿戴设备、手机、电视、智能家居等提供了保证,相信鸿蒙后面也会不断去拓宽它的边界,达到所谓的「万物互联」。
作者:ES2049 / 拂晓
文章可随意转载,但请保留此 原文链接。
非常欢迎有激情的你加入 ES2049 Studio,简历请发送至 caijun.hcj@alibaba-inc.com 。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。