轉載請注明原文地址:http://blog.csdn.net/milado_nju/article/details/8107712
#Chromium的移動版 (Chromium for Mobile)
##概述
Chromium的誕生于桌面(desktop)系統(tǒng)之上的,這其中包括Windows, Linux和Mac。這奠定了Google Chrome的地位,市場份額不斷上升。隨著移動操作系統(tǒng)的流行,Chromium也迫切需要拓展其在移動設備上的市場,所以Chromium的Android版和iOS版應運而生了,這兩個背后有不同的故事。
本章討論一些有關移動版的有趣事情,這里面沒有特別細節(jié)的東西,主要是一些技術方向性方面的描述。
## 移動版
chromium的iOS版和Android是為兩個流行的移動操作系統(tǒng)設計的,其區(qū)別與傳統(tǒng)的桌面版,特別是UI方面進行了較大的重新設計。兩者從外觀上看頗為相似,但是其內(nèi)部的渲染引擎的差別非常的大,原因在于iOS對應用程序的控制造成的,而非兩個操作系統(tǒng)的差異性。
##Chromium的iOS版
iOS是最受歡迎的移動操作系統(tǒng)之一,其設備數(shù)量以億計,所以能在iOS上成功就特別重要了。顯而易見,這有助于瀏覽器的市場份額。蘋果對iOS上的應用程序是嚴格審核的,瀏覽器作為非常重要的應用程序,當然也不例外。
不幸地是,蘋果不允許瀏覽器有自己的內(nèi)核(WebKit或者其他),理由是安全性。所以,chromium的iOS版始終沒法通過審核,其中的爭論也是非常激烈。拋開這些爭論,Chromium的iOS版已經(jīng)上線了,不過這是一個沒有chromium內(nèi)核的瀏覽器,其基于的是iOS提供的UIWebView(一個嵌入式的網(wǎng)絡渲染模塊,該模塊提供對網(wǎng)頁渲染和HTML5的支持),加上Chromium風格的UI。
有趣的是這個UIWebView跟Safari的所使用的支持HTML5的模塊是不一樣的。相對于Safari的瀏覽器內(nèi)核,其有兩個明顯的缺點:
1. Safari使用Nitro JavaScript引擎,而UIWebView使用WebKit缺省JavaScript引擎,性能上要差很多;
2. Safari使用單獨的線程而不是主線程來做渲染工作,悲劇的是UIWebView渲染是在主線程來完成,這會阻礙事件的響應。
好吧,有了這兩點,其他基于UIWebView的瀏覽器被Safari拋開一大截了,而且這些瀏覽器只能使用UIWebView,而不能有自己的瀏覽器內(nèi)核。
##Chromium的Android版
我們知道Chromium是一個開源的項目,但是,chromium的Android版從開始之初就是一個閉源的項目,其基于一個穩(wěn)定的chromium版本,在Google的內(nèi)部開發(fā),直到發(fā)布Google Chrome的Android 1.0版。
跟iOS不一樣,Android版從出生就是親兒子,其跟Android關系非常緊密,怎么說呢,Android上的應用程序一般都是基于Android SDK和Android NDK的API來開發(fā)的,Chromium可不是這樣,它其實是使用了Linux平臺的API和很多第三方的庫,可以說是一個有“特權”的應用程序。
目前Google Chrome的Android版是基于chromium18開發(fā)的,雖然是閉源的,但是Google開放了c++端的代碼(參考文獻第一條可以下載這部分代碼,是一個基于chromium18的zip包),而Java端的代碼開放的很少,與UI和瀏覽器功能相關的則基本沒有開放。Google Chrome的Android版本中也加入了一些新的特性和架構,例如in-process-gpu, threaded compositing,基于Android UID isolate的沙箱技術等等,對于HTML5的支持也非常的到位,各種主流的HTML5功能基本都支持,除了WebGL,這都會在以后的章節(jié)作一一介紹。
無須擔心的是Google的開放性。Google正在逐步釋放出Android版的源代碼到Chromium的源代碼庫(upstream trunk)中,目前對開放者來說,很多功能逐步加入,所以很多單元測試已經(jīng)被打開了(實際上本人也參與貢獻了一些patch)。對用戶來說,主要的進展是能夠通過一個簡單的瀏覽器(content shell)渲染網(wǎng)頁,雖然有很多的bug,但是基本的渲染功能是可以工作的,而且支持HTML5的canvas2D和WebGL等功能(當然,質量還是個問題)。這部分做過比較深的研究,也貢獻給upstream一些代碼,相對也比較熟悉,會在后面的章節(jié)中作專門的介紹。
## 參考文獻
1. https://developers.google.com/chrome/mobile/docs/faq
2. http://peter.sh/2012/02/bringing-google-chrome-to-android/
By yongsheng@chromium.org