细数安卓碎片化的三宗罪!!!

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

 转眼间四五年,安卓已经从不堪大用始初版本进化成为世界上最先进的移动操作系统之一。在安卓诞生伊始,不客气地说基本是一堆破烂。然而就是这堆半成品代码,却让IT从业者们双眼发亮。Google强大的开发实力自然是人们青睐安卓的一大原因,但更重要的是随着安卓呱呱落地安卓开源项目AOSP——好大一块天上掉下来的馅饼砸中了消费电子资本家们的油头肥脑。

AOSP是安卓的活力源泉,也是碎片化的主因

Google旗下的开源项目的肥水往往能够流入众人田,君不见一个Chromium项目养活了多少双核浏览器。一个单一的互联网入口尚能做到如此地步,更何况是能够从用户每一根毛细血管抽水的手机系统。安卓开发者如潮而至,安卓急速成长。

   尽管仍未摆脱iOS的阴影,但安卓也已经成长得足够茁壮

   安卓的进步有目共睹:人们说安卓慢,安卓2.3加入了基于寄存器的Dalvik虚拟机,大幅提升App运行效率;人们说安卓崩,安卓4.0使用了新的内存管理机制,同时推行Holo标准规范安卓App,使用Holo后安卓App很少再会动不动就罢工了;人们说安卓卡,安卓4.1推行“黄油计划”,安卓的流畅程度终于足以和iOS并肩。在众多厂商以及第三方开发者的努力下,优秀的代码源源不绝进驻到了AOSP中。iOS让世界掀起了触屏风暴,而安卓则让触屏风暴席卷到地球每一个角落。

    安卓已经成功占领了大部分移动市场,安卓帝国的版图仍在扩张
~ 
    安卓告别了破烂的时代,但与此同时安卓也迎来了破碎的时代。开源+设备厂商各扫门前雪的模式令安卓一个系统千张脸。纵向来看,安卓设备们难以跟上Google的节奏更新系统,发布了一整年的安卓4.1/4.2果冻豆系列在前些天才险险登上份额第一的安卓系统的宝座;横向来看,三星有Touch Wizard,HTC有Sense,国内的MIUI、Flyme等更是将深度定制安卓的话题炒得火热。除了Nexus系列和某些特制机器,你很难找得到Google亲手维护的、原滋原味安卓。

    安卓一直以碎片化的姿态在成长之路上奔跑

    安卓占领了世界,但版图内驻军们往往只是安卓的碎片,这些碎片对安卓的用户体验造成了诸多不良影响。碎片化带来的负面效应已经成为了日益强盛的安卓的阿喀琉斯之踝——这在Google推行用以建立Holo开发标准的安卓4.0后,又显得尤为明显。

 安卓将会在今年迎来5.0的大版本更新,届时安卓阵营的碎片又会多上一大块,安卓正朝着碎片化之路越走越远。无论对开发者还是普通消费者而言,这都不是一个好消息。安卓碎片化带来的痛有几何?让我们一起来细数安卓碎片化的三宗罪吧。

罪状一:碎片化导致安卓App运行效率低下

 从总体水平来看,安卓App的运行效率要低于iOS App。究其原因,绝大部分的安卓App都是用效率不高的Java代码编写,依赖Dalvik虚拟机运行,而iOS应用则使用C/C++开发,效率更高。“安卓基于Java效率低下”这个观点,已是深入人心。

   然而,鲜为人知的是,安卓App也是能够做到速度不下iOS的。Google很早就发布了安卓NDK(Native Development Kit,原生开发套件),开发者可在NDK中使用C语言编写安卓App。经过实测,使用NDK编写的代码效率要比基于SDK(也就是用Java编写)的代码效率高上三四层楼那么多——在CF-Bench的测试中,基于NDK的性能是基于SDK的三倍以上。NDK之于安卓就相当于金坷垃之于庄稼,没有NDK,怎能编程呀。

使用NDK开发安卓App,效率会大为提高

 NDK的好处不言而喻,然而NDK不是你想用,想用就能用。使用NDK开发的App兼容性通常远逊于用SDK开发的App——SDK开发的App运行于Dalvik Java虚拟机中,并不需要直接和硬件对话。目前安卓碎得如此惨烈销魂,硬件分为ARM和X86两大阵营,下面又有数十个芯片提供商,系统分支更是数不胜数。用NDK写App得为众多版本慢慢适配,这个小时代一秒种几十万上落,写本书都得Ctrl+C/V不自己码字,谁来给你玩这套。

  安卓硬件分为X86和ARM两大阵营,下面又有数十家芯片厂,比七国还乱

  虽说安卓Dalvik虚拟机基于寄存器,效率远高于非智能机上基于栈的JVM,但速度仍没法和NDK相比。此外,Java是一门令人头疼的语言,自带有垃圾回收机制固然方便,但这个需要大容量的RAM才能保证运行效率——诸君手上的2G RAM安卓机就是产物了。Java的垃圾回收机制会让水平不够的开发者不注意控制内存溢出,当其进程超过Davilk虚拟机分配的阀值后,就会被系统杀掉释放内存,这样一来就有可能造成App的崩溃、系统的假死等情况。

并不是说Java不能编写出精品App,但Java的确容易造成问题

  安卓App的运行缓慢、卡顿等情况,SDK编写的Java应用功不可没,而安卓碎片化的现状又是Java应用风行的头号功臣。安卓不解决碎片化的问题,恐怕我们在将来很长时间内都得饱受低效

罪状二:碎片化导致安卓App兼容问题多多

◆系统导致的兼容问题

 前面说到,为了提高安卓App的兼容性,开发者们多是选择使用Java来编程。然而事情如果这么容易就能解决,早就世界大同了。不同分支的安卓系统,特别是经过了深度定制的安卓系统,依然存在为数不少的兼容问题。

 Google在安卓4.0发布之时推行Holo标准,旨在为用户和开发者提供一个良好的兼容环境——然而问题是Holo并非是强制性的标准,世界上的谷粉又不是那样的多。特别是在中国大陆,很多开发者似乎压根就不想鸟Holo,这就导致了Holo标准的安卓App有时候会表现不佳。比如说MIUI就大量擅自替换Holo应用内的控件,破坏了Holo应用的一致性,如下图。

MIUI(右)会替换Holo控件,试想一下如果标题栏原本是橙色……(图片引自极客公园)

另一种情况,厂商是很喜欢Holo,但对Holo却别有另一番见解。比如说魅族Flyme 2.0,试图用Smart Bar来整合Navigation Bar和Action Bar,从而节省显示面积、提高操作效率。魅族宣称符合Holo设计规范的App可以享受到Smart Bar带来的好处,但事实上在Flyme 2.0问世之初却问题多多。

Smart Bar在最初即使使用Holo App也存在不少兼容问题(现已基本解决)

 当然,Smart Bar的问题在Flyme数次更新后得到了很大程度的改善,图中的这些问题已经不存在了。不过Flyme的兼容性依然不是十全十美,比如说在最新版的QQ 4.2中,Flyme无法复制QQ信息,不过这个问题和Holo没啥关系就是了。

  ◆硬件导致的兼容问题

  安卓的碎片化在软件、硬件两方面皆有体现。使用SDK可以避免很多硬件兼容性问题,但并非所有的App都能够用SDK编写。比如说大型3D游戏,为了最大程度发挥硬件性能,使用NDK才是最好的选择。所以我们通常可以看到,安卓上一个游戏能分身为N个版本,下错了版本?对不起,赏你黑屏或者FC。

不少App只有特定硬件才能运行,比如说Tegra专属游戏

 除了主程序外,由于安卓设备的GPU种类繁多,所以也需要准备不同的纹理数据包。玩过过安卓游戏的朋友应该都知道其中的折腾之处,苦逼的回忆这里就不多说了。

罪状三:碎片化导致系统和Google脱节

 除了Nexus系列以及一些特殊定制的原生安卓设备,Google没法亲自维护市面上绝大部分的安卓系统。这就导致了安卓系统后续服务的好坏,完全取决于设备制造商的心情。君不见因为升级不了系统,就高喊“再买××砍手”的众生苦相。Google没法保证自己的开发成果能够及时推送到每一部安卓设备中,这就导致了以下问题。

◆安全更新滞后

 安卓被爆出安全问题不是一两次,什么authToken认证权限漏洞啦,什么短信欺诈漏洞啦,黑客似乎总能找到安卓的命门狠狠挖进去,掘出你的个人资料,伪装成熟人钓你钱财。前些天,安卓还爆出了也许是有史以来最严重的弥天大漏洞——以在不破坏密码签名的情况下修改应用的APK代码,这意味着你的安卓机会轻易沦为僵尸网络一部分、化身为黑客的监听器跟踪器等等。可怕的是,这个漏洞涉及到了安卓1.6后所有安卓机,无论你是月月机皇还是周周旗舰都没法避免。

只有Google才能及时给安卓打上一支修补漏洞的药

所幸的是Google是一个反应十分快速的公司,很快就会推出相应补丁修复漏洞。然而不幸的是,Google只能将灵丹妙药浇灌到亲儿子身上。至于其他被定制得连Google妈妈都不认得的安卓机,Google只能长叹一声爱莫能助了。

◆设计理念滞后

 前面提到,Google是一个反应十分快速的公司,快这点同样也体现在对安卓的更新上。在安卓推出伊始,四大金刚键还占据着主流,于是出现了下面这种情况。

四大金刚键没法为用户提供一致的体验

Google仔细想了想,这样子不行,于是很快更变了设计理念,从安卓4.0开始引入了Holo设计,用屏幕中虚拟的Navigation Bar来代替四大金刚键——而Navigation Bar默认是不存在菜单键的!屏幕虚拟键增减按钮简单,但屏幕外的按钮怎做得到你说要分开,分开就分开。在不少遵循Google新推出的Holo标准的App中,已经没有了菜单键这个概念。这就苦了四大金刚,好大一颗报废的菜单键还得占据手机下巴的大量空间。

安卓4.0后推行Navigation Bar,四大金刚键的菜单键和搜索键瞬间过时,泪流满面。

在Holo标准中,四大金刚键中的搜索和菜单键算是报废了。为了跟上Google的节奏,手机厂商们又开始更改按钮布局了。比如说HTC ONE,将四大金刚键砍剩下Home键和返回键,所以在某些需要菜单键的App中会在屏幕下方出现一条小黑条。按钮砍掉是砍掉了,但如果Google某一天又想要增加按钮,恐怕小黑条还得改。若是跟进Navigation Bar,倒没有这个问题,但你没法保证Google会不会某天发神经又开始倡导屏幕外按钮的布局。

 前面提到过的魅族Flyme中的Smartbar也存在类似的问题。在最近Google App的新版本中,我们不难发现这样一个趋势——Google正在逐渐去除App底部的Bottom Bar(看来Google也意识到了双底栏的问题),甚至在Google地图中连Action Bar也不见了,只剩下Search Bar。在这些App中,Smart Bar的效果远不如前,Google设计理念的变更,多少浪费了Smart Bar的努力。

旧版Google App使用Bottom Bar,所以Smart Bar能大显神通

新版的Google App放弃Bottom Bar后,Smart Bar反而多出了一个无用的菜单键

~后话

 安卓系统的碎片化仍在继续,但所幸的是Google目前似乎正在寻求解决方法。在今年,我们能够看到Google在Play商店中发行了更多原生系统的机型,这些机型对Google新系统的匹配虽说不能和Nexus系列相比(Galaxy S4的菜单键、HTC ONE的小黑条问题),但这依然是一个好的趋势。

 安卓5.0将在今年和我们见面,安卓的碎片化还会踏上一个新的台阶。碎片化是开源系统不得不面对的问题,看看Linux一堆发行版就知道了。Google能够解决这个难题吗?我们拭目以待吧。


帖吧/西西里_佳唯 2015-06-01 23:04:08

[新一篇] 為什么要從Web form過渡到MVC中

[舊一篇] 一個完美主義者的簡潔與統一—史蒂夫·喬布斯傳的評論
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表