本文章是根据以下视频和文章的知识以个人理解整合产出的,如有理解错误欢迎讨论指正(叠甲
HarmonyOS 作为面向万物互联时代的全新操作系统,在架构设计上突破了传统移动操作系统的局限,采用了分布式架构理念。理解 HarmonyOS 的系统架构设计原理、分布式核心能力以及与传统 AOSP 的差异,对于深入掌握鸿蒙开发、构建高性能跨设备应用至关重要。
本文将从系统架构设计理念、AOSP 与 OpenHarmony 的架构对比、分布式核心能力、图形渲染系统、一次开发多端部署等多个维度深入解析 HarmonyOS 的架构特征。
HarmonyOS 采用分层架构设计,从下至上分为内核层、系统服务层、应用框架层和应用层。整体架构遵循"纵向分层、横向解耦"的设计原则,实现了系统的模块化和组件化。
HarmonyOS 的架构可以理解为:
数据结构 + 算法 = 程序
架构设计 + 分布式能力 = HarmonyOS 1.2.1. 架构理解维度:
1.2.2. 乐高化特性:
系统各模块如同乐高积木,可以根据不同设备的硬件配置和功能需求,灵活地抽离或组合系统组件。
1.2.3. 适用场景示例:
| 层级 | 核心内容 | 主要功能 |
| 应用层 | 系统应用、桌面、控制栏、设置、电话等 | 提供用户直接交互的应用程序 |
| 应用框架层 | UI框架、元服务/元能力框架、分布式任务调度、分布式数据管理、分布式软总线等 | 为应用开发提供统一的开发接口和能力 |
| 系统服务层 | 基础软件服务子系统集、增强软件服务子系统集、硬件服务子系统集 | 提供系统级服务和硬件抽象 |
| 内核层 | Linux Kernel、LiteOS、驱动子系统(HDF统一驱动框架) | 提供操作系统内核和硬件驱动支持 |
AOSP(Android Open Source Project) 采用传统的水平分层架构,其架构形态类似于正三角形:
AOSP 采用严格的水平分层结构,层内模块高度耦合:
| 方面 | 优点 | 缺点 |
| 生态 | 底部基座厚实,生态丰富,第三方库众多 | - |
| 开发成本 | 开发者熟悉,学曲线平缓 | - |
| 扩展性 | - | 应用层窄,扩展性逐渐变差 |
| 性能 | - | 系统启动慢,资源消耗大 |
| 适配性 | - | 难以适配多种硬件配置 |
| 维护成本 | - | 模块耦合严重,维护成本高 |
OpenHarmony 采用创新的分布式架构,其架构形态类似于倒三角形:
OpenHarmony 的分层设计强调组件的独立性和可灵活配置性:
系统各组件如同乐高积木,可以根据设备需求自由组合:
倒三角形的架构设计使得应用层具有更大的扩展空间:
| 方面 | 优点 | 缺点 |
| 扩展性 | 应用层宽,扩展性极强 | - |
| 灵活性 | 乐高化设计,模块可自由组合 | - |
| 性能 | 按需加载,启动快,资源占用低 | - |
| 适配性 | 可适配从 IoT 到 PC 的各种设备 | - |
| 分布式 | 原生支持分布式能力 | - |
| 生态 | - | 底部基座相对薄弱,生态还在建设中 |
| 学习成本 | - | 开发者需要学习新的开发范式 |
4.1. 架构形态对比
| 对比维度 | AOSP | OpenHarmony |
| 架构形态 | 正三角形(应用层窄,内核层宽) | 倒三角形(应用层宽,内核层窄) |
| 分层特性 | 水平分层,层内模块耦合严重 | 上下水平分层,组件独立部署 |
| 扩展性 | 应用层扩展受限,难以支持多设备形态 | 应用层扩展性强,天然支持多设备 |
| 裁剪能力 | 裁剪难度大,模块间强依赖 | 按需裁剪,乐高化组合 |
| 启动速度 | 启动慢,需要加载大量耦合模块 | 启动快,按需加载 |
| 内存要求 | 最低 > 2GB | 从几十KB(IoT)到GB(全功能设备) |
| 渲染架构 | APP独立渲染,窗口渲染合成 | 后端统一渲染,支持跨应用动效 |
| 图形能力 | HWC层数限制(通常≤6层) | 统一渲染架构,无层数限制 |
| 分布式能力 | 无原生分布式支持 | 原生分布式架构 |
| 硬件虚拟化 | 不支持 | 支持 6 类外设虚拟化 |
| 适用场景 | 手机、平板等传统移动设备 | 手机、平板、手表、车机、IoT等全场景 |
| 生态成熟度 | 生态成熟,第三方库丰富 | 生态建设中,持续完善 |
4.3.1. AOSP 设计理念:
4.3.2. OpenHarmony 设计理念:
分布式软总线是 HarmonyOS 分布式能力的基础设施,不是通讯协议,而是一个统一的连接和通信管理平台。
软总线主要完成以下 4 个核心功能:
5.1.3. 连接方式支持
现代设备支持的连接方式:
元数据可以简单理解为分布式的全局变量,是一种基于数据驱动的跨设备编程模式。
组件的接口(IDL)变化更多:需要频繁增改接口,开发者需要在一开始就确定特别完善的接口
组件间协同大部分是基于数据的协同:数据的定义会更早期、更稳定
/**
* 定义元数据类
* 使用 @ObservedV2 装饰器使其具有响应式能力
*/
@ObservedV2
class SharedData {
@Trace userLocation: Location = { lat: 0, lng: 0 }
@Trace deviceStatus: string = 'idle'
}
/**
* Ability1: 修改元数据
* 导航能力,负责更新用户位置
*/
class NavigationAbility {
sharedData: SharedData = new SharedData()
/**
* 更新用户位置
* @param newLocation 新的位置信息
*/
updateLocation(newLocation: Location) {
// 修改元数据,自动通知所有订阅者
this.sharedData.userLocation = newLocation
}
}
/**
* Ability2: 响应元数据变化
* 地图显示能力,自动响应位置变化
*/
class MapDisplayAbility {
sharedData: SharedData = new SharedData()
build() {
// 自动响应 userLocation 的变化
Map({ center: this.sharedData.userLocation })
}
} 分布式硬件虚拟化是 HarmonyOS 的特征子系统,使得消费者拥有的不同智能终端能够互助为一个"超级终端"。
传统 HAL 概念:
HAL(Hardware Adaptation Layer) 是硬件抽象层,将硬件抽象成一组软件 API 供上层调用。
HarmonyOS 的扩展:
鸿蒙基于软总线的概念继续扩展 HAL 概念 => 跨物理终端的 HAL 访问
2. 提供外部设备服务的 OS 虚拟化 -> 感知用户当前场景,为最佳交互方式提供支持:
3. 已支持 6 类外设虚拟化
1. 渲染进程无法获得其他应用渲染信息
2. 受 HWC 层数限制
6.2. OpenHarmony 图形架构
1. 后端统一渲染
2. 提供后端并行化渲染能力
3. 脏区域渲染优化
6.2.3. 图形性能对比
| 对比项 | AOSP | OpenHarmony |
| 渲染架构 | 应用独立渲染 | 后端统一渲染 |
| 跨应用动效 | 不支持 | 支持 |
| 窗口层数限制 | HWC限制(通常≤6层) | 无限制 |
| 重复渲染问题 | 存在遮挡重复渲染 | 遮挡剔除算法优化 |
| 多屏多窗口 | 性能受限 | GPU算力充分发挥 |
| 脏区域渲染 | 支持 | 优化的脏区域渲染 |
| 渲染引擎 | Skia | DDGR + Vulkan |
| 适用场景 | 手机、平板 | 手机、平板、PC、车机、投屏 |
7.1. 核心能力概述
HarmonyOS 的核心特有能力"一次开发,多端部署"。是通过统一的开发框架和能力,实现代码的最大程度复用。
支持在同一工程中管理多个设备的代码和资源:
一次构建可以生成多个设备的安装包:
将多个设备的安装包打包成一个 APP 包,简化分发流程。
逻辑与UI解耦:
业务逻辑代码可以在不同设备上运行,UI 根据设备特性自适应。
跨端接口差异化屏蔽:
框架层屏蔽不同设备的接口差异,开发者使用统一的 API。
自适应布局:
响应式布局:
交互事件归一:
组件根据容器大小自动调整尺寸和位置:
/**
* 自适应布局示例
* 组件会根据容器尺寸自动调整布局
*/
@Entry
@Component
struct AdaptiveLayout {
build() {
Column() {
// 使用百分比布局实现自适应
Row() {
Text('左侧').width('30%')
Text('右侧').width('70%')
}.width('100%')
}
}
} 根据断点(breakpoint)切换不同的布局结构:
/**
* 响应式布局示例
* 根据屏幕宽度显示不同的布局结构
*/
@Entry
@Component
struct ResponsiveLayout {
@State currentBreakpoint: string = 'sm'
build() {
GridRow({
breakpoints: {
value: ['sm', 'md', 'lg'],
reference: BreakpointsReference.WindowSize
}
}) {
GridCol({ span: { sm: 12, md: 6, lg: 4 } }) {
Text('内容')
}
}
}
} 统一处理不同设备的输入事件:
/**
* 交互事件归一示例
* 同一个事件处理函数支持触摸、鼠标、键盘等多种输入
*/
@Entry
@Component
struct EventUnification {
/**
* 处理点击事件
* 自动支持触摸和鼠标输入
*/
handleClick() {
console.log('点击事件 - 支持触摸和鼠标')
}
build() {
Button('点击我')
.onClick(() => this.handleClick())
}
} HarmonyOS 的核心理念是以人为中心,将用户周边的多个智能设备抽象成一个"超级终端",通过分布式软总线进行统一调度和管理。
如同使用一个超级设备:
用户感受不到设备的边界,所有设备的能力都可以随时调用:
可基于抽象的超级终端开发服务:
开发者无需关心具体的设备类型,只需要:
8.4.1. 分布式 API 层
提供跨设备调用的统一接口:
8.4.2. 安全与隐私层
确保设备间通信的安全性:
8.4.3. 分布式任务调度
智能分配任务到最佳设备:
8.4.4. 分布式数据管理
实现数据的跨设备同步:
8.4.5. 分布式软总线
底层的设备连接和通信基础设施:
如果以上文章内容对您有帮助,欢迎点赞👍 收藏⭐️ +关注❤️!也欢迎继续提问交流💬!
原文作者:;如有侵权,请联系管理员删除。