細數安卓碎片化的三宗罪!!!

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

 轉眼間四五年,安卓已經從不堪大用始初版本進化成為世界上最先進的移動操作系統之一。在安卓誕生伊始,不客氣地說基本是一堆破爛。然而就是這堆半成品代碼,卻讓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中

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


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表