[ Android ] ART? 能吃嗎?很多人說 ART 是 Android 的救星,是真的嗎?

Title

喜歡 Android 的朋友可能最近都接收到一些新資訊:Google 在 Android 最新的 4.4 版(KitKat)中導入了一個新技術叫 ART(全名是 Android Runtime)。那麼應該也看過好幾篇文章提到 ART 可能是 Android 的救贖(他們叫救贖我是不想這麼說啦。很多人喜歡說 Android 這麼卡這麼頓怎麼用,但是 Android 這麼開放這麼自由對我來說就是比其他平台好用的地方囉)。那 ART 有什麼了不起的?這邊不講硬梆梆的技術名詞!告訴你為什麼 ART 讓許多人興奮!(要先聲明啊,這篇是寫給不懂硬梆梆技術內裡的人看的,因此會有些地方可能會讓技術人員看了覺得刺眼,用詞不正確之類的…)


Android 跟 iOS 與 Windows Phone(以下簡稱 WP)最大的不同在於「Android 沒有預設的執行硬體平台」(這邊不討論開發環境)。

iOS 只能運行在 Apple 為其特別打造的硬體,也就是 iPhone。Apple 也沒有意思將 iOS 授權給第三方製造的平台。而 Microsoft 則規範了 WP 運行需要的基本硬體,以確保 WP 的運行以及應用程式(app)的可用性。

可是 Google 對於 Android 一開始就沒有給予這些規範。Google 對 Android 採取開源的態度,使得任何人都可以在授權規範下,拿 Android 原始碼根據自己的需求修改,讓 Android 運行在想要的硬體上(至於有一篇拿 Google 將自己開發給 Android 的應用程式閉源就稱之為 Android 開源末日的文章實在令人嗤之以鼻)。這時候就面臨了一個問題:如果要讓 Android 可以跨平台,雖然開發 Android 的人會想辦法讓他的 Android 可以運行在目標硬體上,但是應用程式怎麼辦?總不能讓每個開發者要針對所有硬體一一編譯一套版本啊!這太瘋狂了!

在 iPhone 還沒出現前,智慧型手機市場是由 Windows CE 與 PalmOS,Symbian 等搶奪。當時我正使用 Windows CE 的智慧型手機,就發現一個很可怕的現象:由於歷經多年,硬體會有進步,新出的手機也都會用新的硬體,結果就發生一套應用程式(再強調一下,app 是 application 的縮寫,就是應用程式。我習慣叫應用程式)被編譯成適應好幾個不同 CPU 的版本。這邊舉 Total Commander 為例子:http://www.ghisler.com/ce.htm 。如果點進去 Pocket PC 或是 Windows Smartphone 或是 CE 的目錄,下載點部分有分 ARM/XSCALE,MIPS,SH3 等。對使用者來説根本是天書!他怎麼會知道手上的機子到底該用哪一種了?那時候常常都會看到許多不諳技術的使用者在論壇上就這些問題求助。

Android 解決的方法就是採用名為 Dalvik 的虛擬機器(VM,virtual machine)!不用去考慮外面的硬體架構究竟是哪一套,提供一致的虛擬環境,確保應用程式的可用性。但是這麼做的缺點就是拿效能來補貼。

iOS 與 WP 因為主要硬體是固定的,因此不必用這種方式。運行在這兩個平台上的應用程式可以直接編譯成原生代碼(native code):這是一種硬體可以直接理解的碼。

用很簡單的例子來解釋:

今天你去參加一場很喜歡的繪師或者是仰慕的作者的簽名會,或者是知名的大師的研討會。台上的繪師/作家/大師他們只會自己的母語,而你只會自己的母語,此時當然兩邊無法溝通,於是主辦單位請來了翻譯。這位翻譯熟悉兩邊的母語。於是你與對方之間就可以透過翻譯來溝通。這個例子中,台上的繪師/作家/大師就是硬體,翻譯就是 Dalvik,你就是應用程式。你不必去學習對方的語言,透過中間的翻譯一樣可以達到效果,可是因為要多透過一層,所以會犧牲一點效率。

原生代碼就是兩邊都熟悉同一種語言,可以直接溝通。省去了翻譯,效率就好很多了。

當然 Android 不是只有 Dalvik 這個方式,也有提供原生代碼的解決方案,但是這又是別的故事了。


講這麼多,該來説 ART 是啥了。

根據媒體介紹,Google 研發 ART 已經有兩年多的時間…ART 技術就是當使用者在 Android 裝置上安裝應用程式時,本來應該是轉成 Dalvik 格式,要跑在虛擬機器內的。改變成當下根據裝置的硬體,重新編譯成原生代碼!

這麼做的缺點,當然最明顯的就是使用者安裝程式的時間會變得比較長(應用程式夠大的話,安裝時間的改變應該很有感),而且程式會佔用比較大的體積。但是帶來最大的效益就是效率會比較好。從啟動到使用過程,應該都會比傳統的 Dalvik 來的好。

而目前只有 Android 4.4 Kitkat 支援 ART 而已,並且不是預設開啟的選項!目前 Google 將這個選項藏在開發者項目中。但是大多數使用者的體驗都是認為「ART 太棒啦!快讓它成為預設選項吧!」


如果想更瞭解 ART 一些,Android Police 的這篇文章 Meet ART, Part 1: The New Super-Fast Android Runtime Google Has Been Working On In Secret For Over 2 Years Debuts In KitKat 可以參考看看呦。


話説…還記得在 4.4 發表之前,Google 併購了一間名為 FlexyCore 的公司嗎?這間公司有個產品叫 DroidBooster 也是做著跟 ART 類似的事情:將 Dalvik 轉換成 ARM 的原生代碼。將這件事情與「ART 已經研發兩年以上」兩件事情混著看,在 4.4 發表之前併購 FlexyCore…該不會是為了專利吧?這只有 Google 跟 FlexyCore 知道了吧。