当前位置:   article > 正文

鸿蒙OS到底是不是Android套皮?(不多说,看源码!)_鸿蒙到底是不是套皮

鸿蒙到底是不是套皮

人生就像一场旅行,不必在乎目的地。在乎的,是沿途的风景以及看风景的心情。

#正文
某人曾说「没有调查就没有发言权」

最近鸿蒙系统关注度好高,支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词,吵的不可开交。作为十八流码农,本着了解行业动态、体验HarmonyOS开发流程、找出HarmonyOS的特性与不足、看看是否有新的机会,也为了看看吵得不可开交的诸位谁说得对,特地在这个鸿蒙系统马上正式开放升级的时间点,开发体验了一番。

HarmonyOS到底怎么实现的——扒皮HarmonyOS

了解一个软件怎么实现的,最好还是查看源代码。但是承诺2020年开源的OpenHarmony项目到现在只开源到嵌入式设备,这条路自然走不通。只好退而求其次,看看已经开放的SDK、IDE、开发示例、编译产物,管中窥豹一下HarmonyOS到底怎么实现的。

1、安装IDE-配置环境-编译运行

这部分很简单,下载DevEco Studio,然后照着文档一步步操作就好了。模板选择了唯二的JS模板:Phone > Refresh Feature Ability。

然后一直下一步,申请下虚拟机,编译运行就成功了。

1)分析编译产物

运行成功后,先大致分析一下编译产物,找一下程序入口,看看代码到底怎么运行的。点开build文件夹,打开一看,喔噢!!!这目录结构和Android的太相似了,于是我熟练的点开outputs文件夹找apk文件。

hap???怎么和预想的不一样?不过侵淫Linux多年的经验告诉我,后缀都是浮云,于是果断把.hap改成.apk,然后用Android Studio打开,果然:

对比官方给出的App逻辑视图:

我们发现:
1、没有找到描述每个HAP属性的pack.info估计是因为工程只定义了一个Entry,没有定义Feature,于是只生成了Entry的安装包,但是按照官方文档给的说法

Entry可以独立安装运行,在只定义一个Entry的情况下,编译出这种包也说得通
2、App逻辑视图中的config.json正常在。
3、App逻辑视图中的abilities竟然编译成Android包的.dex执行文件,而用js定义的界面、视图、逻辑竟然归入assets中,这里面就有点猫腻了。
4、编译的可执行文件中竟然包含一个.apk文件,这个不速之客可在App逻辑视图中完全没体现,值得怀疑于是接下来,我们就先重点分析这个entry_signed_entry.apk,分析一下这个不速之客在App安装包里有什么作用。

2、分析entry_signed_entry.apk

继续用Android Studio打开这个文件

是一个标准的Android App!!于是熟练的点开Android应用描述文件:AndroidManifest.xml通过描述文件可以发现,整个apk只做了两件事:

  1. 定义Application为ShellApplication
  2. 定义MainActivity为MainAbilityShellActivity

emmmmm……这名字起得真直白

按照Android开发的惯例,从build文件夹中找这两个类的相关文件。

果然不费吹灰之力,接着分析源代码:先分析一下Application的定义文件ShellMyApplication:

ShellMyApplication继承自HarmonyOS SDK的AceHarmonyApplication,不过啥事都没干,接着看AceHarmonyApplication:

emmmmm……俄罗斯套娃吗?照样啥事也没干,那就接着找它的父类:
HarmonyApplication:

看这么大段的引用和变量定义,应该是正主没错了,不过HarmonyOS的HarmonyApplication竟然继承自Android的Application,这件事就得说道说道了HarmonyApplication整个文件很长,就不贴代码了,这个类主要做了如下几个工作:

1、初始化HarmonyOS应用…
2、输出HarmonyOS应用开始初始化的日志…
3、加载HarmonyOS的Ability到Android的Application的HashMap中…

4、接收系统产生的各种事件然后转发给鸿蒙应用…

5、初始化一个EventRunner,结合ohos包的代码来看,估计就是官方文档提到的「分布式软总线」,是HarmonyOS所谓的「分布式设计」的相关实现,这部分后面分析

码农果然都是老实人,起名都这么实诚又恰如其分:

ShellApplication的作用就是Android的Application提供一个Shell(壳),让HarmonyOS的Application寄生其中
接着来看看MainAbilityShellActivity,依旧是套娃设计,直接看具体的实现:

MainAbilityShellActivity依旧继承自Android的Activity,整个文件依旧很长,但是逻辑很简单,就一个作用&#

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/260256
推荐阅读
相关标签
  

闽ICP备14008679号