本书是Android经典畅销书系“深入理解Android”系列的第6部,由前百度移动移动浏览器业务部的几位专门从事Android系统和WebKit研究的资深工程师撰写。它继承了该系列图书的总体思想,以Android源代码为依托,以WebKit处理数据的流程和它的功能模块依据,对WebKit的工作机制和实现原理进行了深度的剖析,应该是目前对Android系统下WebKit讲解最透彻的著作。当然,它对所有研究浏览器和WebKit内核的工程师们有同样的帮助。
全书共11章,主体部分按浏览器处理数据的流程来组织:
第1章是准备工作,介绍了Android全源码开发环境的搭建、调试工具的应用,以及WebKit源代码的结构。
第2章讲解了浏览器工作原理、WebKit的整体架构与设计,以及与它与主流浏览器引擎的比较。
第3章讲解了WebKit的WTF库,包括智能指针、Assertion、内存管理与容器、线程封装、Webkit运行时线程结构。
第4章讲解了WebKit的Loader与网络库,包括Loader的设计与实现架构、资源加载流程、MainResourceLoader和SubResourceLoader、Chrome-net网络库,以及Web Cache。
第5章讲解了网页解析,包括HTML语法解析、网页处理一般过程、CSS样式处理、JS脚本执行等内容。
第6章讲解了排版布局,包括CSS框模型、布局计算,以及render相关的核心类。
第7章讲解了渲染和硬件加速,包括软件绘制流程、软件合成、硬件加速合成等。
第8章讲解了Android WebKit框架,包括WebKit Java层核心类与主要接口和WebKit框架实现源码,并基于WebKit的浏览器做了范例实现
第9章讲解了JavaScript扩展接口,包括V8原理及接口、WebKit JavaScript接口, 并做了HTMLElement binding实例分析和HTML5扩展分析
第10章讲解了WebKit的插件系统,包括NPAPI插件接口详解、WebKit的插件实现、Android平台插件开发等。
第11章讲解了Remote Inspector,包括Remote Inspector实现架构、Remote Inspector协议、Inspector 代码分析、BackEnd代码分析、FrontEnd代码分析等
除此之外,在对海量的Android源代码进行分析的过程中,本书尽可能地对其中的精妙之处进行了分析和解读,目的是希望帮助读者领悟其中的优秀设计思想和方法。
目录
序
前 言
第1章 搭建源代码编译环境 1
1.1 Android全源码开发环境 1
1.1.1 PC配置建议 1
1.1.2 Ubuntu系统安装 2
1.1.3 Ubuntu下Android编译环境搭建 2
1.1.4 工作目录设置 3
1.1.5 源代码下载 3
1.1.6 整体编译Android源代码 4
1.1.7 单个模块按需编译 5
1.1.8 编译生成本地Android SDK 5
1.2 Android常用工具应用及相关技巧说明 6
1.2.1 启动Android模拟器 10
1.2.2 Android调试工具adb的应用方法 10
1.3 WebKit源代码目录结构 13
1.4 WebKit代码调试 15
1.5 本章小结 17
第2章 浏览器工作原理及WebKit概览 18
2.1 浏览器工作原理概述 18
2.1.1 页面 19
2.1.2 内核 19
2.1.3 外壳 24
2.2 浏览器和WebKit简史 27
2.3 WebKit架构概览 29
2.3.1 整体组成架构 30
2.3.2 核心工作流程 34
2.3.3 代码设计风格 36
2.4 本章小结 38
第3章 WTF的实现及应用 39
3.1 WTF库概述 39
3.2 智能指针 40
3.2.1 OwnPtr的实现及应用 41
3.2.2 RefPtr的实现及应用 44
3.2.3 线程安全性 45
3.3 Assert与crash dump 46
3.3.1 Assert的实现及应用 46
3.3.2 crash dump的实现及应用 47
3.4 内存管理与容器 50
3.4.1 FastAllocator的实现及应用 50
3.4.2 容器类概述 51
3.5 原子操作 57
3.6 WebKit运行时线程结构 57
3.6.1 MessageQueue实现分析 57
3.6.2 Task传递 59
3.6.3 MainThread运行原理 60
3.7 本章小结 61
第4章 Loader与网络库 62
4.1 Loader概述 63
4.2 Loader的设计与实现架构 63
4.2.1 Loader模块的设计 63
4.2.2 Loader中的类结构及作用 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网络库chrome-net介绍 80
4.5.1 chrome-net实现结构 80
4.5.2 chrome-net与WebKit的接口 81
4.6 WebKit中的 Cache 81
4.6.1 Memory Cache内存缓存 82
4.6.2 Page Cache页面缓存 84
4.6.3 Disk Cache磁盘缓存 86
4.7 本章小结 87
第5章 网页解析 88
5.1 WebKit网页解析概述 88
5.2 DOM模型简介 89
5.3 HTML解析过程 90
5.3.1 DOM树的构建 90
5.3.2 Render树的构建 94
5.3.3 RenderLayer树的构建 96
5.4 CSS样式表处理 97
5.4.1 CSS文档结构 97
5.4.2 CSS解析过程 99
5.4.3 CSS规则匹配 100
5.5 JavaScript脚本执行 101
5.6 本章小结 103
第6章 排版布局 104
6.1 CSS盒模型 104
6.2 定位与包含块 106
6.3 Render类的核心对象 111
6.4 Render树创建流程代码分析 121
6.5 Layout流程代码分析 123
6.5.1 计算大小 123
6.5.2 确定位置 127
6.5.3 简单例子 130
6.6 绘制流程分析 131
6.7 本章小结 136
第7章 渲染与硬件加速 137
7.1 Android SurfaceFlinger系统介绍 137
7.2 WebKit 的三棵树 138
7.3 Android WebKit渲染过程 139
7.3.1 Android WebKit记录网页绘制命令过程分析 140
7.3.2 Android WebKit软件渲染流程分析 145
7.3.3 Android WebKit硬件渲染流程分析 147
7.4 软件渲染与硬件渲染的优缺点 156
7.5 本章小结 156
第8章 Android WebKit框架 157
8.1 Android系统中的WebKit框架介绍 157
8.1.1 Android Framework介绍 158
8.1.2 Java Native Interface简介 160
8.1.3 Android WebKit相关API简介 161
8.2 Android WebKit框架实现解析 163
8.2.1 架构简述 164
8.2.2 初始化流程 165
8.2.3 网页加载流程 167
8.2.4 绘制调用流程 168
8.3 基于Android WebKit的浏览器实现 169
8.3.1 浏览器App的基本功能 169
8.3.2 Android系统浏览器实现解析 170
8.3.3 Android系统WebKit内核定制开发 174
8.4 本章小结 175
第9章 JavaScript扩展接口 176
9.1 V8原理及接口 176
9.1.1 V8设计元素 176
9.1.2 V8运行实例分析 181
9.1.3 V8 接口及应用 183
9.2 WebKit JavaScript接口 191
9.2.1 V8 binding作用及结构 191
9.2.2 WebKit接口扩展 191
9.3 HTML 5扩展实例 196
9.3.1 WebSocket概述 196
9.3.2 WebSocket实现分析 198
9.4 本章小结 200
第10章 WebKit的插件系统 201
10.1 NPAPI插件概述 202
10.1.1 浏览器插件功能作用 202
10.1.2 NPAPI插件规范 202
10.2 WebKit的插件系统 204
10.2.1 WebKit插件基础组件 205
10.2.2 插件加载流程 205
10.2.3 插件与脚本的交互 210
10.3 Android平台插件开发 213
10.3.1 新增特有接口 213
10.3.2 插件APK化及参考范例 214
10.4 本章小结 217
第11章 浏览器调试工具 218
11.1 Inspector概述 218
11.2 WebKit Inspector协议 219
11.3 Remote Inspector实现结构 223
11.3.1 协议信道 224
11.3.2 Inspector后端 225
11.3.3 Inspector前端 229
11.4 JavaScript调试 233
11.5 本章小结 235
下载体验