chromium 源码目录结构

本文介绍了Chromium一级目录(src/)的层次结构,包括主要目录和其他一级目录。其中,android_webview和content目录被Android WebView开发人员接触最多。还分别阐述了各目录的功能,如content支持HTML5和GPU硬件加速,mojo是最新IPC架构等。

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 资源。

 

参考:https://zhuanlan.zhihu.com/p/27895622

### Chromium 源码下载及浏览 #### 下载 Chromium 源码 要下载 Chromium源码,可以按照以下方法操作: 1. **安装 depot_tools 工具集** 需要先安装 Google 提供的 `depot_tools` 脚本集合工具。可以从官方地址克隆该仓库并将其路径添加到系统的 PATH 中[^2]。 2. **创建工作目录并初始化环境** 创建一个新的文件夹用于存储 Chromium 源码,并运行命令来配置开发环境: ```bash mkdir chromiumdev && cd chromiumdev gclient config --spec 'solutions = [{"url": "https://chromium.googlesource.com/chromium/src.git", "managed": False, "name": "src"}]' ``` 3. **同步和获取源码** 使用 `fetch` 命令拉取完整的 Chromium 源码库: ```bash fetch chromium ``` 如果过程中遇到中断或者失败的情况,可以通过执行 `gclient sync` 来重新尝试完成剩余部分[^1]。 4. **生成编译目标** 进入源码目录后,利用 GN (Generate Ninja) 构建系统定义构建参数: ```bash gn gen out/Default ``` #### 浏览 Chromium 源码 对于不希望本地完全下载整个项目但仍想查看其内部实现细节的人群来说,在线资源提供了便利途径: - 可访问 [CSG](https://source.chromium.org/) 平台,这是由谷歌维护的一个代码托管站点,允许开发者无需任何特殊权限即可在线阅读最新版本以及历史提交记录中的任意片段[^3]。 另外值得注意的是,由于 Chromium 是一个庞大的工程,初学者可能需要一些时间去熟悉它的结构布局;通常情况下,“content”子模块包含了核心渲染逻辑而“chrome”则负责具体应用层封装等功能[^4]。 ```python import os print(os.getcwd()) # 当前所在的工作目录应指向已检出的SRC位置以便后续操作正常进行下去。 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值