1.编译chromium
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的更多相关文章
- windows下编译chromium浏览器的15个流程整理
编译chromium 系统为windows, 国内在windows上编译chromium的资料比较少, 我这篇文章只能作为参考, 记录我遇到的一些问题,因为chromium团队也会修改了代码,或者编译 ...
- CEF中文教程(google chrome浏览器控件) -- Windows下编译Chromium
CEF中文教程(google chrome浏览器控件) -- CEF简介 2013-04-10 16:48 42928人阅读 评论(4) 收藏 举报 分类: CEF(2) 目录(?)[+] ...
- 编译Chromium出现warning C4819的解决办法
编译Chromium时出现 warning C4819: The file contains a character that cannot be represented in the current ...
- 如何在windows上编译Chromium (CEF3) 并加入MP3支持(二)
时隔一年,再次编译cef3,独一无二的目的仍为加入mp3支持.新版本的编译环境和注意事项都已经发生了变化,于是再记录一下. 一.编译版本 cef版本号格式为X.YYYY.A.gHHHHHHH X为主版 ...
- 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持
一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...
- Ubuntu下编译Chromium for Android
转自:http://blog.csdn.net/fsz521/article/details/18036835 下源码git clone https://chromium.googlesource.c ...
- VS2017 编译 chromium和webrtc
Chromium的编译和WebRTC的编译方式相同,WebRTC官网也是使用的Chromium的编译文档. 步骤一.跳 - 墙,先跳 - 墙这是第一步哟,chromium大概有10几个G,webrtc ...
- 记录windows下编译chromium,备忘
编译windows下chromium,时间:20170619, 官方地址:https://chromium.googlesource.com/chromium/src/+/master/docs/wi ...
- 编译chromium时下载gn.exe时出错的解决方案
天朝人写个代码真难,想要编译一下chromium,但是获取代码时各种坑,不是网速慢,就是网络联不通,真难玩. 本文针对下载gn.exe等工具时失败的解决方案. 原因1:gclient没有走代理,针对使 ...
随机推荐
- jmeter判断请求响应时间,请求下加‘断言持续时间’,添加监听器断言结果;统计超时
- c# WF 第1节 创建winform程序
本节内容: 1:vs的RAD 2:WinForm的创建简介 3:创建窗口与控制台程序文件的对比 4:窗口文件内容 5:winform怎么运行 6:winform的实质 1:vs的RAD 2:WinFo ...
- win10,anconda, python3.6安装dlib19.17
目的和经验: 几个月前在笔记本上安过一次,按着教程用cmake编译其实也蛮简单的,不过当初忘了收藏了.现在换了台机子需要重新安装一遍,奈何之前的帖子找不到了. pypi 网站上有19.8.whl,如果 ...
- xargs 用法理解
原来一直不理解,linux shell下 xargs和 管道的区别: 1.管道在linux shell用得比较广泛,管道常常用来组合两个及以上的命令,共同完成一个功能: 比如:我们要统计某一个文件有多 ...
- SQL Server 删除数据库
1. 图形化界面删除 在所需要删除的数据库上右击,然后删除.注意如果这个数据库有应用或者用户连接,请勾选[关闭现有连接],否则无法删除. 2. DROP DATABASE删除数据库 drop data ...
- hdu 6495 dp
http://acm.hdu.edu.cn/showproblem.php?pid=6495 题意 有n个挑战(1e3),假如接受,在挑战之前体力x会变成min(x,\(b[i]\)),然后会减去a[ ...
- 第01组 Beta版本演示
目录 1.1 本组成员 1.2 工作流程.组员分工.组员工作量比例 1.3 GitHub 项目链接 1.4 本组 Beta 冲刺站立会议博客链接汇总 1.5 燃尽图 1.6 原计划.达成情况及原因分析 ...
- 消息队列的使用<二>:ActiveMQ的基本使用(Java)
目录 ActiveMQ 介绍 下载.安装和初次运行 Java上初次使用activeMQ 设置请求属性: 可靠性机制 事务 消息消费方式 receive 监听器: 消息类型 发布/订阅模式 非持久订阅 ...
- dedecms5.7文章页的标签随机插入到内容中并且标签的地址为其标签关联的其他文章地址
dedecms5.7文章页的标签随机插入到内容中并且标签的地址为其他标签关联的文章地址 1 添加2个自定义函数 在dede/include/extend.func.php底部 添加如下代码 //根据文 ...
- 三维网格细分算法(Catmull-Clark subdivision & Loop subdivision)附源码(转载)
转载: https://www.cnblogs.com/shushen/p/5251070.html 下图描述了细分的基本思想,每次细分都是在每条边上插入一个新的顶点,可以看到随着细分次数的增加,折 ...