来源:21ic电子网,头条@我的小号等,本文作者观点不代表本网观点
某人曾说「没有调查就没有发言权」 最近鸿蒙系统关注度好高,支持与反对、看好和看衰、「自主的全场景分布式系统」和「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只做了两件事:
定义Application为ShellApplication 定义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,整个文件依旧很长,但是逻辑很简单,就一个作用: 将Android的MainActivity的生命周期、Intent、触摸事件、按键时间、权限申请结果……通过AbilityShellActivityDelegate(代理)转发给HarmonyOS的Ability 果然不负Shell之名。本来想打开Androi……HarmonyOS的应用布局调试界面,但是设置里找不到了,233333…… 不过根据我的第一个鸿蒙app,以及所见内容,得知 这篇文章2020年末写的,到如今只过去五个月,估计具体实现没有改变。 3、 分布式软总线
HarmonyOS最大的卖点是其宣称的「面向万物互联时代的全场景分布式操作系统」,也是其最大的特性。 从官方文档来看,不管是开发层面所谓的「分布式设备虚拟化」、「分布式数据管理」、「分布式任务调度」,还是目前官方演示的「无缝流转」、「多屏协同」都是以「分布式软总线」为通讯基座,因此我们重点来找找它是怎么实现的。 具体到开发文档中,没有发现关于「分布式软总线」的API,只找到三个与其「分布式技术」所描述的特性相似的三个功能: 分别是:
ohos.rpc.*
特修斯之船(The Ship of Theseus)亦称为忒修斯悖论,是一种有关身份更替的悖论。假定某物体的构成要素被置换后,但它依旧是原来的物体吗?说是一艘可以在海上航行几百年的船,归功于不间断的维修和替换部件。只要一块木板腐烂了,它就会被替换掉,以此类推,直到所有的功能部件都不是最开始的那些了。问题是,最终产生的这艘船是否还是原来的那艘特修斯之船,还是一艘完全不同的船?如果不是原来的船,那么在什么时候它不再是原来的船了?
JS Bundle由JS Framework解析后将数据交给了Android,由Android的负责将其渲染在SurfaceView上
华为已捐献 HarmonyOS 全部基础能力
6 月 4 日,华为内部发布了一个《关于规范 HarmonyOS 沟通口径的通知》,对鸿蒙操作系统统一定调。根据通知,HarmonyOS 操作系统是一个物联网操作系统,而手机只是物联网智能终端之一。华为已于 2020 年、2021 年分两次把 HarmonyOS 操作系统的基础能力全部捐献给开放原子开源基金会。据悉,该基金会由工信部主管,整合其他参与者的贡献,形成 OpenHarmony 开源项目。(证券时报)
- EOF -
回复关键字“简明python ”,立即获取入门必备书籍《简明python教程》电子版
回复关键字“爬虫”,立即获取爬虫学习资料
推荐阅读: