草庐IT

鸿蒙到底是不是安卓?

一口Linux 2023-04-04 原文

原文:https://www.toutiao.com/i6970301348873044516/

这几天我的4台手机都升级到了鸿蒙。Mate X2、Mate 40 Pro、Mate 40 Pro+、P40 Pro。使用起来,其实我觉得和之前没什么明显变化。偶尔看到微博上有人说流畅了,反正我没感觉。流畅了吗?那之前是卡了吗?

 

这几天也自然不免俗在微博上炫耀一下我用了鸿蒙。然后奇怪的事儿发生了。在我的评论区,总有两种声音说鸿蒙就是安卓或者鸿蒙就不是安卓。

 

然后我也就奇怪了。幸好,摄影笔记的两个合伙人都是开发大牛,我不懂,我可以问专业的。于是昨天傍晚到现在,村支书和班长一直在给我解释。我脑袋里塞了好多东西。最终我整理了一下思路,加上村支书给我做的一张图,我来尽量简单但未必非常严谨地让大家明白,

鸿蒙到底是不是安卓?

 

计算机语言是0和1,人类是很难看懂的。所以我们需要人类能够和计算机沟通的语言。于是有了汇编语言和Unix操作系统,后来有了C语言就是C语言和Unix操作系统。可以说目前一切操作系统源于Unix,一切语言源于C语言。

 

但是为什么我们不直接用这个呢?因为不好用啊。

 

所以Unix这个操作系统主要分化出了三个操作系统。

 

第一个就是微软的,从DOS到Windows,是借鉴了Unix的“树”的思想。一脉相承下来。从不图形化的MS DOS到图像化的Windows。

 

第二个就是苹果,虽然几经起落变革,但是基本上都可以看做是Unix的变种。在Unix的系统上创造了很多。

 

第三个就是今天的主角——Linux。这个是一个叫Linus的小伙子觉得Unix不好用从而写出来的。而且一开始就是完全开放。于是经过成千上万工程师大家一起添砖加瓦,终于变成了一个强大的操作系统。

 

这三者有什么区别呢?简单说,如果把这三者看成国家的话。微软就是一个中央集权的——“树”的思想,文件就像一草一木一人一屋,都要在国家登记造册。所以总是动不动就要整个国家重启。

 

苹果和Linux则像邦联制国家。比如春秋大家都认为自己是中国文化,都供奉共主周天子,但是一个诸侯国人家自己管自己。所以就有一种即插即用的感觉。用什么程序,拖进来用就行了。

 

自然是后两者更加好使和先进,所以主流服务器什么的,大家都喜欢用Linux作为操作系统。

 

接下来就讲讲Linux这一支。因为是完全开源的,所以不同的人根据自己的需要就开始了魔改。于是就有了红帽、红旗、乌班图三个较为常见的Linux系统。

 

咱们可以把这三个系统看成是Linux的儿子,三个人分别着重继承了性格、体能、样貌,或者有眼睛像的,有鼻子像的,有嘴巴像的。都是亲儿子。

 

而安卓呢?因为是更加强调移动与生态,所以魔改比较大,看起来就不像Linux了,就好像Linux找个了外国媳妇,生了个混血儿。真的是不像,但是还是亲儿子。

 


 

所以你看,原来Windows也搞过移动版,算上安卓和iOS,基本上一开始从系统本源Unix分支开始就在不同道路上,就是不同的操作系统。

 

那么鸿蒙也是基于Linux是不是就不可能和安卓独立,也成为独立的操作系统呢?

 

还真不是。

 

大家还记得有个叫塞班的操作系统吗?这个也是基于Linux的手机操作系统。但是塞班可以说与安卓是互为独立的两个操作系统。

 

所以如果鸿蒙也成为一个全新独立的操作系统,就算是基于Linux的也是没问题的。

 

那么问题来了,现在鸿蒙算是全新独立了么?

 

安卓的主要构成我们可以分为两个部分。一个就是AOSP,就是安卓的核心。另一个就是GMS就是谷歌服务。

 

咱们先说说GMS谷歌服务吧,就是之前安卓系统禁止华为用的那套东西。其实往简单了说,GMS就是基于安卓系统的,嵌入了谷歌自己的一套体系。比如你可以用谷歌地图啊,可以用谷歌应用市场啊,比如一个账号就可以登录谷歌的各种网站应用啊——比如油管,等。

 

那么大家在国内用谷歌地图么?我用的是高德。大家用谷歌市场么?更常用的是华为市场或者vivo市场——因为我自己用这俩牌子的手机。至于账号,谷歌的那些网站不用梯子也上不了。国内的网站基本都是微信或者支付宝一键登录,或者手机号注册。

 

所以对于绝大多数国人来说,GMS咱们没怎么用过。华为的则是用HMS替代,GMS的G表示谷歌,HMS的H表示华为。

 

其实各个国产手机厂商在国内推出的手机,基本都是自己一套服务体系。GMS不用也就不用了。

 

关键是AOSP——安卓核心。这个是安卓系统的根本。

 

我们看鸿蒙,现在鸿蒙的组成可以看成依然存在的AOSP、HSM、万物互联分布式、全场景这4个部分。

 

HSM我刚才说过了,这个没什么,其实各国产厂商基本都有。鸿蒙目前极力说的万物互联分布式和全场景是什么意思呢?

 

万物互联分布式可以这么理解。原来啊,你不同种类的设备,比如手机、平板、手表、电脑……乃至冰箱、电饭煲,每个都是不同的安卓系统。就好像一种设备一个国家,互相沟通谁都听不懂。如果大家都用鸿蒙了。好了,机器猫拿出了翻译魔芋冻!大家互相都能听懂了。沟通就畅快多了。

 

而全场景呢?则是大家都基于鸿蒙系统,一个软件的开发可以更容易适应各种不同种类的设备。降低了开发难度和开发周期。

 

这三个就是目前鸿蒙与安卓不同的。而万物互联分布式和全场景则是鸿蒙比安卓更加先进的。

 


 

但是,我们聚焦在手机操作系统上。安卓的根本AOSP是目前鸿蒙依然没有摆脱的。这个关键点才是很多质疑鸿蒙是不是还是安卓的原因。

 

我们看到目前鸿蒙四大组成,AOSP只占了1/4,但是实际上AOSP可以占到真正开发量却是巨大的。如果鸿蒙不摆脱AOSP,从最严格的考量来说,在手机侧就依然不能称之为这是一个全新的操作系统。

 

为什么鸿蒙手机系统不摆脱AOSP呢?

 

其实我觉得可能是两个方面的原因。第一个方面是技术方面的。要完全摆脱AOSP,还需要不断有人来添砖加瓦,这不是一朝一夕就可以搞定的,一切都要华为自己搞定。也许2年,也许5年,也许更长。需要华为有更开放的态度,以及更多手机大厂以及技术大牛来共同打造。就像打造安卓一样。

 

第二就是市场方面的考虑。如果完全不要AOSP,可能所有的安卓App已经无法在已经升级了鸿蒙的手机上使用了。就算各个App提供者立刻马上开始做鸿蒙App,时间也是问题。既然使用AOSP可以让大家没什么不适就升级了鸿蒙,何乐而不为呢?

 

那么华为使用AOSP人家谷歌让么?当然了,AOSP是完全开源的,不仅仅是谷歌一家的。华为这么多年也没少为AOSP做贡献,甚至可以说很多。既然是公共领土,大家都能用,随便用用自然是没问题。不但法理上没问题,道德上也没问题。

 

其中AOSP中负责运行安卓程序的环境——ART,也被华为替换成了方舟编译器。让手机能直接听懂“高级语言”,能够覆盖更多语言,多种芯片,覆盖更广的场景。也是鸿蒙的要求。

 

可以说AOSP虽然是安卓的,但是里面有一些是华为贡献的,也掏空了一部分。步步蚕食。那么具体什么时候能彻底替换呢?

 

这就是需要时间的。不仅仅是研发时间,也是整个生态建立的时间。

 


 

目前对于很多非手机产品,如果之前就不需要AOSP的,现在可以完全使用鸿蒙,最底层架构可以完全是鸿蒙,或者华为的LiteOS。这可以说就是完完全全全新独立的系统。

 

这些可以是1+8+N中的8或者N。

 

但是作为这些8和N的中心——1,手机系统,依然需要摆脱AOSP才能称之为全新独立的系统。

 

能不能成,真的只有时间给我们答案。

 

各个国产手机厂商大抵都有自己的OS,但是都是基于安卓魔改的。您可以看成是一个人去整容。整得更加好看。整得深度一点可能还得换点器官。

 

但是再怎么整,你还是这个人。再怎么魔改,你还是安卓。

 

而鸿蒙,不但有整容,不但有器官移植,而且还加了一些新东西,比如给这个人加了翅膀。但最重要的,鸿蒙现在正在改基因——逐步替换掉AOSP。

 

一个人如果基因完全改变了,可能就是完全不同的物种了。一个操作系统如果摆脱了之前的基因,那么这个时候就是一个全新的“大”操作系统了。

 


 

虽然我认为目前鸿蒙还没有做到完全全新的操作系统,与安卓依然有千丝万缕的联系。但是起码在建立新秩序的路上了。

 

如果我们把塞班等等基于Linux开发的操作系统看成是第一代移动操作系统。那么安卓可以看做二代的。

 

而鸿蒙,如果未来真的成功了,则是领先于安卓的第三代。

 

所以一旦鸿蒙成功了,它并非是一个和安卓平起平坐的兄弟(认为安卓是鸿蒙爸爸的更是没理解这件事儿的)。鸿蒙是一个全新的物种。如果安卓是一个人的话,鸿蒙可以看成是一个X战警了。甚至我们就应该将鸿蒙2.0看成X战警的幼崽。

 

国外的厂家们也不会放弃三代操作系统之争,去创造自己的X战警。

 

华为鸿蒙已经远远走在了其它品牌的前面。所以非要说华为鸿蒙就是套壳,真的是理解太浅。说鸿蒙完全不需要安卓,也是太热血无脑。

 

鸿蒙就是要不伤筋动骨,要润物细无声地建立起凌驾于安卓的第三代系统。

 

我希望鸿蒙能够成功,因为那毕竟是咱们自己的。就像中国忍辱这么多年,有了自己的5G技术。希望未来的鸿蒙,也成为世界领先的独立操作系统。


P.S. 我自己用了好多天的鸿蒙了。因为没有多设备协同,而且Mate X2本来就很流畅。所以现在没觉得有什么特别的进步。不过绝对没有一点点哪怕一丝一毫的退步。这就足够让我们换鸿蒙了啊。这是只多不少的升级啊。

 

感谢从昨天傍晚就一直在帮我捋这个逻辑的村支书和班长。对于我来说,我对操作系统一无所知,他们先给我讲明白——虽然我没有完全明白。然后我尽量给大家讲明白。

有关鸿蒙到底是不是安卓?的更多相关文章

  1. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  2. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  3. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  4. ruby-on-rails - 只有当不是 nil 时才执行映射? - 2

    如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e

  5. ruby-on-rails - Rails 格式验证——字母数字,但不是纯数字 - 2

    什么是测试格式验证的最佳方法让我们说一个用户名,使用字母数字的正则表达式,但不是纯数字?我一直在我的模型中使用以下验证validates:username,:format=>{:with=>/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i}数字用户名(例如“342”)通过了验证,这是我不想要的。 最佳答案 您想“向前看”一封信:/\A(?=.*[a-z])[a-z\d]+\Z/i 关于ruby-on-rails-Rails格式验证——字母数字,但不是纯数字,我们在Sta

  6. ruby - Ruby 中的 `&:capitalize` 到底是什么? - 2

    我刚读了这个答案Convertingupper-casestringintotitle-caseusingRuby.有如下一行代码"abc".split(/(\W)/).map(&:capitalize).join&:capitalize到底是什么?在我自己将它放入irb之前,我会告诉你,它不是有效的ruby​​语法。它必须是某种Proc对象,因为Array#map通常需要一个block。但事实并非如此。如果我单独将它放入irb,我会得到syntaxerror,unexpectedtAMPER。 最佳答案 foo(&a_proc_o

  7. ruby - 强制浏览器下载文件而不是打开文件 - 2

    我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.

  8. ruby - 更改 $LOAD_PATH 时,为什么使用 unshift 而不是 push? - 2

    我发现ruby加载路径是一个数组,很多项目都是这样使用的:$:.unshift(File.expand_path("../../lib",__FILE__))可以将本地文件添加到ruby路径数组的前面,方便我们require或者load。所以,我希望知道为什么我们不使用push将文件添加到数组的末尾? 最佳答案 假设您有一个“date.rb”文件(为什么不呢)并且您想要加载这个文件,而不是标准库日期。如果您使用追加,当您调用require'date'时您的文件将永远不会被加载,因为它位于数组的末尾并且标准日期会在之前找到。因此,如果

  9. ruby - 如何排序不是简单的哈希(哈希的哈希) - 2

    我有一个这样的哈希{55=>{:value=>61,:rating=>-147},89=>{:value=>72,:rating=>-175},78=>{:value=>64,:rating=>-155},84=>{:value=>90,:rating=>-220},95=>{:value=>39,:rating=>-92},46=>{:value=>97,:rating=>-237},52=>{:value=>73,:rating=>-177},64=>{:value=>69,:rating=>-167},86=>{:value=>68,:rating=>-165},53=>{:va

  10. ruby - Unicorn 使用 `reload` 而不是 `restart`? - 2

    我在这里对我的部署策略有点困惑,在什么情况下部署时我想向unicorn发送reload信号?例如在我的例子中它会是这样的:sudokill-sUSR2`cat/home/deploy/apps/my_app/current/tmp/pids/unicorn.pid`我一直在通过杀死那个pid来部署我的应用程序,然后通过类似的东西再次启动unicorn:bundleexecunicorn-cconfig/unicorn/production.rb-Eproduction-D我只是想知道为什么要使用重新加载?我可以通过这样做获得部署的任何性能吗? 最佳答案

随机推荐