本节书摘来自华章出版社《深入理解Android》一书中的第1章,第1.3节,作者孟德国 王耀龙 周金利 黎欢,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1.3 WebKit源代码目录结构
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交互的接口。