鸿蒙OS到底是不是Android套皮?(终于讲明白了)
程序员的成长之路
共 13114字,需浏览 27分钟
·
2021-06-24 03:32
阅读本文大概需要 20 分钟。
来自: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.*
04 「分布式软总线」具体设计
5、其他
1)华为到底在HarmonyOS上做了哪些工作
随时换掉AOSP,这里的「随时」,估计在近五年内不会实现,在此之前,去掉Android虚拟机,HarmonyOS能不能正常运行,我是持怀疑的态度的 「全场景分布式操作系统」,根据「分布式软总线」相关代码,这里的「全场景」,估计是同一个局域网内的「全场景」、同一个局域网内的万物互联
由于Ability、分布式软总线等技术屏蔽了操作系统差异,一点点挖空、取代AOSP是完全有可能实现的(虽然我认为这个时间会持续5-10年,到时候Android、HarmonyOS存不存在都不能确定)
02 HarmonyOS到底是不是Android套皮
特修斯之船(The Ship of Theseus)亦称为忒修斯悖论,是一种有关身份更替的悖论。假定某物体的构成要素被置换后,但它依旧是原来的物体吗?说是一艘可以在海上航行几百年的船,归功于不间断的维修和替换部件。只要一块木板腐烂了,它就会被替换掉,以此类推,直到所有的功能部件都不是最开始的那些了。问题是,最终产生的这艘船是否还是原来的那艘特修斯之船,还是一艘完全不同的船?如果不是原来的船,那么在什么时候它不再是原来的船了?
03 HarmonyOS能实现华为的目标吗?
6、系统优势
在手机设备上,只能使用Java、JavaScript写界面(相关文档 :Java UI框架、JS UI框架 两部分) 在嵌入式设备上,只能使用C、JavaScript写界面(相关文档 :JS应用开发、系统基础子系统集>图形及UI子系统 两部分) 只有JavaScript写的界面可以跨设备使用
除JS引擎外,其他应该都是华为自己写的 JS应用框架只负责解析JS Bundle(我们用JS写的界面编译后的产物),渲染交给了有C写的原生框架 因此C原生框架不可能跨设备,只能在LiteOS中使用 手机端能不能使用这个C原生UI框架未知,但是开发文档上没有提及,应该是还没有开放或实现(是哪一个不太清楚,但是嵌入式设备与手机UI框架的实现难度不是一个数量级,LiteOS上的C语言UI框架应该满足不了手机上的复杂且苛刻的要求,所有不可能直接使用)
JS Bundle由JS Framework解析后将数据交给了Android,由Android的负责将其渲染在SurfaceView上
User Native Ability在LiteOS中指的就是C语言实现的Ability;在HarmonyOS中就是Java实现的Ability AbilityKit在LiteOS中应该是用C语言自己实现的,但在HarmonyOS中,是基于Android的Activity实现的 图中的蓝色部分在LiteOS中很明确,但在HarmonyOS中怎么实现目前没有相关代码,不得而知(个人猜测,根据上面代码分析,有部分在ShellApplication(应用内)实现,有部分为系统服务,也有部分在内核中实现)
Linux Kernel(在内核层中) AOSP(大致对应图中的UI框架+用户程序框架+Ability框架)
在微信小程序中做物联网应用,可以支持更多的平台(HarmonyOS vs Android+IOS) 在微信小程序中做物联网应用,开发成本更低(小程序 vs App) 在微信小程序中做物联网应用,推广成本更低(微信小程序生态 vs 华为App生态) 在微信小程序中做物联网应用,获客成本更低(即开即用 vs 下载、安装App) ……
01 商业运作
足够多的用户 可以平衡厂家、用户、开发者利益的政策
02 生态建设
华为终端能否活到那个时候。这方面要看华为芯片问题能否解决、HMS在缺少关键应用的时候是否有人依旧选择华为 华为如何说服中国互联网厂商抛弃GMS拥抱HMS。因为两个生态都支持的话HMS对GMS依旧没有话语权与竞争力
https://developer.huawei.com/consumer/cn/ https://dev.mi.com/console/ https://open.oppomobile.com/ https://dev.vivo.com.cn/home?cid=w-2-baidu-sem-kfpt-qt
对于绝大多数物联网设备,没有这么奢侈的硬件去运行HarmonyOS的物联网系统,也并没有这么多交互需要界面去实现,那么采用LiteOS,就意味着对其没有什么帮助还徒增成本(其他物联网系统有更通用的解决方案,成本也更低) HarmonyOS更加私有化的封装也意味着与其他的物联网系统打通更加的困难,华为估计没有能力做的所有物联网设备都采用鸿蒙系统,那么HarmonyOS与为鸿蒙系统物联网设备的交互也更加困难 个人认为物联网设备的互联互通与相互控制并不是解决目前物联网产业困境的关键。目前,物联网产品的解决方案大多都是讲控制权交给手机App或者语音,但这些并没有多少方便我们的生活,有点食之无味、弃之可惜的味道
推荐阅读:
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper、数据结构、限流熔断降级......等技术栈!
⬇戳阅读原文领取! 朕已阅
评论