鸿蒙系统是否是Android套壳?代码层面深层剖析

12月16日,鸿蒙2.0(HarmonyOS 2.0)重磅发布,开始应用到手机系统,同时官方开发工具HUAWEI DevEco Studio和开发工具包也更新到了2.0,这意味着广大程序员可以在手机、平板上开发App。
鸿蒙2.0的发布,立刻在网络掀起了一阵讨论热潮,一部分网友说鸿蒙是自主研发,民族荣耀,另一部分网友说鸿蒙是Android套壳,欺世盗名。说鸿蒙是自主研发的有以下观点,
1,鸿蒙os是微内核liteos,跟Android的宏内核完全不一样,只是兼容Android的app。
2,如果鸿蒙剽窃了Android,谷歌会坐视不理么,肯定起诉华为,当年谷歌就搞死了阿里的YunOS。
3,鸿蒙支持分布式,比Android高级多了,根本不是一回事。
4,鸿蒙手机开机没有 Power By Android了

但是说鸿蒙是Android套壳的也有一套理论,

1,把Android 低版本的app放到鸿蒙手机上出现了Android系统官方提示,如图,这是系统的提示,不是开发者决定的。鸿蒙手机系统刚发布,哪来的旧系统?
image.png

2,鸿蒙的app安装包格式是hpk,解压后直接出现了apk,就是Android的安装包格式。

3,鸿蒙sdk里面有Android的sdk。
4,鸿蒙代码仓库里面并没有看到java相关的liteos代码。

我是一名Android程序员,用我的经验给大家分析一下双方的观点。首先看一下支持自主研发的观点。
1,鸿蒙os是微内核liteos,跟Android的宏内核完全不一样,只是兼容Android的app。

首先我们看下鸿蒙官方提供的鸿蒙架构图
image.png

可以看出鸿蒙是多内核,既有Linux,也有liteOS,还有其他内核等等,那么其他里面有没有安卓相关的呢?我们不得而知,真要较真的话,只能让鸿蒙开发人员出来解释了,毕竟后面还有省略号,另外补充一下,Android不是内核,是操作系统,所以我们刚才说是Android相关的。
2,如果鸿蒙剽窃了Android,谷歌会坐视不理么,肯定起诉华为,当年谷歌就搞死了阿里的YunOS。
此处有个误解,就是Android属于谷歌。Android虽然由谷歌发起,但是作为开源项目,Android属于全人类,不受谷歌的约束,真正受谷歌约束的是GMS(谷歌管理服务框架),现在谷歌已经禁止华为安装GMS了。对于Android,无论华为是否使用,谷歌都无权管理。
那么再聊一聊,当年谷歌是怎么搞死YunOS的。2012年,阿里发布了YunOS,由于和Android极度相似,同时又和拉拢硬件厂商,这相当于和谷歌正面竞争,引起谷歌不满。YunOS并没有开源,所以并没有直接证据表明YunOS剽窃Android。谷歌当时让厂商做出二选一,用了YunOS,就不能在用GMS,不能用GMS,在国外的话手机用不了像YouTube等一系列谷歌的APP,基本就是砖头了,厂商自然就抛弃了YunOS。
3,鸿蒙支持分布式,比Android高级多了,根本不是一回事。

鸿蒙架构图上面我们已经看到了,再看下Android架构图
image.png

可以看出Android是基于Linux内核的,和鸿蒙的多内核确实是不一样的
4,鸿蒙手机开机没有 Power By Android了

上面我们说过,Android是开源项目,不受谷歌管控,但为什么厂商门要加上 Power By Android呢?这还是GMS的原因,谷歌规定了用了GMS就要显示Power By Android,那现在华为已经不能安装GMS,即便用Android的话,也没有义务显示Power By Android。那么这一条并不能判断华为是否使用Android。

分析完了鸿蒙是自主研发的观点,我们再来分析一下鸿蒙套壳Android的疑点。
1,鸿蒙手机出现仿Android系统界面的旧版提示
由于我目前手上并没有鸿蒙手机,无法验证这条信息的真假。如果是真的话,那么鸿蒙确实是用了Android的一些东西,但是是套壳,还是部分借鉴,还需要看代码慢慢分析。那先把这一条放一边,后面我再细讲。
2,鸿蒙的app安装包格式是hpk,解压后直接出现了apk,就是Android的安装包格式。
这里我自己作为程序员,打包了一个hap并进行解压


image.png

可以看到hap解压后确实出现了apk,这可以说明鸿蒙在系统sdk中一定使用了Android的代码,否则打包后不会出现apk。
3,鸿蒙sdk里面有Android的sdk
我们打开鸿蒙的sdk


image.png

可以看到有三个文件夹,先打开java文件夹
image.png

这是鸿蒙2.0的sdk和文档,我打开看了,但是太多就不截图了,可以肯定都是华为自己写的代码。
打开license,
image.png

就是一个许可证
继续打开toolchains


image.png

这里我们明显的可以看到lib文件夹中有android.jar,除了android.jar,像apksigner.jar,d8.jar,sdklib-26.0.0.jar,以及install-assistant文件夹 中的aapt2,d8,dexdump,这些文件都是Android的打包工具,而且根据sdk-26.0.0.jar,可以清楚的得知鸿蒙是基于Android 26也就是Android 8.0进行打包,那么我们这里还可以做一个大胆的猜测,鸿蒙内部有一个Android8.0的"虚拟机",这里为什么加个引号,是因为华为很有可能只是使用了Android的部分代码,删除了很多没必要的功能,添加了一些自己的功能,所以严格来说并不是虚拟机。

4,鸿蒙代码仓库里面并没有看到java相关的liteos代码。
鸿蒙OS的代码仓库地址是https://gitee.com/openharmony 鸿蒙系统代码量很大,大部分都是涉及内核的C/C++的代码,和java相关的liteos我确实没有找到。不过对于一个系统来说,内核是最关键的,既然内核的代码都放出来了,java的代码一定会有,或是暂时没有放出来,或是我没有找到。

image.png

通过以上分析,我们可以初步判断,鸿蒙的内核是自助研发的,但是也使用了Android的技术,下面我们看一下鸿蒙手机sdk的代码,进一步分析。


image.png

我们在鸿蒙sdk看个一个名为abilityshell的包,ability是鸿蒙sdk中最重要的一个类,所有的功能开发都要基于ability,shell的字面意思是壳,在计算机中一般指解释器,我们可以理解为调用了其他软件的代码。我们分别打开AbilityShellActivity,AbilityShellProvider,AbilityShellService,HarmonyApplication,IAbilityShell

AbilityShellActivity
image.png

AbilityShellProvider
image.png

AbilityShellService
image.png

HarmonyApplication
image.png

HarmonyApplication
image.png

IAbilityShell
image.png

代码显示AbilityShellActivity,AbilityShellProvider,AbilityShellService,HarmonyApplication分别继承了Android中的Activity,ContentProvider,Service,Application,这四个组件可以说是Android的灵魂组件,在Android sdk中基石的存在,鸿蒙的确实在此四个组件基础上进行了二次开发。然后我又搜索了Android中很常用的View,令我惊讶的是没有,鸿蒙中并没有View的存在,取而代之的是Component,不仅仅是名字的修改,逻辑重写了。这里给简单解释一下什么是View,在使用Android时,你所看到的一切,比如按钮,列表,视频播放器,相册等等都是基于View实现的,现在鸿蒙去除了View,等于对Android的视图层进行了一次大换血。

看到这里,我觉得对鸿蒙是否是自主研发已经有一个基础的认识,我持支持意见。
理由如下:
1,最核心的内核liteOS是自主开发的,且开源可查
2,使用的Android的代码,但只是为了兼容,已对Android代码进行了推倒性的重构
3,鸿蒙os支持的万物互联协议,虽然还不得知是什么协议,但是并没有在其他os上看到过。

最后,小编还想分享一下自己一些别的对鸿蒙的看法
1,为什么要兼容Android?
在小编看来,目前手机系统中,Android是无法撼动的王者,前有三星,微软想和Android一角雌雄,均以失败告终,华为自然明白其中的道理。我认为最开始,华为并没有打算触及手机os,只是看重了手表,智能家居这些Android还没有垄断的战场。这些市场所需要的操作系统重通信协议,对操作系统本身并没有那么敏感,这也是华为的优势,但是随着谷歌的封禁,华为不得不自己做手机操作系统,时间紧,任务重,兼容Android是最有效的方案。
2,其他手机厂商如小米,oppo,vivo会加入鸿蒙么?
目前来看比较难,一来鸿蒙还没有成熟,贸然使用风险太大,二来鸿蒙app目前只能在只能华为应用市场上上架,这无疑断了手机厂商渠道分发的财路,他们肯定不干,三来手机厂商出海还要看谷歌的脸色,这无疑又增加了风险。但是随着时间的推移,我想华为会指定一套多赢的方案来让各厂商加入。

好了,小编说的就这些了,如果喜欢,请关注一下我,大家一起交流。

你可能感兴趣的:(鸿蒙系统是否是Android套壳?代码层面深层剖析)