探索鸿蒙系统与安卓平台的亲密关系

发表时间: 2024-03-23 18:01

最近在网上浏览信息的时候,看到了不少关于微信鸿蒙版的讨论,有的人认为微信一定会推出鸿蒙版,而有的人则认为“骄傲的企鹅”一点会像当年对待苹果一样对待今日的鸿蒙系统……众说纷纭,而其中也不少言论认为鸿蒙就是套壳的安卓,和其他手机厂商所使用的定制化系统没有什么区别,毕竟现在华为手机能够运行安卓应用是铁一般的事实。

对于,认为鸿蒙系统和安卓系统没有什么区别的人,我只想说,外行人看热闹,内行人看门道。作为程序员,我可以表示往后的鸿蒙系统,与安卓系统之间,绝对不是血浓于水的关系,而是无亲无故的关系,从下面开发鸿蒙应用所用的最新开发语言 ArkTS 就可以证明我的说法:

开发鸿蒙应用的 DevEco Studio 界面

从开发鸿蒙应用时所用的依赖库,就可以看到已经完全摆脱了安卓,如果需要用到安卓的相关功能,就势必将该功能所在的安卓依赖库导入项目中,这一点可以拿开发安卓应用时的导入依赖库进行对比:

开发安卓应用的 Android Studio 界面

也许有人认为,这只是应用层面的差异,不能代表系统层面的差异。对持有这种看法的人,我可以告诉他们,应用层面的差异还真可以代表系统层面的差异,因为应用提供的功能,归根到底是系统提供的功能;系统不支持的功能,任应用开发者本事再大,也无法在该系统上实现。例如页面跳转这个功能,本身就是利用系统的窗口管理功能中的路由功能实现的,而一旦系统本身就没有路由的概念,那么应用界面也必然只能停留在启动页面而无法跳转到其他页面。

目前,最新版的 SDK 中,华为侧主推用ArkTS开发鸿蒙应用,而谷歌那边则是力推用 Jetpack Compose,可以看到双方各有选择。ArkTS 是由 Typescript 也即 JavaScript 演化而来,而Jetpack Compose本质上还是 Kotlin,从编程语言所属上可以看出鸿蒙和安卓是分道扬镳的。并且,虽然 ArkTS 和 Jetpack Compose 在具体编程中,都采用了链式调用和函数式声明,这两种编程范式,但表现形式也是互为不同。

具体以设计用户界面来说,ArkTS设置界面元素组件的样式时,并不需要借助其他对象,只需调用组件本身提供的相关方法即可;而 Jetpack Compose 则是需要借助一个 Modifier 对象,并且还把这些样式代码以方法参数的形式进行编写,而不是以对象方法的形式进行编写。这些代码细节,也在说明鸿蒙和安卓真的不一样。

而在真机调试方面,也体现出了鸿蒙和安卓的不一样,当我用电脑连接安卓手机,并打开安卓手机的调试功能时,DevEco Studio 并不支持将 ArkTS 开发的鸿蒙应用部署到安卓手机上:

使用安卓手机调试鸿蒙应用报错

想要让自己的鸿蒙应用能够在安卓手机上运行,就必须把应用项目重构成 ArkUI-X 项目,而这个 ArkUI-X 正如官方介绍中表达的一样,是一个用于扩展ArkUI开发框架到多个OS平台的东西,简单而言就是把鸿蒙应用进行一次伐骨洗髓,变成能够运行在其他系统平台上的东西,而这也正好说明了鸿蒙应用和安卓应用并不等同,也就是鸿蒙系统和安卓系统并不等同。

至于在一些平台上,发表动态或者其他内容时,平台上会把装载了鸿蒙系统的华为手机标识成 Android,而不是标识成 HMOS(缩写自 Harmony OS),不正是在说明鸿蒙就是安卓吗?那么,我可以告诉屏幕前的你,这还真不能说明鸿蒙就是安卓,因为只要开发者偷懒,将所有的移动设备都标识为 Android,那也不是不可能的事情,因为手机标识在代码层面来说,就是一个字段值而已,不偷懒的开发者可能会像 QQ 一样,老老实实地根据识别到的手机信息去显示手机品牌型号,例如 iPhone 13 pro、HUAWEI Mater 40 Pro 等等。

最后,对于为什么正式版的鸿蒙4,以及之前的鸿蒙1 到鸿蒙3,都支持运行安卓应用?答案是因为之前的鸿蒙应用生态并未形成,不能操之过急,对于华为自身来说,关闭鸿蒙系统对安卓应用的兼容,不过是代码上的一句调用,甚至只是布尔变量的 true 或 false,是再简单不过的事情,但对于应用开发者以及广大消费者却不是一件简单的事情,就比如你的电脑,从运行 Windows 系统的电脑,换成了运行 MacOS 系统的电脑,是不是必然会不习惯,首先是桌面布局改变了,其次是应用安装卸载的方式也变了,就连窗口关闭按钮也从右上角变成了左上角,最为伤脑筋的恐怕是为那些只用 Windows 版本的惯用应用寻找替代品。

消费者的稍微不适应,对于系统生态来说都可能是严重的打击,而开发者的不适应,对于系统生态来说简直是灾难性的致命打击,因为没有一个个开发者去开发具体的应用,那么系统再强大也是无用武之地,而就像编程语言一样,一个操作系统,从被设计和实现出来,到众多开发者能够得心应手地开发应用,需要经历相当长的一段时间,总不能要让设计和实现操作系统的那班程序员,去替广大应用厂商编写能够运行在系统上的应用吧?

由于消费者需要一段时间,去适用操作系统改变所带来的操作差异,也由于开发者需要一段时间,去了解和熟悉鸿蒙应用开发架构和API,所以,早期的鸿蒙系统必然要对安卓应用进行兼容,这样才能留出时间去让消费者适应鸿蒙系统、让开发者去学习怎么开发鸿蒙应用,而当年 Windows 和 MacOS 之所以没有出现兼容的操作,那是因为这两个操作系统的问世时间相差一年,并且当年微软公司也给苹果电脑开发过不少应用;由于问世时间相差无几,彼此的应用生态也都是方兴未艾,就没必要采用兼容的操作。

而今的安卓和鸿蒙与当年的 MacOS 和 Windows 所面临的情况是完全不同的,鸿蒙问世也就在几年前的 2019 年,而安卓系统却早在 2008 年就开始崭露头角,十年多的时间差,带来的时应用生态的悬殊分明,华为在安卓和 iOS 主宰手机操作系统市场多年的情况下,面对它们那根深蒂固的影响力,还能毅然决然地推出鸿蒙系统,可谓真的是像夸父一样在干开天辟地的事情。

现在,国家层面已经意识到操作系统的重要性,已经在扶持华为公司以及鸿蒙系统,而华为自己为了应用生态的早日完善,也采取了早早开源鸿蒙系统的做法,而去年华为麒麟芯片也成功复产了,这一切都在表明国内有不少力量在支持华为和鸿蒙系统的发展。这种大趋势,作为微信开发方的腾讯公司,我相信是一定能看到看清楚的,也势必知道自己的所处,是一定会推出鸿蒙版的微信,只不过受微信那复杂的架构影响,还需要一段时时间去优化和调整,总不能让国民级应用再次以灰头土脸的形式面对消费者吧?

总而言之,鸿蒙系统和安卓系统之间并无半点的血缘关系