HarmonyOS调研分享

经过十多年的发展,传统移动互联网的增长红利已渐见顶。万物互联时代正在开启,应用的设备底座将从几十亿手机扩展到数百亿 IoT 设备。GSMA 预测到 2025 年,全球物联网终端连接数量将达 246 亿个,其中消费物联网终端连接数量将达 110 亿个(注:数据来自于全球移动通信系统协会发布的《2020 年移动经济》报告)。IDC 预计到 2025 年,中国物联网总连接量将达到 102.7 亿个(注:数据来自于 IDC 发布的《中国物联网连接规模预测,2020---2025》报告)。全新的全场景设备体验,正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设备的转变,通过全场景多设备作为全新的底座,为消费者带来万物互联时代更为高效、便捷的体验。

当前移动应用开发中遇到的主要挑战包括:

  • 针对不同设备上的不同操作系统,重复开发,维护多套版本。

  • 多种语言栈,对人员技能要求高。

  • 多种开发框架,不同的编程范式。

  • 命令式编程,需关注细节,变更频繁,维护成本高。

什么是 HarmonyOS

HarmonyOS是一款面向万物互联时代的,全新的分布式操作系统;

HarmonyOS计划逐步覆盖1+8+N全场景终端设备,旨在为全场景智能化时代提供一个统一、便利、安全、高效的系统平台。(ONE AS ALL,ALL AS ONE!)

"1":智能手机;

"8":PC、平板、手表、智慧屏、AI音响、耳机、AR/VR眼镜、车机;

"N":IoT生态设备;

版本历程

|---------|-----------|------------------------------------------------------------------------------------------|
| 版本(大版本) | 时间 | 介绍(更新) |
| - | 2012-9 | ​ * 布局搭建系统 |
| 1.0 | 2019-8-9 | ​ * 首次发布,并开源操作系统代码,适用于华为智慧屏; |
| 2.0 | 2020-9-10 | ​ * 在分布式软总线、分布式数据管理、分布式安全等分布式能力上进行了升级; * UI开发、性能等提升; * 支持更多设备类型,包括华为智慧屏、智能穿戴、车机设备、智慧手机等; |
| 3.0 | 2022-11-4 | ​ * JS UI正式更名为ArkUI,并发布基于TS的全新开发范式; * 超级终端支持更多设备类型,眼镜、显示器等; * 引入Stage模型; |
| 4.0 | 2023-8-4 | ​ * 全新方舟引擎,系统性能优化; * 智能AI升级; ​ * 全新个性化设置; |
| NEXT | -- | 不再兼容Android应用?? |

架构演变

Android 架构

|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 架构层 | 说明 |
| Linux内核层 | Android是基于Linux内核的(Linux内核提供了安全性、内存管理、进程管理、网络协议和驱动模型等核心系统服务),Linux内核层为各种硬件提供了驱动程序,如显示驱动、相机驱动、蓝牙驱动、电池管理等等。 |
| 硬件抽象层(HAL) | 提供标准界面,向更高级别的 Java API 框架显示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。 |
| Android系统运行层( Android Runtime、Native C/C++ Libraries) | 运行时虚拟机及原生态的C/C++库支持 |
| Java API框架 | 构建应用程序时可能用到的各种API |
| 系统应用层 | 所有安装在手机上的系统应用都属于这一层,用户自己开发的应用也属于这一层 |

HarmonyOS 1.x

从架构图中可以看出,1.x版本将Android 9.0版本架构各层拆分后整合到了鸿蒙的架构分层中,​将 Framework 层替换为 Alibity 等组件,基于Java API进行封装、代理,提供ShellApplication、Ability等自定义API已达到对于Android的完美适配。(在这里可以弱弱的说一句:这是Android套壳吗?)

OpenHarmony 1.x

HarmonyOS 1.0正式发布后,便将源码开源出现了OpenHarmony。

在这里简单介绍一下HarmonyOS和OpenHarmony的关系,OpenHarmony是一个开源的嵌入式系统,它并不是一个手机版本操作系统,而是一个以单体内核 LiteOS 为基础的嵌入式设备操作系统,它就相当于Android中的AOSP。而HarmonyOS则是华为基于OpenHarmony搭建的商业化的、支持手机的操作系统。

LiteOS 是华为 2015年 发布的轻量级物联网操作系统,LiteOS 分为 LiteOS-A 和 LiteOS-M 两个变种。

支持内存128KB 到 128MB 的终端设备

  • LiteOS-A:面向有 MMU(内存管理单元) 的设备(L1级别)

  • LiteOS-M:面向无 MMU 的嵌入式设备(L0 级别)

OpenHarmony 2.x

这一版本支持了 Linux 内核,支持内存 128MB(L1) 以上的智能终端应用。

  • LiteOS-A:面向有 MMU 的设备(>=L1级别)

  • Linux:面向智能手机 (L5级别)

但是它缺少了一些智能手机必备的一些能力,比如沙箱机制、WebView、蜂窝网络等基础功能,无法正常作为一个智能手机系统使用,一般用于在功能机、广告牌、ATM 等场景。

HarmonyOS 2.x

当前版本仍然依赖于Android RunTime,并将Java API Framework整合至HarmonyOS UI框架中;

新增手机、手环、车机等设备支持,正式开启HarmonyOS 手机时代;

OpenHarmony 3.x

使用了渲染引擎 ACE(Ability Cross-platform Environment),支持 Java 和 JS 两种语言进行编写,其中 Java 仅支持在内存较大的设备上使用如大屏、手机、平板等设备使用,而 JavaScript 支持在百K级到G级设备上使用;

HarmonyOS 3.x

开始​逐步替换Android系统依赖;

HarmonyOS 4.x

  • 去除Android依赖,Android RunTime环境,当仍能兼容Android APK安装运行;

架构介绍

HarmonyOS采用四层架构,从下向上依次为内核层、系统服务层、框架层、应用层,支持根据实际需求裁剪某些非不要的子系统或功能/模块;

内核层

内核子系统

采用多内核设计,支持针对不同资源受限设备选择合适的OS内核;

驱动子系统HDF

HarmonyOS硬件生态开放的基础,提供统一外设访问能力和驱动开发管理框架;

系统服务层

HarmonyOS核心能力集合,包括适用于各类设备的基础能力以及面向特定设备的专有能力;

框架层

为HarmonyOS应用开发提供了Java/C/C++/JS等多语言的用户程序框架和Ability框架,两种UI框架(包括适用于Java语言的Java UI框架、适用于JS语言的JS UI框架),以及各种软硬件服务对外开放的多语言框架API;

应用层

支持基于框架层实现业务逻辑的原子化开发,构建以FA/PA为基础组成单元的应用(包括系统应用和第三方应用);

技术特性

硬件互助,资源共享

多种设备之间能够实现硬件互助、资源共享,使搭载HarmonyOS操作系统的设备在系统层面融为一体、形成超级终端。

超级终端的形成主要依赖以下关键技术:

  • 分布式软总线:基于华为极简协议建立的统一分布式通信能力,是多设备通信基座,为设备之间的无感发现和零等待传输创造条件

  • 分布式设备虚拟化:将已建立通信的多种设备进行资源融合、数据处理,形成一个虚拟的终端设备,该虚拟终点设备可以统一调用不同设备提供的如显示能力、摄像能力、音频能力等;

  • 分布式数据管理

分布式数据管理基于分布式软总线的能力,实现应用程序数据和用户数据的分布式管理。用户数据不再与单一物理设备绑定,业务逻辑与数据存储分离,跨设备的数据处理如同本地数据处理一样方便快捷,让开发者能够轻松实现全场景、多设备下的数据存储、共享和访问,为打造一致、流畅的用户体验创造了基础条件。

  • 分布式任务调度

分布式任务调度基于分布式软总线、分布式数据管理、分布式Profile等技术特性,构建统一的分布式服务管理(发现、同步、注册、调用)机制,支持对跨设备的应用进行远程启动、远程调用、远程连接以及迁移等操作,能够根据不同设备的能力、位置、业务运行状态、资源使用情况,以及用户的习惯和意图,选择合适的设备运行分布式任务。

例:

工作一天后回到家中,家里有一些鸿蒙生态的产品,如电视、电脑、音响、空调等等,回到家后我们就可以直接与这些设备通过软总线连接在一起(当然首次连接的时候还是需要人工操作一番,碰一碰、扫码、WiFi+蓝牙搜索等,后续可以选择自动搜索)。当这些设备都连接成功之后,就形成了囊括所有设备能力的虚拟终端,能够共享这些这边的硬件能力。

想要看个电影轻松一下,正常的话我们可能就直接在手机上播放然后选择投屏到电视上,在鸿蒙中我们可以选择电视作为我们的视频输出硬件,然后选择音响作为音频输出硬件,来结合不同设备的硬件优势,共享硬件能力,打造一个更优的观影体验。

这时候我们突然想起来之前还有文件、邮件需要处理,但是数据资源都在手机上怎么办,没关系,分布式数据管理支持超级终端内的设备数据共享,我们可以直接在电脑上直接访问手机上的文件并进行操作,然后同步给手机;

一次开发,多端部署

HarmonyOS提供了用户程序框架、Ability框架以及UI框架,支持应用开发过程中多终端的业务逻辑和界面逻辑进行复用,能够实现应用的一次开发、多端部署,提升了跨设备应用的开发效率。

最简单的例子就是不同设备的控件显示,提供了一些列的多态控件,在不同的设备上有不同的形态;

统一OS,弹性部署

HarmonyOS通过组件化和小型化等设计方法,支持多种终端设备按需弹性部署,能够适配不同类别的硬件资源和功能需求。

比如一个智能家庭系统,包括智能电视、智能冰箱、智能灯泡、智能音箱等各种设备。这些设备的硬件配置、性能和功能都各不相同,如果使用传统的操作系统,我们需要为每一种设备单独定制和优化操作系统,这无疑会增加开发和维护的复杂性和成本。

但是,如果我们使用HarmonyOS,情况就完全不同了。首先,HarmonyOS是一个统一的操作系统,它可以跨平台、跨设备运行,无论是电视、冰箱还是灯泡,都可以使用同一套操作系统。这大大简化了系统的开发和维护。

其次,HarmonyOS支持弹性部署,它可以根据设备的硬件配置和功能需求,灵活地裁剪和部署操作系统。例如,对于硬件配置较高、功能需求较多的电视,我们可以部署完整版的HarmonyOS;对于硬件配置较低、功能需求较少的灯泡,我们可以部署轻量版的HarmonyOS。这样,不仅可以充分利用设备的硬件资源,还可以提供定制化的用户体验。

鸿蒙生态

操作系统的成功与否,很大程度上取决于其生态系统的完善程度。HarmonyOS面向的是万物互联时代全场景,就必须考虑多设备、多场景、多业务的情况,而这些也就需要整个生态的支持

  • 一次开发,多端部署

  • 可分可合,自由流转

  • 统一生态,原生智能

支持业界主流开发框架,通过多层次的开发能力提供统一的接入标准,实现三方框架的快速接入;

开箱即用原生AI能力;

技术支撑

ArkTs

ArkTs是华为自研的开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发夸端应用;

ArkUI框架

ArkUI 是一套声明式开发框架,它具备简洁自然的 UI 信息语法、丰富的 UI 组件、多维状态管理,以及实时多维度预览等能力,帮助开发者提升应用开发效率,并能在多种设备实现生动而流畅的用户体验。这也是"一次开发,多端部署"的底层技术支持。

ArkCompiler(方舟编译器)

ArkCompiler是华为自研的统一编程平台,包含编译器、工具类、运行时等关键部件,支持多种编程语言、多种芯片平台联合编译、运行而设计的统一编译运行时平台。支持包括动态类型和静态类型语言在内的多种编程语言,如 ArkTS、TS、JS。

方舟编译器是鸿蒙系统作为手机、平板、电视、车机和智能穿戴等多种设备统一操作系统的编译运行时底座。主要分成两个部分,编译工具链与运行时。编译工具链以ArkTS/TS/JS 源码作为输入,将其编译生成为 ABC(ArkCompiler Bytecode,即方舟字节码)文件。运行时直接运行字节码文件,实现对应语言规范的语义逻辑。

也正是因为ArkCompiler的出现,HarmonyOS的系统性能得到了大跨度的提升。

如何快速迁移

|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 原始语言 | 适配纯HarmonyOS |
| Android(java、kotlin) | APK无法运行在纯鸿蒙系统,只能重写 |
| C++ | ​ * 标准库未100%支持,需要改造(线程等) * 胶水层需要使用napi进行适配 * 如何合理简便地实现TS、C++通信? |
| Flutter | ​ * Flutter官方明确不支持:https://github.com/flutter/flutter/issues/38437 * 三方提供了flutter对OpenHarmony的支持,可行性未知:OpenHarmony-SIG/flutter_flutter |
| RN | 暂无相关资源,只能重写 |

新项目选型方向

|------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 语言选型 | 说明 |
| TS | ​ * 鸿蒙官方语言 * 仅支持鸿蒙系统设备 |
| C++ | ​ * 底层统一,支持跨平台复用 * 标准库未100%支持,需要改造(线程等) * 胶水层需要使用napi进行适配 |
| ArkUI-X | ​ * ArkUI转换多平台代码: * HarmonyOS项目依赖ArkUI-X插件、SDK; * 编译构建,生成对应平台代码module; * 将自动生成的代码复制到对应的Android、iOS项目中; * 跨平台支持范围有限,基于ArkUI * 无法处理指定平台项目代码中的修复内容,每次只能根据HarmonyOS自动生成代码 |

相关推荐
顾北川_野3 分钟前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
&岁月不待人&14 分钟前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
Winston Wood2 小时前
Android Parcelable和Serializable的区别与联系
android·序列化
清风徐来辽2 小时前
Android 项目模型配置管理
android
帅得不敢出门3 小时前
Gradle命令编译Android Studio工程项目并签名
android·ide·android studio·gradlew
problc3 小时前
Flutter中文字体设置指南:打造个性化的应用体验
android·javascript·flutter
努力变厉害的小超超5 小时前
ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染
笔记·鸿蒙
帅得不敢出门14 小时前
安卓设备adb执行AT指令控制电话卡
android·adb·sim卡·at指令·电话卡
我又来搬代码了15 小时前
【Android】使用productFlavors构建多个变体
android
德育处主任17 小时前
Mac和安卓手机互传文件(ADB)
android·macos