分享

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

 w我的工程 2020-12-18

这篇文章比较硬核,如果我讲的不对的欢迎指出。

华为举办了鸿蒙 OS 2.0 手机开发者活动,我是下午去的,下午主要是解读一些技术上面的问题,很感谢菊厂给我这个去凑热闹的机会。

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

我主要想分享一些官方大佬对 Harmony OS 2.0 的架构、关键技术的解读。上了 3 个来自消费者业务和 2012 实验室的大佬来分别来讲。整个信息量还是比较多,所以我省略了很多东西。

先讲系统架构,这个东西其实已经公开了,不过有更多细节可以讲。

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(Harmony OS 2.0 框架(从 OpenHarmony OS 哔哩哔哩账号上截取的一张图))

从低到高讲起,最底层在手机端是 Linux Kernel,华为在 Harmony OS 1.0 的时候讲要在内核阶段统一用微内核,然后应对不同设备进行裁剪。现在华为应该是觉得把微内核应用到手机上工作量太大,所以内核还是躺平用 Linux 了。

现在应对不同设备的低级裁剪是通过换内核+统一内核抽象做到的。所谓统一内核抽象,其实就是 POSIX,(还有一个什么 SIX 在内核抽象层我不认识,也没拍)。

关于 POSIX 可以多讲几句,linux 内核本身只是用于进程调度的,而 POSIX 则是一套标准命令行操作界面规范,大部分的 GNU Linux 发行版只是“高度兼容”POSIX,而华为做的 EulerOS 和 Apple 的 Mac OS 是完全「认证」兼容的。

结果就是大家在 Mac OS 的终端和 GNU Linux 的终端大部分命令都是通用的,包括很多自己写的命令行小程序也是通用的,而 Mac OS 和 Linux 的内核是不同的,(Mac OS 内核最早是部分 BSD-based,也不是 POSIX 完全兼容的,后面 Apple 做出了自己的发展),这就是统一内核接口带来的跨平台构建的好处。

当然,LiteOS 抽象出来的内核抽象层是 Linux 内核抽象层的真子集。

另外一个最底层的是驱动子系统 HDF,这方面华为应该做了一些工作,主要是统一各种 Harmony OS 物联网设备的驱动语言,但是我也不是很清楚具体的情况。

中间层分成上下两层,下层是 Harmony OS 2.0 的重中之重,可以说是全村人的希望了,就是一系列比较贴近底层的分布式技术,运行在所有运行被定义为 Harmony OS 2.0 的系统的设备上,保证这些设备都能互联,后面专门展开讲。上层主要包括 Ability 运行框架、其它可裁剪的系统服务。

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(安卓系统架构)

对比安卓的架构,底层 Linux Kernel 和 HAL 分别对应 KAL 和 HDF。应用程序框架(中层写了各种 Ability 的哪个区域)应该主要对应的是 ART、C/C++ Libraries 和 Java API。这部分内容 Harmony OS 介绍的比较模糊,但是理论上来讲 ART、C/C++ Libs 和 Java API 都应该是应用程序框架的子集,来保证对 Android 应用的兼容性。Java API 里各种硬件的 Manager 应该是要重写和扩充,以保证高层级对 LiteOS-based 物联网设备的兼容性。

最上层是系统应用和第三方应用。这个应用官方推荐的是“原子化”的程序设计原则,一个程序包含多个子程序,不同的子程序组合得到的 package 分发给不同的设备,实现应用层面对不同设备的按需裁剪。在单一设备上运行的程序其实可以做的跟安卓应用开发几乎无区别。包括生命周期的控制都是一样的,不过这一套生命周期的逻辑不好移植到电脑应用上,官方现在对电脑好像没有想法,我觉得是很可惜的。

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(FA:带有 UI 的子程序,PA:没有 UI 的子程序)

原子化设计应用的案例,就是大家熟悉的畅联通话。

其实就单一设备的体验来说,目前 Harmony OS 跟安卓没有很大差别,这个差别主要还是做在跨设备协同上的。这个东西确实是要深入到操作系统内核上的,包括最常见的多屏协同,三星跟微软有合作,Win10 上的“你的手机”又称“你的非国行三星手机”,也不是微软不想推广,主要是这个也不是简单装 APP 解决的事儿。有线连接的话其实多屏协同也有开源的解决方案,但是都得打开 adb 调试模式,因为这里有个不同设备连接之间鉴权、提权的问题。

多屏协同是单对单的东西,系统里面插一点东西就可以解决,华为做的就相对来说更激进,就是对不同规模设备的系统统一重新调整架构,把多设备互联做到更低的水平上,并且建立一个统一的标准。互联的标准做好了,再把性能做上去就是自然而然的事情。华为目前在这方面做的工作应该是看得到的最多的,包括自发现自组网等等。但是华为并不是唯一一家想做这个的公司,据我所知微软也有意涉足多设备互联的方向。

这个互联方面华为 2012 实验室的大佬讲了很多技术性问题,比如根据近场通讯的特点对通信协议进行简化,以实现更高的性能,设备之间通过蓝牙、WiFi、UWB 等技术组网,连带组网。对于应用开发者来说最重要的是这些技术细节实际上都是完全不需要关心的,只要引用特定的 API,操作远程的设备和数据就跟在本地基本一样。即使是在发现和连接这个环节,也是完全封装好的,不需要开发者去指定通信协议、信道之类的问题。不过我猜测因为这样,所以其实留给开发者操作的空间也有一定限制,至少重新在应用层面搞投屏的多屏协同应该正常是搞不出来的。

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(近场传输的应用 DEMO,注意“软总线底层隐藏逻辑”是开发者不需要关心的)

跨设备的操作包括调用其他设备的硬件,这个我没去分会场听。还有就是分布式数据库、分布式文件管理、分布式调用 API 和 APP 等。

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(李宁老师介绍的分布式技术的实现(分会场))

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(分布式数据库的同步模型介绍(分会场))

这里有一个很好的愿景

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(愿景)

分布式体验 v3 目前应该还在孵育中。但是目前分布式软总线可以做很多事情了,包括以前我听一些 Apple 用户讲的,在手机上收到消息,可以在电脑端打开对应桌面端应用进行回复——如果Harmony OS未来登上PC的话。可以参见B站上李宁老师的一个demo项目BV1x5411H78W。不过鹅厂到底会不会合作呢。。。

最后,话又倒转回来说了,虽然说 Harmony OS 大概率算是 AOSP 的超集(superset),前面也说在单个设备上可以做得跟安卓一样,但是也不代表华为没有在运行时上下功夫。方舟编译器以及对应的运行时应该可以算是“现在进行时”的努力,华为在这方面愿景还是很大的,包括多语言多终端支持,目前开源版本诟病最多的是没有 runtime 开源,但是我觉得未来最大的麻烦还是美研所 fork 出去了一个开源孵化器版本(比官方开源版本走得更远),怎么 merge 回来。华为和美研所貌似不能邮件沟通,只能通过开源社区迂回合作,总归是有限制。

另一方面的努力包括一些图形引擎、UI 引擎,都有做或者是重写,提供性能改进和对 Lite OS 设备的支持。之前玩过 DevEcoStudio 的同学都知道 LiteOS 内存只有几百 KB,只能写 Java,但是目前好像已经做好了一个轻量的 JS 引擎,占用只需要 100KB,可以为运动手表 JS 应用提供支持,还是很不容易。

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(华为做的 JS UI 轻量化框架)

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(用户程序框架)

目前这套 UI 引擎也还在改进中,后续有可能重做 UI 编程语言吧,看看明年 2 月份会不会有新消息。

硬核:鸿蒙OS2.0开发者交流活动见闻,理性评价

(UI 引擎的未来计划)

目前 UI 框架大部分情况下只支持到 90 FPS。

总的来说,鸿蒙 OS 2.0 是自己的内核,但是应用暂时还是会使用安卓的,可能相对来说,区别和安卓系统不大,但是未来肯定是自己的应用的,毕竟那么多的开发者,那么多的 APP,适配的时间是需要的,我们不妨多给点时间给华为吧。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多