1. 前言

做了两年Chromium相关的开发,最近项目遇到瓶颈,自己有点迷茫。回顾之前做的工作,发现对chromium的认识还停留在非常表面的水平。因此,一直想对之前做的做个总结,只有总结反思才能提高。

2. 编译环境

Label 推荐配置
系统版本 Ubuntu 18.04 64bit
处理器 x86_64
内存 8GB以上
硬盘 150GB以上空闲磁盘

这里采用Ubuntu编译Linux版本,总体翻译自:https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md 。
如果想编译Windows版本,请自行查阅google文档:https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md 。

此外由于谷歌很多网站国内无法访问,还需自行准备上网工具。

3. 安装工具软件

3.1 git

安装git:

$ sudo apt-get install git

做一下配置:

git config --global user.name "Your Name"
$ git config --global user.email "your-email"
$ git config --global core.autocrlf input
$ git config --global core.filemode false
$ git config --global branch.autosetuprebase always

需要提一下core.autocrlf的配置主要是解决Linux和Windows跨平台协作时文件换行符不统一的问题。它有三种取值:

  • input: git在提交时把CRLF转换成LF,签出时不转换;
  • true: 提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF;
  • false: 提交和签出代码均不会做更改。

在Linux上是建议设成input,windows上设置成true(当然如果你只是开发windows程序,设成false就可以了)。

3.2 python 2.7

sudo apt-get install python

3.3 depot_tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

添加到系统环境,编辑~/.bashrc,添加:

export PATH="$PATH:/path/to/depot_tools"

然后生效配置:source ~/.bashrc

此时你可以使用gclient等命令。

4. 获取chromium源码

首先创建一个chromium目录用于存放代码:

mkdir ~/chromium && cd ~/chromium

运行depot_tools的fetch工具来检出源码及其依赖项:

fetch --nohooks chromium [--no-history]

使用--no-history会让下载的源码不带提交历史信息,是最新的主分支代码,代码量会小很多。不使用该选项会获取完整历史信息的chromium源码。

下载过程可能无法一番风顺,经常出现下载中断的情况,此时请使用:

gclient sync --nohooks

以继续下载。

下载完成之后,进入到代码目录:

cd src

如果你没有使用--no-history参数,那么此时你可以选择切换指定分支,可以参考:https://dev.chromium.org/developers/calendar 找到当前最新的stable分支。以 77.0.3865.90为例:

git fetch --tags
git checkout -b stable_77 tags/77.0.3865.90
gclient sync --with_branch_heads --nohooks --job 16

5. 安装依赖项

如果你是在Ubuntu下进行编译,那么还在编译之前需要安装一些依赖工具,google已经写好了脚本:

build/install-build-deps.sh

6. 运行hooks

hook直译是钩子。在chromium中代码编译是通过gclient来管理的,gclient 的核心功能是将项目中由DEPS文件定义的所有git仓库拉取到指定的目录或者运行指定脚本。为此添加了了hook功能。运行hook也即表示当前代码并不完整,你可能需要的额外的二进制文件或者运行指定脚本。

gclient runhooks

7. 编译

首先需要设置编译选项:

gn args out/Default

这条命令会打开一个文件,我们需要在该文件中加入编译选项:

is_debug = false
symbol_level = 0
enable_nacl = false
remove_webcore_debug_symbols = true#ffmpeg setting
ffmpeg_branding = "Chrome"
proprietary_codecs = true

可以通过gn args out/Default --list来查看具体有哪些编译选项可选。

此外,如果你需要使用google服务,那么你需要在参数中加入你的google api key:

google_api_key = "your_api_key"
google_default_client_id = "your_client_id"
google_default_client_secret = "your_client_secret"

要申请请参考:https://www.chromium.org/developers/how-tos/api-keys 。

设置完编译选项后,就可以开始进行编译:

ninja -C out/Default chrome

时间比较久,不出意外,编译成功后,你就可以运行:

out/Default/chrome

至此,就完成了chromium的编译。由于chromium代码量很大,再加上众所周知的网络原因,检出代码、运行hooks都会非常耗时,最后的编译,如果你的机器配置不是很好,编译会非常久,因此有条件一定要使用固态硬盘,否则你可能会抓狂。

8. 补充:如何编译Linux上运行的chromeos版本

如果想编译chromeos版本,需要向.gclient文件中加入平台信息:

echo target_os=[\"chromeos\"] >> .gclient

然后使用gclient sync更新代码。

最后在编译时,需要加上编译参数:

target_os = "chromeos"

这样编译出来的chrome版本是一个模拟chromeos的版本。

chromium 编译相关推荐

  1. chromium 03 修改chromium 编译版本号

    chromium 版本号定义在 src\chrome\VERSION 中.单纯的修改这里的版本号,一般是不能顺利编译通过的.比如68.0.3440.105要修改为主版本号大于 10的,比如:10.0. ...

  2. chromium编译与支持H264编码支持

    背景android中自带的webview不支持H264解码.但是android chrome支持. 我也试了国内的一些第三方webkit,比如TBS,但是TBS还是有坑,视屏播放的时候就是黑屏.: ( ...

  3. Chromium:编译,运行

    1.执行set GYP_DEFINES=component=shared_library 2.执行gclient runhook 3.编译debug版 ninja -C out\Debug chrom ...

  4. chromium android分析,Chromium Android工程迁移编译过程

    本文从Chromium编译的中间产物入手深入分析.学习Chromium Android版本的工程化定制流程.初始工作依赖于Chromium的ninja.GYP构建系统,在构建完成后基于编译中间产物,迁 ...

  5. Linux Chromium源码编译

    LInux Chromium源码编译 LInux下Chromium采用gn+ninja编译方式.老版的gyp方式已被抛弃,并且在默认情况下(is_clang 标志位为true),会使用clang编译器 ...

  6. 【chromium】win10 VS2019 环境 chromium 配置与编译。

    文章目录 硬件&软件配置 安装 depot_tools get the code 编译 编译加速 基础概念 https://chromium.googlesource.com/chromium ...

  7. 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程

    原文                   http://blog.csdn.net/zhaoxy_thu/article/details/18883015             本文主要对从安卓系统 ...

  8. linux编译谷歌浏览器方法,构建Linux版本的谷歌Chrome浏览器

    Chromium编译说明(Linux版) 此页描述如果在Linux操作系统上编译构建Chromium浏览器.假如你对测试chromium或想移植chromium到别的平台请你继续阅读. 小提示:目前还 ...

  9. Chromium的GPU进程启动过程分析

    Chromium除了有Browser进程和Render进程,还有GPU进程.GPU进程负责Chromium的GPU操作,例如Render进程通过GPU进程离屏渲染网页,Browser进程也是通过GPU ...

最新文章

  1. 现在,Serverless 真的已经成熟了吗?
  2. 在Linux里设置环境变量的方法(export PATH)
  3. Puppy Linux 8.0 发布,代号 BionicPup
  4. 比较有意思的比较内表的小函数
  5. 终于开通了园子里的博客!
  6. Boost Asio总结(16)例子
  7. 【转】采购订单行项目检查增强
  8. ARM中LDR伪指令与LDR加载指令
  9. html radio 作用域,ionic 表单输入 ion-checkbox ion-radio ion-toggle ion-spinner
  10. mysql + IDEA + JDBC
  11. 线框模型_进行计划之前:线框和模型
  12. SQL SERVER类型与C#类型对照
  13. C语言和设计模式(观察者模式)
  14. plsql变量参数化_谁说建模一定要会画图?参数化设计让你事半功倍!
  15. 敏感词库 包含中英文
  16. mac2600r_水星MAC2600R路由器
  17. C++ 关于ShowWindow()的疑问
  18. 接口测试主要做以下3个方面:
  19. 计算机为什么不能装win7,i5 8400 cpu能装win7吗?为什么安装不了win7
  20. linux桌面文件夹改名,Ubuntu 无法重命名文件问题的解决

热门文章

  1. 错失电商风口,国美还能让谁“真快乐”?
  2. 7-2 公路村村通 迪杰斯特拉(dijkstra)算法
  3. 官宣丨全球边缘计算大会参会指南出来啦!
  4. Opencv笔记(十七)——轮廓性质
  5. linux 限速命令,Linux路由器限速设置进程
  6. coding同步更新服务器文件,git 同步本地项目到coding 上
  7. SQL 中的生成列/计算列以及主流数据库实现
  8. 关于spotlight_on_oracle的配置及操作
  9. 心理学|颜色是如何影响我们的情绪的?
  10. 王道数据结构代码——线性表