Chromium 一级目录(src/)的层次结构如下图所示:
一级目录中,android_webview 和 content 两个目录被 Android WebView 开发人员接触最多。
webview主要用在android中,它对 Chromium Content 进行封装,对外提供一个封装好的 Android View - WebView 供第三方应用使用。
Content 从诞生以来一个重要的目标就是要支持所有的HTML5功能和GPU硬件加速功能,这可以让它的使用者们不需要很多的工作即可以得到好的HTML5支持和硬件加速机制。同时,借助于现有的多进程架构,一些chromium中的新功能例如沙箱模型等也在其中得到了支持。
主要目录
- android_webview,Android WebView 实现,封装 Content 层以集成进 Android 平台。android 重要的支持。
- base,通用代码,基础组件,包含字符串、文件、线程、消息队列等工具类集合。
- cc,Chromium compositor 的缩写,负责渲染合成。
- chrome,Chromium 浏览器实现。
- components,提供最顶层(Android WebView 或 Chrome)选配使用的 Content 组件。
- content,多进程沙盒浏览器的核心代码,管理进程架构和线程架构。
- gin,V8 的轻量绑定系统。
- gpu,OpenGL 封装代码,包含 CommandBuffer 和 OpenGL 兼容性支持等。
- net,网络栈实现。
- ipc,进程间消息通信实现。
- media,多媒体封装代码,包含了媒体内容捕获和播放的组件集合。
- mojo,类似于 Android 的 AIDL,提供了跨语言(C++ / Java / JavaScript)跨平台的进程间对象(Object)通信机制;对比 ipc ,后者提供的是单语言(C++)的进程间消息(Message)通信机制。这是chromium最新设计的IPC架构,会逐渐替换掉老的IPC。
- out,编译时创建的目录,用于存放生成产物。
- skia,Android skia 图形库,这里存放的是 Chromium 对 skia 的 配置和扩展代码,另有 third_party/skia 目录存放原生的 skia 代码。
- third_party/WebKit,网页排版引擎。third_party下还有其他很多组件如webrtc,tcmalloc
- ui,UI 框架。
- url,GURL,Google 的开源 URL 解析和规范化库。
- v8,V8 JavaScript 引擎库。
其他一级目录
- apps,Chrome Apps 框架。
- ash,Aura Shell 的缩写,实现 Chrome OS 的窗口管理和系统 UI。
- blink,LayoutTests 脚本。
- breakpad,开源的多平台异常上报系统。
- build,编译脚本和配置文件。
- build_overrides,用于不同的产品自定义设置选项。
- buildtools,编译工具。
- chromecast,Google 的一款数字电视棒,运行精简的 Chrome OS 操作系统。
- chrome_elf,Chrome Early Loading Framework 的缩写,Chrome 浏览器启动早期执行代码的框架。
- chromeos,Google 开发的基于 PC 的操作系统.
- cloud_print,Google 云打印。
- courgette,增量升级系统。
- crypto,加密算法。
- dbus,进程间通信及远程过程调用机制。
- device,外接设备封装代码。
- docs,项目文档。
- extensions,Chrome Extensions 框架。
- google_apis,Google API 封装代码。
- google_update,存放生成 Windows 下 Google Update 的 IDL 的文件。
- headless,用于服务器环境下运行 Chromium 。
- infra,Chromium 开发用到的服务器和工具等基础设施相关的脚本。
- ios,Chrome for iOS 相关代码。
- jingle,P2P 通信库,这里存放的是 Chromium 对 libjingle 的胶水层代码,另有 third_party/libjingle_xmpp 目录存放原生的 libjingle 代码。
- mash,mus + ash,mus 是 mojo UI service 的缩写。
- native_client,缩写为 NaCl,Chrome Native 插件框架。
- native_client_sdk,Nacl 的 sdk。
- pdf,PDF 插件代码。
- ppapi,在沙盒中运行插件的框架。
- printing,打印。
- remoting,Chrome 远程桌面。
- rlz,Google 用来追踪产品市场推广活动以及分发活动效果的一个组件。
- sandbox,沙盒机制。
- sdch,网络模块 SDCH 压缩算法的配置目录,另有 net/sdch 目录存放 SDCH 算法的实际代码。
- services,Chrome Foundation Services,如果将 Chrome 理解成一个轻量的 OS,该目录就是提供基础的系统服务的层。
- sql,SQLite 封装代码。
- storage,Chrome’s Blob Storage 系统。
- styleguide,代码风格指引。
- testing,测试框架。
- third_party,第三方库。
- tools,工具。
content
- app,进程入口和启动时的基本逻辑。
- browser,运行在主进程,负责处理 I/O 消息以及与子进程通信。
- child,运行在子进程的通用逻辑。
- common,多进程共享的数据类型。
- gpu,运行在 GPU 进程,CommandBuffer 的服务端,负责实际执行 GL 命令。
- ppapi_plugin,运行在插件进程的逻辑。
- public,定义和导出抽象接口给上一层(Android WebView 或 Chrome)访问。
- renderer,运行在 Renderer 进程,嵌入 WebKit。
- shell,Content Shell 实现。
- test,测试代码。
- utility,运行在 Utility 进程,操作不信任数据。
android_webview
- apk,Android WebView Apk 的资源和代码文件。
- browser,Content 模块主进程封装、回调以及扩展代码
- common,Browser 端与 Renderer 端共享的数据类型。
- glue,Android WebView 系统接口的胶水层实现代码。
- gpu,Content 模块 GPU 进程封装、回调以及扩展代码。
- java,Android WebView 调用 Chromium 代码的顶级入口,封装 Content 层代码。
- javatests,Java 类的单元测试代码。
- lib,so 入口以及启动时的扩展逻辑。
- public,定义和导出抽象的 Native 接口给 Android WebView 的渲染管线使用。
- renderer,Content 模块 Renderer 进程封装、回调以及扩展代码。
- test,Android WebView 的测试代码
- ui,字符串和 UI 资源。