全書一共11章:第1章介紹了Android源代碼閱讀與編譯環(huán)境的搭建;第2章介紹了瀏覽器的通用工作原理以及WebKit的架構(gòu)設(shè)計;第3章深入解析了WTF的實(shí)現(xiàn)原理;第4章深入講解了Loader與網(wǎng)絡(luò)庫;第5章詳細(xì)講解了WebKit的網(wǎng)頁解析原理;第6章深入分析了瀏覽器的排版和布局原理;第7章講解了瀏覽器的渲染和硬件加速;第8章從源碼的角度深入剖析了AndroidWebKit框架;第9章從實(shí)用的角度和源碼的角度講解了WebKit的JavaScript擴(kuò)展接口;第10章講解了WebKit的插件系統(tǒng)的實(shí)現(xiàn)原理;第11章對RemoteInspector的實(shí)現(xiàn)進(jìn)行了深入分析。
序
前 言
第1章 搭建源代碼編譯環(huán)境 1
1.1 Android全源碼開發(fā)環(huán)境 1
1.1.1 PC配置建議 1
1.1.2 Ubuntu系統(tǒng)安裝 2
1.1.3 Ubuntu下Android編譯環(huán)境搭建 2
1.1.4 工作目錄設(shè)置 3
1.1.5 源代碼下載 3
1.1.6 整體編譯Android源代碼 4
1.1.7 單個模塊按需編譯 5
1.1.8 編譯生成本地Android SDK 5
1.2 Android常用工具使用及相關(guān)技巧說明 6
1.2.1 啟動Android模擬器 10
1.2.2 Android調(diào)試工具adb的使用方法 10
1.3 WebKit源代碼目錄結(jié)構(gòu) 13
1.4 WebKit代碼調(diào)試 15
1.5 本章小結(jié) 17
第2章 瀏覽器工作原理及WebKit概覽 18
2.1 瀏覽器工作原理概述 18
2.1.1 頁面 19
2.1.2 內(nèi)核 19
2.1.3 外殼 24
2.2 瀏覽器和WebKit簡史 27
2.3 WebKit架構(gòu)概覽 29
2.3.1 整體組成架構(gòu) 30
2.3.2 核心工作流程 34
2.3.3 代碼設(shè)計風(fēng)格 36
2.4 本章小結(jié) 38
第3章 WTF的實(shí)現(xiàn)及使用 39
3.1 WTF庫概述 39
3.2 智能指針 40
3.2.1 OwnPtr的實(shí)現(xiàn)及使用 41
3.2.2 RefPtr的實(shí)現(xiàn)及使用 44
3.2.3 線程安全性 45
3.3 Assert與crash dump 46
3.3.1 Assert的實(shí)現(xiàn)及使用 46
3.3.2 crash dump的實(shí)現(xiàn)及使用 47
3.4 內(nèi)存管理與容器 50
3.4.1 FastAllocator的實(shí)現(xiàn)及使用 50
3.4.2 容器類概述 51
3.5 原子操作 57
3.6 WebKit運(yùn)行時線程結(jié)構(gòu) 57
3.6.1 MessageQueue實(shí)現(xiàn)分析 57
3.6.2 Task傳遞 59
3.6.3 MainThread運(yùn)行原理 60
3.7 本章小結(jié) 61
第4章 Loader與網(wǎng)絡(luò)庫 62
4.1 Loader概述 63
4.2 Loader的設(shè)計與實(shí)現(xiàn)架構(gòu) 63
4.2.1 Loader模塊的設(shè)計 63
4.2.2 Loader中的類結(jié)構(gòu)及作用 65
4.3 MainResourceLoader資源加載流程 67
4.3.1 主資源 67
4.3.2 主資源加載示例 67
4.4 SubResourceLoader資源加載流程 73
4.4.1 派生資源 73
4.4.2 派生資源加載示例 73
4.5 WebKit網(wǎng)絡(luò)庫chrome-net介紹 80
4.5.1 chrome-net實(shí)現(xiàn)結(jié)構(gòu) 80
4.5.2 chrome-net與WebKit的接口 81
4.6 WebKit中的 Cache 81
4.6.1 Memory Cache內(nèi)存緩存 82
4.6.2 Page Cache頁面緩存 84
4.6.3 Disk Cache磁盤緩存 86
4.7 本章小結(jié) 87
第5章 網(wǎng)頁解析 88
5.1 WebKit網(wǎng)頁解析概述 88
5.2 DOM模型簡介 89
5.3 HTML解析過程 90
5.3.1 DOM樹的構(gòu)建 90
5.3.2 Render樹的構(gòu)建 94
5.3.3 RenderLayer樹的構(gòu)建 96
5.4 CSS樣式表處理 97
5.4.1 CSS文檔結(jié)構(gòu) 97
5.4.2 CSS解析過程 99
5.4.3 CSS規(guī)則匹配 100
5.5 JavaScript腳本執(zhí)行 101
5.6 本章小結(jié) 103
第6章 排版布局 104
6.1 CSS盒模型 104
6.2 定位與包含塊 106
6.3 Render類的核心對象 111
6.4 Render樹創(chuàng)建流程代碼分析 121
6.5 Layout流程代碼分析 123
6.5.1 計算大小 123
6.5.2 確定位置 127
6.5.3 簡單例子 130
6.6 繪制流程分析 131
6.7 本章小結(jié) 136
第7章 渲染與硬件加速 137
7.1 Android SurfaceFlinger系統(tǒng)介紹 137
7.2 WebKit 的三棵樹 138
7.3 Android WebKit渲染過程 139
7.3.1 Android WebKit記錄網(wǎng)頁繪制命令過程分析 140
7.3.2 Android WebKit軟件渲染流程分析 145
7.3.3 Android WebKit硬件渲染流程分析 147
7.4 軟件渲染與硬件渲染的優(yōu)缺點(diǎn) 156
7.5 本章小結(jié) 156
第8章 Android WebKit框架 157
8.1 Android系統(tǒng)中的WebKit框架介紹 157
8.1.1 Android Framework介紹 158
8.1.2 Java Native Interface簡介 160
8.1.3 Android WebKit相關(guān)API簡介 161
8.2 Android WebKit框架實(shí)現(xiàn)解析 163
8.2.1 架構(gòu)簡述 164
8.2.2 初始化流程 165
8.2.3 網(wǎng)頁加載流程 167
8.2.4 繪制調(diào)用流程 168
8.3 基于Android WebKit的瀏覽器實(shí)現(xiàn) 169
8.3.1 瀏覽器App的基本功能 169
8.3.2 Android系統(tǒng)瀏覽器實(shí)現(xiàn)解析 170
8.3.3 Android系統(tǒng)WebKit內(nèi)核定制開發(fā) 174
8.4 本章小結(jié) 175
第9章 JavaScript擴(kuò)展接口 176
9.1 V8原理及接口 176
9.1.1 V8設(shè)計元素 176
9.1.2 V8運(yùn)行實(shí)例分析 181
9.1.3 V8 接口及使用 183
9.2 WebKit JavaScript接口 191
9.2.1 V8 binding作用及結(jié)構(gòu) 191
9.2.2 WebKit接口擴(kuò)展 191
9.3 HTML 5擴(kuò)展實(shí)例 196
9.3.1 WebSocket概述 196
9.3.2 WebSocket實(shí)現(xiàn)分析 198
9.4 本章小結(jié) 200
第10章 WebKit的插件系統(tǒng) 201
10.1 NPAPI插件概述 202
10.1.1 瀏覽器插件功能作用 202
10.1.2 NPAPI插件規(guī)范 202
10.2 WebKit的插件系統(tǒng) 204
10.2.1 WebKit插件基礎(chǔ)組件 205
10.2.2 插件加載流程 205
10.2.3 插件與腳本的交互 210
10.3 Android平臺插件開發(fā) 213
10.3.1 新增特有接口 213
10.3.2 插件APK化及參考范例 214
10.4 本章小結(jié) 217
第11章 瀏覽器調(diào)試工具 218
11.1 Inspector概述 218
11.2 WebKit Inspector協(xié)議 219
11.3 Remote Inspector實(shí)現(xiàn)結(jié)構(gòu) 223
11.3.1 協(xié)議信道 224
11.3.2 Inspector后端 225
11.3.3 Inspector前端 229
11.4 JavaScript調(diào)試 233
11.5 本章小結(jié) 235