导语
6月2日,HarmonyOS 2颁布,颁布会上演示了非常多HarmonyOS炫酷的功能,超级终端,万能卡片,多端协作,是不是非常心动呢。
不仅新颁布的几款设备,非常多老的华为亦都能够升级鸿蒙系统了,例如华为的Mate 40系列,Mate30系列, P40系列,MatePad Pro平板,华为智慧屏系列等,你的华为设备有无升级鸿蒙呢。
能够去HarmonyOS官方博客中查看百机升级计划, 包含老荣耀的非常多设备都会升级到鸿蒙系统。
倘若已然有支持升级的华为手机,剧烈举荐升级到HarmonyOS,不必须担心兼容性问题,他是100%完全兼容安卓的。
此刻华为应用商店已然上线了“HarmonyOS”专区,大家能够去体验一下原生的鸿蒙App
日前还有有些应用虽然是Android app,然则支持HarmonyOS服务,这种日前重点支持的是鸿蒙的原子化服务,这类型服务在图标下面有一条横线,上滑就会弹出一个服务卡片,另一从手机左下角或右下角上滑会显现服务中心,这儿面能够展示和发掘所有原子化服务。
当然,这篇文章不会给你介绍哪些炫酷的功能,我想稍微深入一点去科研一下,例如HarmonyOS和OpenHarmony的关系,例如HarmonyOS和安卓的关系。先来简单介绍下HarmonyOS
|HarmonyOS 简介|
官网:
https://www.harmonyos.com/
研发者官网:
https://developer.harmonyos.com/
HarmonyOS 官方定义是一款“面向将来”、面向全场景的分布式操作系统;
HarmonyOS的特性能够从三个方面表现:
#1
操作系统层面,一套操作系统代码,经过组件化的设计方法设计;能够按照设备特性和业务必须灵活定制剪裁;从而满足从耳机、穿戴、车机到智慧屏,手机等所有设备的需求。
#2
用户体验层面,经过超级终端,区别硬件协同、资源共享。
#3
研发者层面,分布式应用框架,一次代码,多端安排;能够有效研发跨设备的应用
能够看出,HarmonyOS抓住了将来万物互联的发展趋势,着重打造的是分布式的,面向各样类型设备的系统。
|OpenHarmony|
都说HarmonyOS是开源的,其实并不准确事实上,HarmonyOS和开源的鸿蒙(OpenHarmony)并不完全相同。
■OpenHarmony是开源版本的鸿蒙,一款捐给了开放原子基金会,任何个人和公司都能够参与,此刻仍然是孵化周期。
■而HarmonyOS是华为基于OpenHarmony的商用的不开源的操作系统,日前仅华为运用。
■OpenHarmony是不兼容安卓的,里面无任何安卓的东西。
■而HarmonyOS是完全兼容安卓的,日前兼容的是Android 10的版本。
日前OpenHarmony 上面有232个开源仓库,据我下载了openharmony-2.0-canary的源码,代码体积是4.8GB,third_party是2.91GB,鸿蒙本身的代码是1.89G,据网络上统计总代码量根据行数鸿蒙的代码占20%,这已然是很高的比例了(据述AOSP中谷歌代码占15%)
日前OpenHarmony依旧处在孵化周期。在1.x的时候,OpenHarmony 还只能面向非常小的物联网设备, 而近期开源的2.0 Canary版本才增多了Linux内核,支持了全面的OS能力,支持大于128M的带屏设备的研发。
详细的能够参考OpenHarmony2.0更新日志:zh-cn/release-notes/OpenHarmony-2-0-Canary.md · OpenHarmony/docs - Gitee.com
B站UP主东方星痕运行了纯净的OpenHarmony的系统,能够看到OpenHarmony还是是非常简单的。
分析OpenHarmony的源码工程能够发掘,他此刻还只支持C/C++研发和js研发,并不支持java语言研发。
例如开源的系统三大组件(桌面起步器、设置、systemui)都是html+js+css研发的。
源码中app_samples工程中虽然有非常多Java工程,然则都只支持在HarmonyOS中运行而不可在OpenHarmony中运行。详细参考他的Readme ,仅有少许js工程能在OpenHarmony中运行(common/JsHelloWorld和common/Clock)OpenHarmony/app_samples - 码云 - 开源中国 (gitee.com)
对应DevEco Studio 中的`Import HarmonyOS Sample)
从源码中得知,日前的OpenHarmony还不足作为一个手机系统,他只是从2.0起始能够研发标准系统设备罢了。
因此倘若其他手机厂商想要基于OpenHarmony进行OS的研发,这可能必须非常海量的工作。单不兼容Android这一点,其他厂商就不可能在自己的手机设备中选取OpenHarmony,最少日前是不可能的。
另一,选取HarmonyOS的可能性亦不是尤其大,由于HarmanyOS并不是开源的,因此各个厂商就很难供给个性化的服务,并且严重依赖华为。
分析HarmonyOS 和Android
鸿蒙OS的研发IDE是DevEco Studio(一样是基于Intellij IDEA Community研发,是标准的Gradle工程,支持Java和JS两种语言进行研发), 浏览一下API,做安卓的朋友应该非常容易上手,由于基本组件和UI这块的API和Android非常类似。
下载好IDE以后,还必须登陆华为研发者账号才可正常运用。
这儿咱们从IDE 供给的Template中选取Shopping Ability(Java) 创建工程(仅支持HarmonyOS手机),创建好以后,要配置签名才可在真机上运行。这儿咱们直接分析编译包即可。
鸿蒙OS的安装包有两种,一种是hap,一种是app, app能够包括多个hap,然则只会有一个entry hap(主应用),其他的都是feature hap。这是一种模块化的思想。后面分发的时候,用户能够先只下载主hap,等待必须用到某些功能的时候再动态下载feature hap。
这个同Android 后面搞的 Android App Bundle类似。
将编译后的"entry-debug-rich-unsigned.hap" 后缀名改成zip包解压得到如下结果:
■classes.dex,运用的是android 的dex格式
■assets下面是所有的资源, HarmonyOS运用的是自己的一套资源二进制格式
■config.json是配置文件(类似Android的AndroidManifest.xml文件)
1) AndroidManifest.xml是Android app中的配置文件,用来声明app运用的版本,权限、四大组件等
2) classes.dex 是安卓apk中java 代码编译后的产物,类似java 的class文件(或理解成jar包亦行)
不外比较奇怪的是他里面有一个"entry_debug_signed_entry.apk"(apk是Android 安装包格式),一样分析一下他的源码:直接解压如下:
确实是一个标准的apk文件。
分析一下他的classes.dex和AndroidManifest.xml
先瞧瞧名单文件:
Application类的实现是ShellMyApplication
有一个Activity是MainAbilityShellActivity
当前版本是api 29(亦便是Android 10)
运用jadx-gui查看classes.dex文件:
里面的内容非常简单,仅有以上两个类和一个R类,并且里面的实现非常简单:
ShellMyApplication继承自HarmonyApplication
MainAbilityShellActivity继承自AbilityShellActivity
咱们能够从HarmonyOS SDK 中看到看到HarmonyApplication和AbilityShellActivity对应的反编译以后的代码。
从这个abilityshell_ide_java.jar中能够看到,鸿蒙会把Android的三个组件(Activity,ContentProvider、Service)还有Application都套一层,而后转发给鸿蒙应用框架,最后由鸿蒙应用框架去执行。
那HarmonyOS定义的一整套全新的API是怎么运行的呢?这儿简单分析一下比较感兴趣的UI界面的运行径例。
运用Android Studio的Layout Inspector查看布局,如下:
全部核心界面只是一个AGPContainerView. 亦便是说HarmonyOS定义的整套UI都是绘制在一个View里面的,应该是类似Flutter的自绘制的方式。而不是类似RN那样,每一个界面元素映射到原生系统的一个View。
日前看来,HarmonyOS在手机中,不论是Android app还是鸿蒙app,都是以一个Android app的方式来运行的。
整体的原理是经过Android框架获取到所有底层必须的信息(亦便是兼容Android底层),而后转发给鸿蒙框架去运行。
全部鸿蒙App能够看成是一个插件化的Android app,区别是插件是一套完全不依赖Android 框架的模块。亦便是倘若咱们基于HarmonyOS框架研发的app,后续是完全能够脱离Android 环境的。Android 运行时只是日前鸿蒙app运行的宿主。
因此,我个人理解,其实在手机系统中,是Android app兼容鸿蒙app而不是鸿蒙app兼容Android app。咱们乃至能够直接把一个鸿蒙app导出为一个apk,然则这个apk在其他手机上是运行失败的,由于无鸿蒙运行库。
因此,HarmonyOS 在手机上的方法是基于OpenHarmony(亦不是此刻开源的这个版本)再融合AOSP(Android 10版本)中的大部分组件加上华为的一系列服务的系统。
大众其实能够去设置->关于手机->法律信息里面查看开放源代码许可,里面有非常多的Android 开源。
不外华为这般做亦是日前最好的方法了。
首要有一套完全的应用框架和API出来,大众基于这套框架进行鸿蒙研发是完全不依赖Android api的,等到原生的鸿蒙应用越来越多,这般,后续就能够慢慢替换掉Android的部分。(不外这种的兼容方法,各个app厂商有多大的动力去研发鸿蒙原生app呢,毕竟鸿蒙原生app他亦不支持安卓呀。)
此刻Java的这套API日前还不支持OpenHarmony,因此OpenHarmony后面肯定还会开源3.0来支持这套API的,能够耐心等待,多给鸿蒙有些时间。其实不必讨论HarmonyOS是不是安卓套壳, 路要一步步走,操作系统是一个非常大的工程况且牵涉甚广, OpenHarmony还在孵化器, 只要基于OpenHarmony上下游的合作伙伴越来越多,HarmonyOS将来就会完全替换掉Android乃至手机系统亦替换掉Linux,这个亦是HarmonyOS必定会去做的。
参考文案
OpenHarmony 2.0和HarmonyOS颁布会快评
鸿蒙OS到底是不是Android套皮?(少bb,看源码!)
鸿蒙Harmony谈了这么久,和Android到底啥区别?
鸿蒙对标的是安卓吗?No
怎样给女伴侣解释什么是鸿蒙?
鸿蒙版APP已上线,比安卓小太多了!
作者简介
leoraylei(雷声伟)
基本科技制品部/终端研发室
|