鸿蒙跟安卓有关系么(鸿蒙真的是安卓)

前言

最近鸿蒙2.0发布后网上各种评论,本来我也不打算再发表什么长篇大论,但是奈何我不希望很多无知的人在狂喷一个负重前行的企业,因此有了这篇文章。本人知识不多,有说错的请指出。——或许你们认为我是海军(亦或海狗),但为人正则不怕诋毁,是否海军各位自行评判。

从方舟编译器说起

鸿蒙跟安卓有关系么(鸿蒙真的是安卓)(1)

首先我觉得有必要先说说什么是编译器。其实编译器这东西说简单点就是CPU的翻译员,把程序员写下的代码根据既定的规则翻译成机器能够识别和运行的指令。目前较为有名的就是GCC编译器(准确的说是一个编译器集合),无论我们是用c语言还是java写的代码,GCC都能够将它翻译成电脑、手机等设备能够识别的指令。

其次我们再来讨论一下谁在开发与维护编译器。既然编译器是一个CPU的翻译员,自然是最懂CPU的人开发与维护的。这帮人会根据CPU的架构以及指令集等条件,去不断的开发与维护编译器。所以可以这么说,每一类型CPU都需要有一个独特的与之对应的编译器,毕竟编译器是最懂CPU的那个它。

然后我们再看看CPU与编译器的协同合作。假如一个CPU有一个加法运算器(做加法用的)和一个乘法运算器(做乘法用的),而程序员写了一段代码“x=1×3”的代码,以及一段“y=1 1 1”的代码。这时候编译器就会将这两段代码翻译成这款CPU指令集中的一个乘法指令和一个加法指令。当运行这段代码时候,乘法指令和加法指令分别调用了乘法运算器和加法运算器,这就实现了x与y求值的计算。

随后我们说说方舟编译器。很多人很奇怪方舟编译器的出现为什么会引起如此大的轰动,其实这意味着华为的实力和野心。为什么这么说?因为一般的厂商很少有谁在购买了别人的CPU或者CPU架构之后想着去做一款编译器,首先编译器的开发极为复杂困难(几经要成为那个最懂CPU的人),而且原厂已经自带编译器,同时就算做出来可能还没原厂的好用,所以几乎是费力不讨好的事情。而华为做了,这就说明华为正在努力(或者已经)成为了那个最懂CPU的人,这就是实力的体现。同时这也代表着,华为正在为摆脱ARM公司的控制为芯片自研积累经验,因为一个能够做编译器的人,很大程度上也就意味着有能力自研架构,毕竟CPU架构与编译器是成双成对的出现。

所以很多人看到ARM中断给华为授权后有人幸灾乐祸有人为其担心,但是我觉得这种担心是多余的,这种幸灾乐祸是无用。从各个获得ARM授权的厂商来看(高通,三星,华为,联发科等),如果哪款产品对架构进行了魔改,那一般就意味着性能的暴涨,比如三星的猫鼬,高通的kryo。他们是ARM CPU吗?是,但是他们是加强版,对ARM有自己的理解,所以性能远高于MTK的公版架构,这其中有对ARM架构的优化也有新功能的添加。比如假设公版架构的乘法运算器采用的是级联加法运算器(把很多加法运算器串起来,这说法欠妥),这在运行“1×3”的指令时候效率很低发热量巨大,厂商就针对这一问题把公版的乘法运算器优化成为乘法运算器,这时候运行“1×3”就会快很多。再比如假设公版根本就没有乘法运算器,那在运行时候编译器就要转换成行“1 1 1”的指令,这时候要调用三次加法运算器进行计算,针对这个问题厂商增加了一个乘法运算器解决问题,但是这样做势必要修改编译器,使得编译器知道这款CPU可以调用乘法指令,编译“1×3”的时候不必调用三次加法,只需要调用一次乘法即可,这样做就已经脱离了魔改的范围,已经偏向了自研的方向。典型的代表就是苹果的CPU,却又有很多ARM没有的功能和指令,再配上IOS那就是绝配。

因此,方舟编译器事实上预示着华为未来必将走自研架构的道路,是否得到ARM的继续授权已经不再是重要的问题,因为走上自研的道路必将与ARM渐行渐远。当然这条路开始必然是困难的,毕竟高通与三星这种体量的公司已经放弃自研的路子,重新用回了公版架构。但是苹果的成功也是极具诱惑力的,只要坚定自研的道路,站稳脚跟,那未来必然收获巨大。

任何一个做编译器的厂家都带着自研CPU的野心,方舟编译器的出现必然预示着华为自研的决心。

系统和UI区别

鸿蒙跟安卓有关系么(鸿蒙真的是安卓)(2)

操作系统可能大家都有个笼统的印象,也就是一个集合各种功能和软件的软件(软件之母还是软件,有点拗口)。而UI在官方解释是“对软件的人机交互、操作逻辑、界面美观的整体设计”,但是我理解UI是为了呈现系统功能。早期系统是没有UI的,都是命令行(这也是为什么很多人对黑客印象是满屏代码的原因),后来有了UI,把功能直观呈现出来(就所谓的交互,逻辑,美化)。软件的运行逻辑以及任务的调度等等这些东西都是系统在管,而UI只需要根据系统的操作表现不同的效果即可。所以系统与UI的区别,在我看来就是:系统——有功能有软件可以没有界面;UI——能表现就行必须有系统支撑。当然现在很多UI都在可以模糊与系统的的界限,比如添加一些新的功能比如天气,物流等等。但是你可以看到天气和物流也是一个个软件,包括UI本身也是一个软件,不信的话各位可以ROOT自己的手机,把UI删除,很可能会显示原生UI,也有可能直接变成shell(命令行模式),但是系统并没有挂掉。所以目前来看所谓的EMUI、MIUI、氢氧系统这些其实只是UI,只是我们习惯称之为系统罢了。

系统工作流程

要理解鸿蒙是不是安卓,我们先来说说一个简单的软硬件系统的架构,下到上是:硬件层、驱动层、系统层、应用层。这些层的作用是什么?用一个蓝牙进行举例:

1.硬件层提供了蓝牙的硬件电路,否则硬件上就不支持蓝牙这个功能了。

2.有了蓝牙芯片后,需要一个能够提供对蓝牙芯片各种操作的功能,比如说开关操作、扫描操作、选择操作、连接操作和收发操作等等,这些操作是直接与硬件沟通的,通过操作蓝牙芯片的寄存器以及电路进行工作,而提供这些操作的东西就是驱动层。

3.驱动层提供了蓝牙各种操作给系统层,经过系统的再次包装后就可以给应用层提供蓝牙操作的功能了。之所以需要系统进行包装那是因为,驱动层提供的操作很大程度上是原子操作(不可以分割的)和硬件操作,过于仔细繁琐,这对于不熟悉蓝牙的程序员来说稍有不慎蓝牙功能将会出错,因为他不知道蓝牙正确的合理的操作流程。同时整个系统也不只是为了蓝牙这个功能服务,还要为wifi、屏幕等其他功能提供服务。因此系统就需要将蓝牙驱动程序进行合理的包装使得应用程序对蓝牙的操作与硬件脱离。系统层根据蓝牙的合理顺序将打开蓝牙、扫描蓝牙、连接蓝牙等操作整合在一起,比如系统把驱动层提供的打开蓝牙和扫描这两个操作包装成系统的蓝牙打开操作,这样在使用时候就能够按照正确的顺序在打开蓝牙的同时执行了扫描的操作;把选择操作和连接操作包装成系统的连接操作,这极大的简化了应用层使用蓝牙的流程。当然除此以外系统为它提供调度能力,使得你在使用蓝牙时候还能使用wifi。

4.终于到说到跟我们一般所说的应用层了,我们一般接触到的各种软件(微信,头条等)其实都属于顶层应用。这些顶层通过调用、组合系统提供的各种接口(API),实现了我们所需要的功能。比如共享单车软件要连接蓝牙,那么软件只需要调用上一步所说的蓝牙打开接口和蓝牙连接接口传入正确的参数就能够连接上单车的蓝牙进行通信,这时候应用层完全可以不再理会底层蓝牙的操作逻辑是先扫描还是先连接了,因为底层已经做好处理了,无需APP担心,只管用就对了。

总结一下APP蓝牙的操作对于整个机器而言是什么的流程:首先用户点击打开蓝牙的按钮,此时APP会调用系统提供的打开蓝牙接口;当调用系统打开蓝牙接口的时候,系统会按正确的顺序先调用驱动提供的打开蓝牙操作,再调用扫描操作;而驱动层在得到系统调用了打开和扫描操作后,会控制蓝牙的寄存器等硬件相关的东西,真正的打开与扫描蓝牙设备。扫描完成后通过相反的路径一层层的往上传输获取到的信息,最终就能在app上显示出扫描到的蓝牙设备供我们选择。

鸿蒙是安卓吗?

鸿蒙跟安卓有关系么(鸿蒙真的是安卓)(3)

铺垫那么久,终于到了重点。很多人认为能够运行apk程序(安卓程序)就是安卓,或者说只有安卓系统能运行apk程序,这种认识是绝对错误的。

为什么呢?从以上所述的系统工作流程来看,是否能运行某些程序理论上跟系统无关,而是跟系统是否提供相关接口(API)有关的。如果一台windows系统提供了安卓应用所需要的接口那windows是可以运行安卓程序的,同样的道理如果一台安卓系统的手机提供了windows应用的接口,那么安卓手机同样能够运行exe文件。再比如,老旧的安卓系统很可能无法正常运行新版本的安卓应用(不兼容),究其原因其实就是老系统缺少新应用所需的接口。而如何提供APP所需要的接口呢?一般有两种方法:

1.系统上直接原生支持安卓接口,这种方式的好处是运行速度较快,缺点也显而易见工作量巨大,需要对系统进行大幅度修改,甚至要从头开始做一个系统,比如安卓5以后的系统。

2.采用中间层技术(或者虚拟机或者叫支持环境),虽然系统层面没有安卓所需要的各种接口,但是可以通过中间层技术虚拟出一个适合安卓运行的环境(拥有安卓接口的环境)。这种好处在于工作量不大,可以使用其他的操作系统,只需要在系统上提供一个安卓运行的环境即可,这种沙盒方式的做法还有一个好处,即使安卓虚拟机崩溃,系统也没有任何影响。安卓5以前的系统就是linux环境中建立安卓虚拟机从而实现的,所以那时候的安卓很卡,因为虚拟机始终不如原生的高效。

无论采用哪种方式,很明显都是可以运行的安卓应用的。采用原生支持的方式的目前有阿里云OS,火狐OS,以及目前谷歌正在开发用于取代安卓的Fuchsia系统,这些都是能够直接支持安卓的,但是他们都不是安卓系统;为何现实中windows可以使用安卓模拟器运行安卓应用,而linux可以通过wine运行windows程序,甚至有些大神在安卓中运行的windows程序?这其实用的就是第二种的中间层(或者叫虚拟机)技术。

所以大家需要清楚的认识到“兼容安卓应用”并不等同于是“安卓系统”,“安卓系统”也不等同于“可以运行安卓应用”(很拗口不是?)。因为道路千千万,你永远都分不清,或者永远无法界定所谓的系统是什么系统。毕竟windows可以运行安卓,而linux也可以运行安卓,鸿蒙也可运行安卓,在这样的情况下,难道windows和linux和鸿蒙都是安卓系统?这显然很多人无法接受。但是大家却很愿意接受兼容安卓应用就是安卓系统的观点,其实这根本的原因很可能是,用windows运行安卓的人不多,很多人也不知道早期的安卓只是linux的虚拟机,在这层层伪装下,面对消费者的就是安卓应用了,所以很多人理所当然就这么认为了。

因此,鸿蒙到底是不是安卓我想大家心里都已经清楚了,而鸿蒙到底采用什么方式支持安卓我也不清楚,但是再重申一遍“兼容安卓”并不等同于“是安卓”。而之所以鸿蒙选择兼容安卓很大的因素是安卓的生态太大,几乎无法撼动,如果不兼容安卓就相当于抛弃整个开发世界另起炉灶。强大如微软WP也失败了,可想而知兼容安卓是为了求生存难以避免的抉择,甚至谷歌都没有魄力在Fuchsia中摒弃安卓。——因为抛弃兼容安卓就意味着抛弃60%的手机市场(另外40%在苹果手中),这一点没有谁能够承受。而鸿蒙与Fuchsia能够做的是,在兼容安卓中不断的迭代引导开发者与用户往新系统上迁移从而逐渐抛弃安卓。

鸿蒙开发环境的争议

在这次发布会上还存在另外的争议点,那就是鸿蒙的开发环境(或者叫IDE)太像其他的环境了(有些说是vscode有些说是android studio)。其实就程序开发而言,IDE像谁甚至是谁一点都不重要,可以说在整个鸿蒙相关的东西里边,最不应该用来作为槽点就是IDE了。因为IDE说简单点只是类似记事本一样的代码编辑工具,只是它集成了一些便利性的功能,比如错误警告、编译按钮等等,这些功能插件能够极大的提升程序员的工作效率。

有些人会很奇怪为什么我会说IDE最不重要,说说代码如何编程软件的。程序员先书写代码,然后使用编译器(一般交叉编译工具链中带有)将代码编译成为应用程序。可以发现在代码开发中完全不需要特定的IDE,甚至只需要使用记事本就可以完成代码的编写,而编译可以使用命令行而不用IDE提供的编译插件,因此对于代码开发而言重要的其实是交叉编译工具而非IDE。用最普遍的IDE软件eclipse来说,写java可以用,写安卓可以用,写c 还可以用,甚至嵌入式依然可以用,难道你要说安卓的开发环境像java?事实上早期的安卓的确是java写的。同时现在有了android studio长得也很像vscode,怎么就没人吐槽?

可以这么说对于程序员而言,IDE是可以随便换的,是一个使用习惯而已,并不会影响软件,甚至有些人可以只用记事本就能完成工作。早期安卓开发从eclipse转变到android studio时候,有相当部分人并不适应,因此他们会继续使用eclipse进行安卓开发。

所以对那些无知的喷子,使用IDE作为攻击对象,我觉得是非常愚蠢的行为。或者说能够关注到IDE的喷子,相当一部分是程序员或者懂得程序开发相关流程的人。他们应该能够明白IDE对于程序开发的作用,但是依然作为嘲点,我觉得他们真的就是为了喷而喷,跟那些说鸿蒙为不是中文而是英文的说法如出一辙蠢。

我说这句话并非说IDE不重要,IDE重要性在于编辑的便利性,能够很大程度提高效率,但是跟系统以及应用没有太大关系,毕竟可以进行替换,甚至可以不用。但是这依然成为了攻击的目标,可见其心当诛。

优化与流畅性的争议

大家可以在网上看到关于流畅性的争论,很有意思的一点就是,同一个系统说卡的有,说丝滑的也有,但是到底是丝滑还是卡顿有主观也有客观,但是流畅性始终离不开优化。但是通过什么手段优化的效果是不一样的。

当我们升级APP时候升级日志除了说增加新功能外或许会说优化了APP增加了流畅度。而这里的优化一般是应用级别的优化,如代码逻辑或者处理方式以及算法的优化等等。比如在多个条件分支判断的时候if else语句可以和switch语句进行互换。如果CPU支持分支预测(当然现在很多手机和PC的CPU都支持),那么采用switch或许会更快一些,而在那些不支持分支预测的CPU上效果则差不多,当然这其中还涉及到CPU的架构以及时间空间复杂度的讨论。这一级别的优化一般是由APP的程序员完成的。

更高一级就是系统级优化,比如优化系统调度方式使得系统能够更加的高效,或者优化一些系统的动态显示等功能,使得原来1秒钟能做一件事现在能做两件事,那这时候速度自然就上来了。这种级别的优化一般是手机厂进行(比如MIUI升级到12等),也有可能是系统厂商进行(比如由原来低效的虚拟机运行环境改为直接在原生支持)。

再高一级就是编译器级别的优化,很多人会觉得编译器有什么好优化?其实就跟我之前说的一样,“1×3”的代码,有些编译器编译成“1 1 1”的命令调用加法运算器,而有些运算器调用乘法运算器直接运行,这有可比性吗?所以达到编译器级别的优化一般都是比较牛的(当然我说华为)。

最高一级就是硬件优化了,比如原来CPU没有乘法运算器,所有的乘法都需要使用加法器进行计算这样的效率太低了,那么只需要在CPu加上乘法器就能够提升效率(当然编译器也需要更新)。

类似苹果这种,将app层面到CPU层面都进行优化的产品而言,无怪乎iPhone能够用很低的硬件实现最流畅的体验。而华为现在恰恰也是打算走这条路,但是这条路并不好走,同时敢于走这条路的公司也必然是野心家。

因此,很多时候很难界定手机的流畅性是否跟硬件与软件相关,或者说都有关。早几年时候蓝绿厂有人喷是智商机(包括我),但是当年我很多朋友都在用,即使硬件比小米的低很多,但是他们很多都表示用着非常流畅,事实上他们换手机依然愿意大价钱买蓝绿厂。而某些厂商即使把行业最顶尖的硬件堆起来,但是效果如何大家有目共睹。所谓的一分钱一分货,有些愿意为硬件买单,有些愿意为软件(系统)买单,无论哪种方式,一款手机是否好用真的不能单单看硬件规格以及跑分。这是一个综合考虑的结果,而且主观性非常大。

个人观点

鸿蒙的发布,我更愿意相信这是披荆斩棘的奋斗,虽然目前还不能够预测华为未来是否会成为屠龙少年,但是就目前而言,很多人都害怕华为的强大。商人以利为目的,不应该将华为与爱国绑定在一起,但是我的确希望华为能够突破美国的封锁强大起来。

同时也不建议大家把华为与小米联系起来,按照我的想法,两家公司无论是目光还是目的都相去甚远,华为的目标更加远大,而小米还停留在蛮荒阶段。格局不同,自然对待产品的态度也不一样。当年辱骂蓝绿厂交智商税,现在回过头来,人家的确有过人之处。现在同样的骂声落到华为身上也不足为奇,毕竟道不同不相为谋,一个向更深处进发,一个却还没有认识到问题所在。

说来也奇怪,我给家里其他人买的苹果后来买华为,而我和我妈却一直在用小米。给家人买时候我更多的考虑是稳定性流畅性,而所谓的性价比反而是次要,所以我更愿意为软件买单。事实上也证明了华为的确值得信赖用两三年依然流畅,在我的观点中,流畅性一直都是华为的长处。而到了我,想想我毕业放弃苹果到现在我却一直在用小米,一个原因就是,作为程序员或许都存在一些唯参数论的偏执,每一次买都想着起码硬件强大,以后优化才有可能更好,颇有点A卡战未来的感觉,但是事实上证明每一次优化升级都比原来要不好用。而给我妈买小米纯粹就是因为便宜了,因为她总能在保修期内不是摔坏就是掉水里,手机换的比谁都勤快,不便宜实在撑不住。

最后我不清楚你们会怎么看待我,也许很多人说我是米黑,无所谓,小米做的的确没有华为好,这是不争的事实。希望华为能够突围成功,无需担心华为成为恶龙,因为每一条恶龙都会有一个屠龙少年对付他。也希望小米能够真正的做到性价比,不要让我天天吐槽。性价比不是说硬件强大够便宜,如果不好用很多人会像我一样用脚投票,颇有哀其不幸怒其不争的感觉,每次买小米每次系统更新都希望新系统有所改善,但是每次却又满满失望,卡顿不断BUG不断。

在此,再次说明,本人只是一个小小程序员,或许对于以上很多理解不正确或者透彻,希望大家可以指出。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页