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的版本。

1.编译chromium的更多相关文章

  1. windows下编译chromium浏览器的15个流程整理

    编译chromium 系统为windows, 国内在windows上编译chromium的资料比较少, 我这篇文章只能作为参考, 记录我遇到的一些问题,因为chromium团队也会修改了代码,或者编译 ...

  2. CEF中文教程(google chrome浏览器控件) -- Windows下编译Chromium

    CEF中文教程(google chrome浏览器控件) -- CEF简介 2013-04-10 16:48 42928人阅读 评论(4) 收藏 举报  分类: CEF(2)    目录(?)[+]   ...

  3. 编译Chromium出现warning C4819的解决办法

    编译Chromium时出现 warning C4819: The file contains a character that cannot be represented in the current ...

  4. 如何在windows上编译Chromium (CEF3) 并加入MP3支持(二)

    时隔一年,再次编译cef3,独一无二的目的仍为加入mp3支持.新版本的编译环境和注意事项都已经发生了变化,于是再记录一下. 一.编译版本 cef版本号格式为X.YYYY.A.gHHHHHHH X为主版 ...

  5. 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持

    一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...

  6. Ubuntu下编译Chromium for Android

    转自:http://blog.csdn.net/fsz521/article/details/18036835 下源码git clone https://chromium.googlesource.c ...

  7. VS2017 编译 chromium和webrtc

    Chromium的编译和WebRTC的编译方式相同,WebRTC官网也是使用的Chromium的编译文档. 步骤一.跳 - 墙,先跳 - 墙这是第一步哟,chromium大概有10几个G,webrtc ...

  8. 记录windows下编译chromium,备忘

    编译windows下chromium,时间:20170619, 官方地址:https://chromium.googlesource.com/chromium/src/+/master/docs/wi ...

  9. 编译chromium时下载gn.exe时出错的解决方案

    天朝人写个代码真难,想要编译一下chromium,但是获取代码时各种坑,不是网速慢,就是网络联不通,真难玩. 本文针对下载gn.exe等工具时失败的解决方案. 原因1:gclient没有走代理,针对使 ...

随机推荐

  1. Springboot项目启动不了。也不打印任何日志信息。

    Springboot项目启动不了.也不打印任何日志信息. <!-- 在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-sta ...

  2. Shiro内置过滤器

    Shiro内置过滤器 DefaultFilter 枚举类定义了shiro所有的默认过滤器. package org.apache.shiro.web.filter.mgt; public enum D ...

  3. 关于SPFA算法的优化方式

    关于SPFA算法的优化方式 这篇随笔讲解信息学奥林匹克竞赛中图论部分的求最短路算法SPFA的两种优化方式.学习这两种优化算法需要有SPFA朴素算法的学习经验.在本随笔中SPFA朴素算法的相关知识将不予 ...

  4. java使用poi(XSSFWorkbook)读取excel(.xlsx)文件

    经过一番搜索发现,java操纵excel文件常用的有jxl和poi两种方式,孰好孰坏看自己需求而定.其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx这里介绍的使用poi方式(XSSF ...

  5. SQL Server 迁移数据库 (三)使用SQL脚本

    1. 创建脚本 1.1 在需要迁移的数据库上右击>Tasks>Generate Scrips 1.2 前两步直接Next,第三步我这里选择Save to Clipboard,因为如果选Sa ...

  6. 【CodeChef】August Challenge 2019 Div2 解题报告

    点此进入比赛 \(T1\):Football(点此看题面) 大致题意: 求\(max(20a_i-10b_i,0)\). 送分题不解释. #include<bits/stdc++.h> # ...

  7. Angular命令和基础操作

    本文档假设你已经熟悉了 HTML,CSS,JavaScript和来自最新标准的一些知识,比如类和模块. 一.Angular命令 命令语法: 大多数命令以及少量选项,会有别名.别名会显示在每个命令的语法 ...

  8. 手把手教你使用gogs搭建git私有仓库

    本来想在 Github 上建一个私仓,但是发现只能设置 3 个贡献者. 国内的码云也只能设置 5 个. 无意间看到了使用 gogs 可以搭建私服,正好手头有空闲的服务器,于是开干! https://g ...

  9. 获取Kafka每个分区最新Offset的几种方法

    目录 脚本方法 Java 程序 参考资料 脚本方法 ./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhos ...

  10. D3力布图绘制--节点跑掉,单曲线弯曲问题记录

    D3力布图绘制中遇到的交互问题,频繁操作数据后,会出现节点跑掉和单曲线弯曲的问题 问题描述 在id指向都正常的情况下出现以下2种状况: 单曲线弯曲 节点跑掉 经排查,是数据重复导致的问题 线条也是一样 ...