android art (2)又有一段時間沒有寫一些技術性文章了 , 在今次 Google 推出 Android 4.4 的時刻 , 筆者寫一下 Android 4.4 的一些技術文吧 . 大家可能認為 Google 今次推出的 Android 4.4 Kitkat 了無新意 , 很多新加入的功能真的有種「可有可無」的感覺 . 其實如果深入了解 , Android 4.4 其實是一個試驗平台 , 因為內裡隱藏了一個強大的功能 , 而這個新改變將可能扭轉 iOS 比 Android 快及流暢的命運 . 這個就是 ART . ART 是 Google 花兩年時間研究開發出來 , 究竟兩年的大計劃得出什麼的效果 ?

大家都知 Android 是建基於 Java , 而 iOS 就是 Obejctive-C , 在過去 , iOS 的優勢就是在於由編程到程式編譯中只是直接運行 , 手機硬件及系統負擔減少 , 令速度提升 . 不過 Android 的命運就比較坎坷 , 因為使用 Java 代碼 , 在安裝了 Apps 之後 , 每一次打開 App 都需要做一次轉換碼 , 不然系統不能讀取 , 往往這個動作就令用戶覺得有 lag (“卡”) 的感覺 , 所以往往有人說 iOS 比 Android 流蜴 . 這對於 Android 來說是一個先天的缺憾 , 直到近期由於手機規格不斷提高才把遲鈍的感覺減少 .

為了解決”卡”的問題 , Google 一直都不遺餘力 , 在 Android 4.1 時就加入「Project Butter」解決介面遲鈍的問題 , 而在 Android 4.3 就加入 TRIM 解決系統因使用日子久了而引起的 I/O 「老化」遲鈍問題 . 而 Android 4.4 就更加深化地去解決一直牽累 Android 不能流暢的問題 -> Dalvik .

Dalvik 與 ART 的分別

Dalvik在過去所有的 Android 版本中 , 所有的 App 及 Android 系統都需要通過 Dalvik 模擬器去運行 , 所以 App 中每一個位元碼都需要通過編譯成裝置能讀懂的語言 , 通過 Just In Time (JIT) 完成編譯工作 .  這就是上文中提到為什麼 Android App 為什麼每一次啟動都需要重新去編譯的意思 . 這種方式不但拖慢了啟動程式的時間 , 亦消耗更多硬件資源 . Dalvik  的原意是為初期的 Android 提供大量的 Java 程式開發人員 , 因為 Dalvik 可以模擬運行 Java , Java 的程式員可以無障礙的開始 Android Apps . 所以 Dalvik 最初的工作是 “扯皮條” , 用以拉攏大量人員開發 Apps .

而 Android 4.4 中的 ART 就完全改變了這種過時的運行方式 , ART (Android Runtime) 是一個直接運行的方式 Ahead-Of-Time (AOT) , 這個方法令 Apps 在運行前不需要再重新編譯成機語 , 省去了模擬的過程 . 因為在 Apps 安裝時已經直接安裝機器可以讀得明白的語言 , 一開 App 就可以運行 .

看不明白嗎 ? 打個比喻 , Dalvik 的情況就是你不會英語 , 給你一份英文文件 , 你需要花時間去翻譯才看得明白 . 而 ART 就是你即使不懂英文 , 但給你看的文件都是中文 , 你就可以馬上看不用等 .

啟用 ART

android art (3)ART 其實在 Android 4.4 中並非一個明顯功能 , 是需要用戶自行去開啟的 , 用戶進入「設定」>「關於手機」>然後不停按「版本號碼」那一欄 , 直到出現「開發人員選項」, 進入「開發人員選項」見到「選取執行階段」, 在這裡可以選擇使用 Dalvik  還是 ART . 選擇好之後手機會重開 , 而這次重開的時間會長一點 .

ART 的好與壞

ART 在一般的情況下可以為 App 的執行時間最高省去 50% , 對於大型 Apps 的執行有著明顯的優勢 , 由於執行時間短了 , 處理器的負載時間亦減少 , 變相令裝置的續航力時間提升 . 同時令處理器更可以即時對於動畫介面效果以及觸控回饋等作出反應 , 令延誤感減少 , 對於多核心的裝置 , ART 可以令裝置在啟動最少的核心情況下完成任務 , 亦令佔用的 RAM 減少 , 這就是 Google 為什麼認為 512MB RAM 的裝置都可以跑得順暢 .

android art (4)有利是否就有弊 ? 是的 . 由於在安裝 App 時已經直接編譯成機器可讀懂的語言 , 所以間接令每個 Apps 的所需儲存空間加大 , 因應 App 的不同 , 增加量為 10~20% . 不過以一個 100MB 的遊戲為例 , 其實當中程式碼只有 20MB~30MB 左右 , 其實部份都是一些圖片及音效等 , 30MB 的 20% 就是 6MB , 以現時主流機子動輒已經 32GB 來說 , 多幾個 MB 不算什麼 . 另一個問題就是 Apps 在安裝時已經要做編譯 , 所以會令安裝的時間加長 , 不過換一個想法就是 , 痛一次總比每次痛好吧 . 最後一個問題是 ART 的推出太新了 , 有部份 Apps 會出現不良反應 , 如 Whatsapp . 不過這些兼容小問題相信可以在短期內解決 .

ART 真的有用嗎 ?

android art現時 Android 的 ART 仍在起步階段 , 要談論是否有用仍是言之尚早 , 畢竟 Google 仍把這個功能隱藏於開發者選項中是不太想一般用戶去接觸 , 亦可能是 ART 仍存在不少的 bugs . 但既然有這個功能 , 就去測試一下吧 . 以筆者使用了 ART 的一星期 , 其實在筆者個感覺上速度並沒有明顯提高 (可能是因為機子本身的規格不低) , 反而令筆者覺得開機的速度慢了(需時 16秒左右) , 而且在 Apps 的安裝中亦感覺安裝時間長了 . 但亦感覺到續航力似乎好了 . 筆者亦用同一手機在 Dalvik 模式 及 ART 模式下進行了 Antutu 測試 , 大家會發現 ART 模式的分數低了 , 留意上圖 , 可見到各項測試中的分數其實兩者可以說是沒有分別 , 分數最大的差異就是在「Android 的虛擬機器」, 足足少了1倍 , 由此可見 , 在 ART 下 , 虛擬的能力是大打折扣 , 但這個分數已經不重要 , 因為除了安裝 Apps 時 , ART 下根本已經不需要虛擬機器 .

其實亦不是筆者個人覺得 ART 在這個階段沒有為 Android 系統帶來明顯的速度提升 , 坊間不少的 ART V.S Dalvik 測試中都反映了兩者之間似乎沒有速度上的大差別 . 不過筆者仍相信 ART 是一條必須走的路 , 因為如果繼續採用 Dalvik 的虛擬編譯方式去運行 App , 當 App 的容量再大 , 需要效能再高時 , Dalvik  就是一個壓不下的樽頸 .

坊間 ART V.S Dalvik 影片

_______

更多平台立即 Follow:Qooah IG (@qooah)Qooah YouTube,八掛產品發佈會現場,睇盡靚靚 Show Girls