Android刚学了点皮毛,突然中美之间发生贸易战争,突然Google被一纸禁令框住,然后我们就等待着鸿蒙系统的崛起。可能后面就要开始写《从.Net到鸿蒙》系列文章了。

安卓是基于Linux开发出来的,而Linux是“宏内核”。有些新闻介绍说,华为的鸿蒙系统是基于“微内核”的,也就是说并非基于Linux,和安卓有本质区别。这说的是什么意思?

宏内核(Monolithic kernel)是说,操作系统的核心代码都是以特权模式运行在一块核心内存空间(kernel space)中的。这些核心代码虽然分模块各做各的事,但算是一个团伙,互相紧密关联,一荣俱荣,代码规模比较大,很难修改成其它类型的操作系统。典型的就是Linux代码,模块不少,核心代码已经很长了,也不太好拆开来,而是精心安排让各模块共同运作好。要开发,就得按照它的套路来,不好自己灵活安排。有时一个设备,要不了太多功能,但是整个宏内核都得放上来,想剪裁就很麻烦。

而微内核(Micro kernel),只提供操作系统最基本的少数核心功能,是精简版本。核心模块互相独立,运行提供服务时有自己的内存空间,和用户进程一样运行,不是特权模式。微内核就很灵活了,要什么服务就把相关的模块放上来,互相独立不影响,不用太顾虑配合问题。这样就有很好的扩展性。

安卓是基于Linux的,是宏内核,由一堆底层特权模式的核心代码紧密组合在一起。这个架构,它的灵活性是不够的。面对各种硬件配置的手机,或者平板、电视之类的系统,它都是这一个架构,怎么适应?于是就搞出一个叫“虚拟机”的东西,假设大家都是在虚拟机上运行,代码是跨平台的,这么幻想着开发。每一个安卓应用,都在操作系统底层对应着一个虚拟机实例,由这个虚拟机来伺候运行应用程序的代码。

安卓程序开发者写的代码,其实是针对虚拟机的,所有机型都是一样的程序文件。但是不同机型,底层的机器代码其实不一样,如CPU类型不同。这样,虽然开发者能够一套程序所有安卓机都能跑(就是常见的APK安装文件),但是中间就需要经过虚拟机的翻译。

在早期版本的安卓系统中,这个虚拟机甚至是在实时解释翻译应用程序的代码,而且每次运行都要解释一次。执行时碰到一段代码,就解释翻译一段,变成机器码交给底层执行。不能整个应用程序一次性全翻译完,这样会卡。应用需要点一下就立刻能进去,等用户真开始操作了再把相关代码调上来解释翻译。

后来安卓进步了,在第一次安装APK程序时,直接一次性全翻成机器码,效率就得到了提高。虽然安装过程会慢一点,程序占用空间也大了一点,但每次点开运行时都好多了。

程序如果能直接针对底层机器硬件优化,性能可以提升非常多,就如苹果机器那样。华为方舟编译器也是这样,直接生成底层高效机器码。但是通用的安卓平台真不好办,只能对虚拟机搞点通用的优化把APK文件弄好点,然后虚拟机把APK翻译成机器码时也搞些通用的优化。这种分段通用优化的办法不可能做得多好,比APP直接针机器码优化要差不少。

有些APP开发者是可以绕过安卓,直接对某一机型优化。例如腾讯的王者荣耀,检测到用户是OPPO的机子,OPPO又给腾讯交了足够的“特别优化费”,就调用经过特别精心优化的高效机器码。但是这个过程就很麻烦,一般开发者搞不了,这也说明安卓要高效支持多种机型很困难。

长久以来,安卓系统就被诟病不如苹果iOS性能好,原因也被业界人士分析清楚了。苹果系统优势的基础是封闭性,不需要考虑兼容,所以可以自己控制,优化尽情地做。例如苹果APP就是直接编译成高效的机器码,在苹果自己开发的CPU如A12上执行,编译器优化可以做得很好。苹果还可以对开发者进行严格的管理,提供丰富的高效率底层接口给开发者,不许开发者使用低效的操作拖累整机效果。

安卓系统方便各种手机厂商开发,兼容做得好,所以占领了市场。但是既然要考虑兼容,管理就不可能太严厉,不可避免会带来效率降低。例如内存管理,各种安卓机各种APP都要能跑,内存操作就会比较零碎,一会分配一会释放,最后内存空间就碎片化了。到一定程度,没有可用的大块内存了,安卓系统就要运行一个内存整理程序把碎片化的内存合并成大块。这时不管机器上在运行什么程序,都会暂停一段时间,等待内存整理完毕,用户就会发现很厌烦又难以理解的机器卡顿了。增大内存也不一定能解决问题,有时安卓机6G内存还不如苹果机3G内存流畅。

这些毛病谷歌其实知道,安卓系统在不断升级,人们对安卓系统慢慢觉得能够接受了。但是就怕比较,和苹果机比起来顺滑流畅的感觉总是差一些,原理上就比不了。就算是安卓机阵营内部也在比较,想要更好的性能。安卓又要兼容,谷歌要协调使用者的利益,一些改进不能只针对某些机型。安卓升级改进,或者APP开发时最麻烦一点就是“适配”,各种机型多得很,这些机子看着弄好了,那些机又不行了。人们已经得出结论了,在现有这个兼容框架下,安卓的固有弱点不好改,会永远受束缚。例如优化就不可能做到极致。

华为通过引入方舟编译器已经证明了,用编译器取代安卓系统的中间环节,从APP代码到机器硬件执行一步到位,直接生成高效机器码,能一举取得高达60%的性能提升。这就是说,从代码到机器是可以直接对话的,不需要安卓在中间插手。也就是说,单独一个安卓系统机器,优化潜力是很大的。只是面对的机器种类太多,兼容适配太麻烦,没法统一搞。这其实就蕴含着安卓阵营崩溃解体的力量。既然捆在一起潜力不大了,不如分开来各过各的,各自发展自己的分叉,不需要谷歌协调了。

谷歌也知道这个情况,在开发Fuchsia操作系统,试图从底层重新出发,解决安卓系统的问题。例如Fuchsia不要Linux的宏内核了,改用灵活的微内核。谷歌的计划,是时机成熟时用Fuchsia取代安卓系统,手机、平板等各种机器都包括。这听上去和鸿蒙系统有些象。

但是鸿蒙系统看样子会比Fuchsia更早大规模投入市场。还是那个问题,谷歌不能自己搞分裂,还想维持表面上的一统天下,开发时要考虑的事情就多。而华为开发鸿蒙时不怕和安卓分家,可以大胆操作。这也是创新时常见局面,旧的市场大佬利益太多不敢革自己的命,新入场的却能放手大干一场。

理论上来说,鸿蒙基于微内核,比Linux要灵活,对机器进行优化组合更有空间。而编译器对于操作系统效率是非常关键的,华为会用方舟编译器积累的技术,甩开安卓虚拟机的限制,直接对各类机器进行高效编译。微内核架构有利于在这个方向进行努力,如一个关键组件并不是象Linux那样已经定好了代码写死了,而是在不同机型由高效编译器分别准备好。

这种开发非常有难度,需要对操作系统底层有深入的了解。但只要投入足够的人力去做,原理上有把握做出来一个开放的高效操作系统。其实这一步并不是最关键的,最关键的是应用程序开发商要配合在新系统上编译,而且不是随便编译能用就行,要深度优化共建生态。由于美国无理对华为禁运,已经帮华为解决了这个最大的问题,中国APP的开发者都会积极与华为配合。如果没有谷歌对华为禁用安卓这事,华为独自推出一个新操作系统,要邀请别的大公司配合会很麻烦,中国别的大公司可能会各有算盘,会不会深度配合优化不好说。作为开放的操作系统,最好其它厂商也来试用。看来在美国倒逼和中国市场舆论影响下,中国手机厂商也会积极地参与进来。

从以上的技术分析可知,安卓阵营崩溃解体是有深刻的技术背景的。但是由于开发新系统的各种麻烦,真要动手促成安卓解体,也没那么容易开始。因为可能白费钱没有成果,光自己努力不行,没有生态就不行。华为如果不是被逼,也许就不推出了。

美国人悍然对中国发动了技术战争,自以为能用一纸禁令绝杀中国最优秀的高科技企业。但是,华为公司以超强的战略眼光和执行力作好了准备,中国IT公司也经过多年努力建立了自主的互联网生态。以此为基础,中国公司从安卓开放系统的固有弊端入手,推出新的操作系统,对美国发动反击。虽然这是为了生存,也确有可能沉重打击美国的互联网霸权。

摘抄自:安卓阵营面临崩溃解体危机

更多相关文章

  1. android java 分享功能实现,Cocos2d-x3.3RC0通过JNI调用Android
  2. 标题栏系列:自定义沉浸式标题栏
  3. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框
  4. android 使用handler更新ui,使用与原理分析详解(附上代码以及截图)
  5. Android(安卓)中各种XML文件的作用
  6. android经典开源代码集合
  7. 安卓,rebuild apk错误解决
  8. Android中重复执行动画bug
  9. android 设置无标题

随机推荐

  1. 一句话源码
  2. android 实现视频缓存
  3. Android仿微信activity滑动关闭效果
  4. Android 日历方式显示的日期选择组件
  5. Android实现百度地图两点画弧线
  6. Android4.4之Camera2预览流程(从APP到Dri
  7. android Gallery
  8. Android9.0 Activity启动流程分析(三)
  9. Android实现加法计算器
  10. Android(安卓)File类 根据官方文档理解