理解WebKit和Chromium: Chromium for Android
轉載請注明出處:http://blog.csdn.net/milado_nju/
# Chromium的Android版
## 概述
在前面的Chromium的移動版章節中,我們對Chromium的Android版作過簡單介紹,本章則進一步闡述其中的細節。
2012年,Google發布了第一版的ChromeFor Android。該產品受到了巨大的關注,但是同桌面版的Chrome瀏覽器不同地是,它的源代碼并沒有被開源出來,而且也不是跟隨最新的Chromium Trunk代碼,而是基于很早一個chromium穩定版-18。
在剛開始的時候,Google每隔一段時間會放出一個壓縮包,里面包含Chrome For Android所有的C++代碼,而Java相關的代碼則沒有放出來(其實放出了一部分代碼,但是UI部分則沒有),因而你沒有辦法編譯出來一個類似桌面版Chromium的瀏覽器。不過,你可以利用Google釋放發出的代碼來編譯一個C++動態庫(情況有些變換,現在你可以使用最新trunk上面的代碼來編譯一個這樣的庫了),來替換發布的APK包中相應的動態庫,這樣你就能生成一個自己定制的瀏覽器APK。如果你不是很在乎UI層和瀏覽器的豐富功能,還有一種方法可以讓你編譯一個簡單的瀏覽器,那就是利用chromium代碼直接編譯出兩個APK -Content Shell和Test Shell,它們界面非常簡單,但是它們都可以渲染網頁并擁有基本上所有Chrome For Android的HTML5功能。
聽起來令人迷惑,不是嗎?好了,讓我們通過下面的圖來理解它們吧。
上圖的層次結構非常清楚。從圖中可以看出,它們都是基于Content模塊/Content API/ContentView,而這是渲染網頁和支持HTML5功能的核心,所以很大程度上來講,在HTML5的支持上,它們不僅很類似,而且代碼都是相同的,因而分析Content Shell或者Test Shell可以幫助你理解Chrome for Android的網頁渲染和HTML5功能。
在上圖的最上面一層,除了Browser是看不到它的代碼以外,其它的你都可以在chromium的開源社區中找到它們的源代碼并可以嘗試編譯它們。至于如何編譯它們,請見參考文獻1,支持編譯Android的ARM版和IA版。
## Content Shell 和TestShell
這兩者都是在content模塊上構建的簡單瀏覽器,怎么個簡單法呢,簡單到界面就是一個URL輸入框附加一個頁面顯示框,功能就是顯示個網頁,至于其它功能,抱歉,它們基本上都沒有提供,而且這也不是它們的目標。
從界面上來看,目前兩者沒有什么區別,但就其目的和功能上來說,我的理解它們還是很不一樣的:
Content Shell是直接在content模塊之上的,其主要目的是測試content API/ContentView等模塊的正確性;
Test Shell雖然也依賴content模塊,但是它還依賴于chrome瀏覽器的很多基礎設施和組件(android平臺的chrome內核),更像是測試它們的一個簡單瀏覽器,因為chrome for android的UI部分不開源,所以Test Shell應該是最接近它的一個工具,可以幫助理解chrome for android的架構和內部原理。
## Android的WebView
使用Chromium的內核來實現Android的WebView機制,這個后面單獨介紹。
## 同桌面版的不同之處
Chromium的Android版同傳統的桌面版有很多不同的地方,具體包括以下幾個方面:
首先是工作模式方面,Chromium的桌面版一直緊跟trunk,有著不同的發布渠道,包括dev,beta,stable等。而Android版則是基于某個穩定版在內部開發,然后不定期的釋放出一些代碼,其并沒有同最新的Chromium同步(最近才開始保持同步)。
其次是開源方面,Chromium桌面版都是開源的,但是目前來看,Android版只是開源了部分,就是Content模塊和以下,瀏覽器的一些功能模塊,而UI部分則沒有而且在可以預見的未來也不會開源。
再次是架構方面,首先是GPU進程變成為browser進程的一個線程,其次是線程化合成已經是Android版的一個默認功能。見下圖所示,你可以跟“多進程模型”中的進程模型圖進行對比一下。
然后是安全機制,對于Android平臺來說,沙箱模型有些不一樣。在Android4.1之后,引入了進程的isolated UID機制,這就為Chromium的renderer進程提供獨立開來的可能性。每個Renderer進程都有唯一的UID,因而它們之間和Browser進程互相不能訪問,直接被隔離開來。
之后是渲染部分,特別是GPU硬件加速部分也有很多不同,以后會一一介紹他們。
最后是功能方面,同桌面版比較,一些功能如HTML5,插件,NativeClient,extension等目前都不支持。
## 源文件目錄
content/public/android/
???????? content模塊中的android接口,例如contentview等
content/shell/android
???????? Contentshell相關類
chrome/android
???????? TestShell的相關類
android_webview/
???????? 該目錄包含實現Android系統當前WebView接口所需的內部實現類,基于Chrome的內核
?
## 參考資料
1.??????https://code.google.com/p/chromium/wiki/AndroidBuildInstructions
By yongsheng@chromium.org
?
轉載于:https://www.cnblogs.com/xiaowangba/archive/2013/03/26/6313858.html
總結
以上是生活随笔為你收集整理的理解WebKit和Chromium: Chromium for Android的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx+keepalived双mas
- 下一篇: android sina oauth2.