什么是鸿蒙
去年8 月份华为发布会上,华为发布了HarmonyOS NEXT预览版,宣布不再兼容安卓应用。大家期待的纯血鸿蒙终于要来临了,next 预览版本现在已经开放申请渠道了,Next 开发者预览版本目前只向三款手机开放, mate 60、mate60 pro 和 mate x5。
一、什么是鸿蒙,他是 android 套壳吗?
鸿蒙是华为自研的操作系统,发布之初发现它上面也能兼容安卓应用,大家纷纷猜想鸿蒙系统可能又是厂商自己经过改造 Android 套个壳发布是自研系统,尤其是他刚开始出那个鸿蒙开发的时候,大家发现代码包括开发方式都跟安卓很像,xml 布局、获取控件等等。鸿蒙系统之所以能够兼容安卓是因为其采用了分布式技术架构,并且通过 HarmonyOS Runtime
虚拟机环境来支持运行基于Java语言开发的安卓应用程序。
大家发现在鸿蒙 OS 上运行的应用比别的手机快呢,是因为鸿蒙 OS采用微内核+AOSP(安卓系统)双架构。对 ART(Android Runtime)
模式做了一个重要的优化升级。那就是方舟编译器替代了AOT(提前编译)编译器。方舟编译器是基于AOT编译器开发而来,但完全摆脱了java虚拟机的机制,将高级语言的字节码提前编译成二进制代码,让CPU直接运行二进制机器码,运行速度提升了60%。以往 Android 那套 dex 机制反而落后。
二、微内核与宏内核
HarmonyOS NEXT完全舍弃 AOSP 直接采用微内核单架构。微内核和宏内核大家可以自己去深入了解一下。我就简单的描述一下。
- 宏内核:
将所有的核心功能(文件系统、内存管理、设备驱动等)都放在一个单一的执行空间内。这意味着所有的系统服务和功能都运行在内核的上下文中,彼此之间共享同一个地址空间,这样做的好处是所有的服务都在一起,交互更加直接,坏处就是一个服务崩溃会影响到其他所有的服务。Android 就是传统的宏内核。 - 微内核:
现在鸿蒙 4.0 其实完全跟 android 脱钩了,他只是有双架构支持一下跑一下 Android。鸿蒙采用的是微内核。尽可能的保持内核的功能最小化,只保留一些最基本的服务,其他的系统功能和服务都放在用户空间,这样做的好处就是他的稳定性和可靠性上来了。而且提供服务裁剪,在不同的设备上部署不同的服务,微内核虽然增加了一些性能开销。但是在这个性能过剩的时代里面。其实这个开销基本可以忽略
三、应用程序框架(Stage 模型)
- HAP:OpenHarmony应用编译、分发、加载的基本单位。与开发态的module一一对应。在应用内,moduleName是其唯一标识;
- Bundle:通过appid标识的OpenHarmony应用,Bundle可以包含多个HAP,每个应用都有一个bundleName,但是bundleName并不能唯一标识一个应用,appid中包含bundleName以及其他的更多信息,能够唯一标识一个应用;
- AbilityStage:对应HAP的运行期对象,在HAP首次加载到进程中时创建,运行期开发者可见;
- Application:对应Bundle的运行期对象,运行期开发者不可见;
- Context:提供运行期开发者可以调用的各种能力,Ability组件和各种ExtensionAbility都有各自不同的Context类,他们都继承自基类Context,基类提供包名、moduleName、路径等信息;
- Ability:提供生命周期回调,持有AbilityContext,支持组件的跨端迁移和多端协同;
- ExtensionAbility:基于场景的扩展能力统称,系统定义了多种场景的ExtensionAbility类,它们持有各自的ExtensionContext;WindowStage:本地窗口管理器;
- Window:应用窗口,持有一个ArkUI引擎实例;
- ArkUI Page:基于ArkUI开发的用户界面。
四、AbilityStage(开发者关注)
API9 之前是另外一种模型叫 FA 模型,这个我们先不讲。我们来看 Ability,它 是 应用程序框架中最基本的抽象单位,是能够完成独立功能的应用组件。一个应用可以是一个 Ablity 也可以是多个 Ability 组成。我们在开发的过程通常都是分功能模块来开发的,每一个功能模块就是一个 Ability。在鸿蒙开发里面每一个 module 都是可以单独打包成 HAP 文件独立运行,也可以多个 hap 打包成一个 app pack 来运行。举个例子,如果我们来开发抖音的短视频模块和电商模块。电商模块是比较独立的一个功能,那我们可以用两个 Ability 来完成一个抖音应用,也可以单独发布一个纯净版的短视频版 抖音,不包含电商的功能
很多人问过我 Android 的 Activity跟鸿蒙的 UIAbility 是不是类似的东西,其实他们两个的思想是类似的,都是用于用户界面展示和用户交互的组件,简单点理解可以认为ArkUI Pgae就相当于 Fragment,一个 Ability 就是一个 "Activity",现在 Activity 放入一个 fragment就相当于Ability 在他的WindowStage创建的时候load 了一个ArkUI page Ability加载一个 page Ability 的层级比 Activity在 android 应用里面的层级要高一个层级,我们都知道每一个 Activity 要在 manifest 里面去注册,而在我们的 Ability 里面,每一个 page 是要注册注册在我们自己模块下面的 main_pages.json下面的。Ability 的页面跳转是通过路由的方式来跳转的,通过导入 router 包,调用 router.pushUrl(“页面路由")来跳转。同时各个页面之前还可以进行数据通讯,这么一看,好像鸿蒙里面的 ArkUI Page 是不是也像一个 Activity。讲到这里,大家应该可能觉得Ablity 好像也承担了一部分 Android 里面 Application 的功能。所以归根到底它们俩不是同一个东西,正好印证了我们前面所说的 Ability 是完成独立功能的应用组件。而不仅仅只是一个页面,里面放了很多 View。有想了解更多的可以关注一下这篇文章,链接丢上来文章会被锁,大家可以搜索这个关键词
五、harmony(鸿蒙)Stage模型综述
Harmony OS与 OpenHarmony关系,引用一下 ChatGpt上面的解释:
- OpenHarmony:
是华为提取了Harmony OS 的基础功能进行开源的一个操作系统,是 Harmony OS 的基础版本。可以理解为它是 Android 的某一个版本,比如 Android 14. - Harmony OS:
就是华为自己根据 Android 14 定制的一个服务于自己手机的一个操作系统,目前华为鸿蒙的专用开发工具 DevEco Studio自带 Harmony OS SDK。所以我们如果是基于华为设备进行开发的话,只需要关注Harmony OS 的开发即可。如果想使用 ArkUI-X构建跨平台应用可以下载官方OpenHarmony SDK进行开发
这一篇我们讲了一下鸿蒙系统为什么不是 Android 套壳还能跑 android 的原因,也介绍了一些初步的鸿蒙系统的一些知识,后续的文章我会正式开始更新 TS、ArkTS、ArkUI以及 ArkUI-X构建跨平台应用的相关文章,喜欢的朋友多多点赞。大家一起学习,一起进步.