天天看點

《深入了解Android》一1.3 WebKit源代碼目錄結構

本節書摘來自華章出版社《深入了解android》一書中的第1章,第1.3節,作者孟德國 王耀龍 周金利 黎歡,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

webkit源代碼在android全源碼的external/webkit/source目錄下。主要關注如下4個目錄:

(1)javascriptcore

webkit的預設javascript解析引擎,也是safari使用的javascript解析引擎。在android平台已經啟用v8作為js引擎,android 4.0以後隻用到了javascriptcore中的wtf(web template library)部分代碼。

(2)webcore

webcore是浏覽器渲染引擎的主體代碼,包括loader、dom、page、css、render以及html 5擴充接口等相關代碼。

(3)webkit

定義了與浏覽器應用相關的一些接口,它是平台相關的,每個子目錄都對應平台的實作。

(4)webkit 2

webkit 2定義了浏覽器引擎的多程序應用架構、支援渲染引擎與浏覽器ui分别存在于不同的程序。

這4個目錄下又有很多子目錄,先來看webcore目錄下的各個主要子目錄。

webcore目錄

webcore/rendering:存放頁面渲染相關代碼,包括頁面渲染所涉及的樣式、布局以及render對象等内容。

webcore/dom/:dom對象定義的相關檔案,包括一些基礎類及其接口定義,如各種dom元素、事件的定義以及描述js binding的idl檔案等。

webcore/html/:html相關的内容,如html解析(parser)、各種html元素的定義、web canvas實作等内容。

webcore/accessibility:各種圖形控件的可用性通路接口,控件的可用性屬性包括功能、角色、目前狀态以及與具體平台(windows、qt、gtk、mac)的圖形庫的綁定情況。

webcore/bindings:包含生成dom元素js綁定的接口和輔助腳本。針對每一種js引擎都有對應的綁定腳本和代碼目錄,比如v8綁定腳本在script/codegeneratorv8.pm,而v8目錄存放了 v8與dom元素綁定的接口,以及部分不能通過腳本生成的定制化代碼。

webcore/bridge:提供了c、java、javascript、objective-c以及qt的np api的通路接口。

webcore/css:包含處理css的代碼,包括css解析(cssparser)、css解析的輸出表示、不同css規則的定義與實作,以及css中實作的js接口等内容。

webcore/editing:頁面編輯相關的代碼,比如編輯修改dom,修改顯示樣式,拼寫檢查等功能。

webcore/history:包含頁面前進、後退、浏覽記錄實作,以及page cache實作等。

webcore/icu:webkit使用icu4c做字元編碼轉換比如由gbk轉化到utf8。icu目錄包含相關頭檔案。icu是international components for unicode的縮寫,主要為java提供全球化支援。而icu4c則是c/c++使用的版本。

webcore/inspector:web inspector也就是safari和chrome提供的網頁調試工具。inspector目錄包括inspector實作的功能代碼和展示inspector視窗的前端代碼。

webcore/loader:包括浏覽器中負責主資源和派生資源加載的代碼、派生資源使用的memory cache以及新的html 5接口—application cache等。

webcore/mathml:包含w3c(網際網路聯盟)為網頁中的數學表達式制定的規範的實作代碼,可以通過編譯選項控制是否支援該功能。

webcore/notifications:新的html 5 notification接口以及完成js綁定的idl檔案,與其他html 5接口(fileapi、webaudio、application cache、index db、web socket等)一樣,隻包含接口邏輯,不包含平台适配代碼。

webcore/page:包括頁面結構、頁面操作、互動事件、浏覽器設定、js執行環境等方面的内容。内容比較散亂,但都要非常重要。

webcore/platform:主要封裝平台相關的系統接口,如事件處理、網絡庫接口等,如graphics(繪制相關的接口)、network(http協定相關的接口)、image-deloders(圖形庫存的圖檔解析接口)、text(文本編碼接口)等。

webcore/plugins:包含浏覽器為支援npplugin而提供的接口。

webcore/resources:需要用到的資源和圖示,主要是一些圖檔檔案。

webcore/storage:webstorage、index db等接口的實作邏輯,也是html 5的新的api。

webcore/svg:主要包括與svg方面相關的内容,提供矢量圖形功能支援。

webcore/websockets:web socket 的接口邏輯代碼以及實作js綁定接口用的idl檔案。

webcore/wml:wireless markup language 的相關代碼。

webcore/workers:包含web worker的實作邏輯,如worker線程封裝、js執行上下文建立、消息傳遞等功能代碼。web workers為網頁前端提供多線程的js執行環境,web worker出現之前隻有主線程可以作為js的執行環境。

webcore/xml:主要包括與xml方面相關的内容,如xml parse、xpath、xslt等。

webkit目錄

webkit目錄,我們主要看看android平台相關的内容。

webkit/android:webkit在android平台porting的實作。

webkit/android/jni:提供本地java類接口以實作webkit内部與外部(即jvm)的互動,并通過jni中的bridge類來支援協調處理。其中,webviewcore.cpp實作了android.webkit.webviewcore.java中的很多native方法。

webkit/android/nav:同webkit/android/jni,其中webview.cpp對應android.webkit.webviewclassic.java,實作webviewclassic.java中的native方法。

webkit/android/webcoresupport:實作android系統中外部程式提供給webkit内部使用的接口,比如webkit與網絡庫chromium-net互動的接口。

繼續閱讀