HarmonyOS调研分享

news2024/12/23 20:41:35

经过十多年的发展,传统移动互联网的增长红利已渐见顶。万物互联时代正在开启,应用的设备底座将从几十亿手机扩展到数百亿 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自动生成代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1352556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatGPT带你学习设计模式 (二)抽象工厂模式(创建型模式) GURU

深入理解抽象工厂模式 引言 在面向对象编程中,对象的创建是一个常见且关键的挑战。尤其在需要管理一系列相关对象的创建时,传统的对象创建方法(如直接使用 new 关键字)可能导致代码的高耦合和低灵活性。这时,抽象工厂…

5+共病+WGCNA+机器学习+免疫浸润,经典共病生信思路,轻松拿5+

今天给同学们分享一篇生信文章“Identification of biomarkers for the diagnosis of chronic kidney disease (CKD) with non-alcoholic fatty liver disease (NAFLD) by bioinformatics analysis and machine learning”,这篇文章发表在Front Endocrinol (Lausann…

Spring-Retry 重试框架使用

一、Spring-Retry Spring-Retry框架是Spring自带的功能&#xff0c;具备间隔重试、包含异常、排除异常、控制重试频率等特点&#xff0c;是项目开发中很实用的一种框架。 支持手动调用方式和注解方式。 使用需引入下面依赖&#xff1a; <dependency><groupId>o…

Vue:脚手架Vue-CLI的使用

一、环境准备 vue脚手架&#xff08;vue-CLI&#xff09;的使用是基于nodejs环境下的。 你可以简单理解为&#xff0c;Java项目需要再jvm虚拟机上才能编译运行 nodejs的作用就是将vue文件编译成html、css、js代码文件。 如何安装nodejs 参考&#xff1a;https://blog.csdn.net…

Uibot (RPA设计软件)培训前期准备指南————课前材料

紧接着小北的上一篇博客&#xff0c;友友们我们即将开展新课的学习~RPA 培训前期准备指南——安装Uibot(RPA设计软件&#xff09;-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135348488?spm1001.2014.3001.5502 课程安排如下&#xff1a; 序号 日期 内容 视…

五、Spring AOP面向切面编程(基于注解方式实现和细节)

本章概要 Spring AOP底层技术组成初步实现获取通知细节信息切点表达式语法重用&#xff08;提取&#xff09;切点表达式环绕通知切面优先级设置CGLib动态代理生效注解实现小结 5.5.1 Spring AOP 底层技术组成 动态代理&#xff08;InvocationHandler&#xff09;&#xff1a;…

springcloud alibaba整合sentinel并结合dashboard控制面板设置规则

目录 一、springcloud alibaba整合sentinel二、采用代码方式设置流控规则三、结合dashboard控制面板设置规则3.1、准备工作3.2、设置全局异常处理3.3、编写测试接口3.4、结合dashboard控制面板设置规则3.4.1、流控规则设置并测试——QPS3.4.2、流控规则设置并测试——线程数3.4…

反编译有哪些优势

在现在这个信息化的时代&#xff0c;软件开发中的编程是关键步骤&#xff0c;了解编程的反编译同样至关重要。对于大多数人来说&#xff0c;编程和反编译似乎是两个相对比较陌生的概念&#xff0c;但是都在软件开发周期中起着至关重要的作用。尤其是反编译&#xff0c;它在多个…

nginx访问路径匹配方法

目录 一&#xff1a;匹配方法 二&#xff1a;location使用: 三&#xff1a;rewrite使用 一&#xff1a;匹配方法 location和rewrite是两个用于处理请求的重要模块&#xff0c;它们都可以根据请求的路径进行匹配和处理。 二&#xff1a;location使用: 1&#xff1a;简单匹配…

基于Java Servelet的学籍管理系统(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

【Qt之Quick模块】7. Quick基础、常用组件Item、Rectangle、Text、TextInput、TextEdit等

1. 概述 Qt Quick模块是编写QML应用程序的标准库。Qt QML模块提供QML引擎和语言基础结构&#xff0c;Qt Quick模块提供用QML创建用户界面所需的所有基本类型。它提供了一个可视化画布&#xff0c;包括用于创建和动画化可视化组件、接收用户输入、创建数据模型和视图以及延迟对…

外汇天眼:CySEC与NAGA Markets Europe达成15万欧元的和解

塞浦路斯证券交易委员会&#xff08;CySEC&#xff09;已经与NAGA Markets Europe达成15万欧元的和解。有关监管决定的会议于2023年3月举行&#xff0c;然而直到今天才公布这个决定。 该和解符合2009年塞浦路斯证券交易委员会法第37(4)条的规定&#xff0c;该条赋予CySEC就任何…

FairGuard游戏加固产品常见问题解答

针对日常对接中&#xff0c;各位用户对FairGuard游戏加固方案在安全性、稳定性、易用性、接入流程等方面的关注&#xff0c;我们梳理了相关问题与解答&#xff0c;希望可以让您对产品有一个初步的认知与认可。 Q1:FairGuard游戏加固产品都有哪些功能? A&#xff1a;FairGuar…

用python实现调用海康SDK

海康威视&#xff08;Hikvision&#xff09;提供了Python SDK&#xff0c;用于与他们的摄像头和其他设备进行交互。为了使用这些SDK&#xff0c;首先需要在你的系统上安装海康威视的Python库。 下面是如何在Python中使用海康威视的SDK来调用摄像头的方法&#xff1a; python复…

车载 Android之 核心服务 - CarPropertyService 解析

重要类的源码文件名及位置&#xff1a; CarPropertyManager.java packages/services/Car/car-lib/src/android/car/hardware/property/ CarPropertyService.java packages/services/Car/service/src/com/android/car/ 类的介绍&#xff1a; CarPropertyManager&#xff1a…

从信号处理角度彻底理解FFT

只想速览公式可以转到简明FFT公式 一、FFT起初用于解决的问题 分解复合信号 将复合信号视为若干正弦波与余弦波的叠加&#xff0c;如何得知某个正弦波/余弦波在该信号中的强度&#xff1f; 二、即答 用特定频率的正弦波/余弦波&#xff08;设其为a&#xff09;乘上复合信号…

Linux的引导过程与服务控制

一.开机启动的完整过程 引导过程&#xff1a; 1.bios加电自检 检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 服务器主机开机以后&#xff0c;将根据主板BIOS中的设置对CPU、内存、显卡、键盘灯设备进行初步检测&#xff0c;检测成功后根…

一个JSON.parse的问题,让我丢掉了字节的 offer!

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。微信在文章底部&#xff0c;欢迎来撩~~~~~~~~ Hello&#xff0c;大家好&#xff0c;我是 Sunday。 在几年前的一次字节跳动面试中&#xff0c…

HelloWorld搭建(第一种模型)

1.创建Springboot项目并且引入依赖 <!-- 引入RabbitMQ的相关依赖 --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.7.2</version> </dependency> 2.第一种模式(直连…

企业生产安全指南,请点击文章查收!

随着科技的不断发展&#xff0c;视频监控系统在各个领域中扮演着越来越重要的角色。视频监控系统为企业和机构提供了强大的工具&#xff0c;以提高效率、增强安全性&#xff0c;并为决策制定提供实时数据支持。 客户案例 企业安全与生产管理 在现代企业环境中&#xff0c;保障…