Chromium源码系列一:Chromium简介及源代码获取和编译
Chromium源码系列一:Chromium简介及源代码获取和编译
Chromium简介
Chromium是一个由Google主导开发的网页浏览器,以BSD许可证等多重自由版权发行并开放源代码。Chromium的开发早自2006年即开始,设计思想基于简单、高速、稳定、安全等理念,在架构上使用了Apple发展出来的WebKit排版引擎、Safari的部分源代码与Firefox的成果,并采用Google独家开发出的V8引擎以提升解析JavaScript的效率,而且设计了[沙盒]、[黑名单]、[无痕浏览]等功能来实现稳定与安全的网页浏览环境。
在此可以查看各个浏览器的市场占有率。
Chromium vs Chrome
Chromium与Chrome的差异主要表现在以下方面:
程序图标:两者图标只在色彩上不同,
Chromium是天蓝色,而Chrome是Google公司的代表色(红、黄、蓝、绿);



自动更新:
Chromium不开放自动更新功能,所以用户需要手动下载更新,而Chrome则可自动脸上Google的服务器更新,但新版的推出很慢;安装模式:
Chromium可以免安装,下载zip压缩包后解压即可使用,而Chrome则只有安装板;功能差异:新功能会率先在
Chromium上推出,Chrome则会相对落后很多。
获取Chromium源代码
可以先看一下官方文档中的说明。简单来讲,获取Chromium源代码之前,需要能翻墙,系统需要满足一定的要求,我这里使用的是Mac系统,就按照Mac的要求来做,另外我使用的shadowsocks来访问google。
安装depot_tools
depot_tools是Google官方提供的一个用来checkout、compile、run和submit的工具集,可以帮助我们更好的学习和调试Chromium代码,因此我们先安装depot_tools。
克隆
depot_tools repositorygitclone https://chromium.googlesource.com/chromium/tools/depot_tools.git
添加
depot_tools路径到PATH变量exportPATH="$PATH:/path/to/depot_tools"
假设你把
depot_tools放置在目录path/to/目录下。最好将上述命令添加到~/.bashrx或者~/.zshrc中,然后执行source ~/.bashrx或者source ~/.zshrx。
获取代码
首先确保
Unicode文件名不会破坏HFS。执行
gitconfig --globalcore.precomposeUnicode true
创建
chromium目录,切记chromium所在的目录名中没有空格。我在下载depot_tools之前已经创建了chromium目录,并且将depot_tools和src都放在了chromium目录下。执行
mkdirchromium && cdchromium
gitconfig --globalcore.precomposeUnicode true
使用
depot_tools获取chromium代码。执行
fetch chromium
# or
fetch chromium --no-history# 不下载全部的代码提交历史,推荐使用这个
下载完成后,会有一个.gclient文件,以及源代码目录src,之后的所有操作都在src中执行。
构建工程
Chromium使用Ninja和GN作为主要的构建工具。执行
gn gen out/Default
其中out/是在src目录下,Default可以是别的名字,但是一定要在out目录下。
构建Chromium
使用Ninja来构建Chromium程序。执行
ninja -C out/Default chrome
执行这条命令需要挺长时间,我跑了十多个小时才完成build,不过好的一点是,即使中途中断了,再重启也可以在之前的基础上使用gclient sync命令继续构建。完成之后就可以在out/Default目录中看到Chromium浏览器的应用程序了。

使用Xcode来构建Chromium
我们要使用Xcode来阅读和调试Chromium代码,因此我们需要执行
gn gen out/gn --ide=xcode
在用Ninja和GN构建完成之后,执行这条命令需要的时间就比较少了。然后就可以用Xcode来打开这个工程了。执行
open out/gn/ninja/all.xcworkspace
下面是用Xcode打开工程后的代码结构。

至此,我们就在本地构建好了Chromium的源代码,可以开始Chromium源代码的阅读之旅了。
原文地址:http://wangjinlong.xyz/2018/08/23/Chromium1/
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3g8pxr15j54w4
Chromium源码系列一:Chromium简介及源代码获取和编译的更多相关文章
- chromium浏览器开发系列第二篇:如何编译最新chromium源码
说一下为什么这么晚才发第二篇,上周和这周department的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了.所以请大家包涵! 上期回顾: chromium源码下载: 1. ...
- chromium浏览器开发系列第三篇:chromium源码目录结构
上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流. 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠 ...
- 【转载】chromium浏览器开发系列第一篇:如何获取最新chromium源码
背景: 最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧.于是乎,本文顺理成章.由于有些细节必需描述清楚,所以这次先讲如何拿到ch ...
- Chromium浏览器高级开发系列第一篇:如何获取最新chromium源码
背景: 最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧.于是乎,本文顺理成章.由于有些细节必需描述清楚,所以这次先讲如何拿到ch ...
- 转载:浏览器开发系列第一篇:如何获取最新chromium源码
背景: 最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧.于是乎,本文顺理成章.由于有些细节必需描述清楚,所以这次先讲如何拿到ch ...
- chromium浏览器开发系列第一篇:如何获取最新chromium源码
背景: 最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧.于是乎,本文顺理成章.由于有些细节必需描述清楚,所以这次先讲如何拿到c ...
- Chromium源码--视频播放流程分析(拨开云雾)
转载请注明出处: http://www.cnblogs.com/fangkm/p/3791964.html 在PC浏览器中播放视频,大部分视频网站都是采用flash播放器,这多亏了Adobe Flas ...
- chromium源码阅读--Browser进程初始化
最近在研读chromium源码,经过一段懵懂期,查阅了官网和网上的技术文章,是时候自己总结一下了,首先IPC message loop开始吧,这是每个主线程必须有的一个IPC消息轮训主体,类似之前的q ...
- Chromium源码--网络请求流程分析
转载请注明出处:http://www.cnblogs.com/fangkm/p/3784660.html 本文探讨一下chromium中加载URL的流程,具体来说是从地址栏输入URL地址到通过URLR ...
随机推荐
- idea配置maven和gradle,阿里云镜像私服
安装Gradle 从官方网站下载安装包,解压到目录 设置环境变量 PATH=D:\gradle\gradle-3.4.1\bin GRADLE_HOME=D:\gradle\gradle-3.4.1 ...
- 树莓派编译安装 FFmpeg(添加 H.264 硬件编解码器支持)
说明 FFmpeg 是一套开源的音视频编解码库,有非常强大的功能,包括视频采集功能.视频格式转换等.众所周知视频编解码是一个非常消耗系统资源的过程,而树莓派自带了 H.264 的硬件编解码器,因此本文 ...
- eclipse 自定义 文档
在这里写....
- Linq 查询内建议不要使用运算语句!
比如list有2个值,当你运行完上述代码后,你会发现,你的ls中的Num没有按你预期的那样从0开始,导致这个问题的原因是:在你查询完毕后,执行的Count()方法,会导致查询语句中Num=num++再 ...
- 处女座和小姐姐(三)(数位dp)
链接:https://ac.nowcoder.com/acm/contest/329/G 来源:牛客网 题目描述 经过了选号和漫长的等待,处女座终于拿到了给小姐姐定制的手环,小姐姐看到以后直呼666! ...
- Impala与Hive的优缺点和异同
定位: HIVE:长时间的批处理查询分析 impala:实时交互式SQL查询 impala优缺点优点: 1. 生成执行计划树,不用多次启动job造成多余开销,并且减少中间结果数据写入磁盘,执行速度快 ...
- 9 Strings
1 Strings 1.1 Strings and GStrings Groovy允许你使用2种不同类型的字符串类型,分别是java.lang.String和groovy.lang.GS ...
- 转 python3中SQLLIT编码与解码之Unicode与bytes
#########sample########## sqlite3.OperationalError: Could not decode to UTF-8 column 'logtype' with ...
- Web 2.0 浏览器端可靠性测试第2部分(如何发现和分析 Web 2.0 浏览器端的内存泄漏)
介绍浏览器端的可靠性测试 在上一编文章中我们介绍了浏览器端可靠性测试的概念.测试方法.以及常用的测试和分析工具.我们知道,浏览器端可靠性测试,就是以浏览器为测试平台,通过模拟用户在真实场景下的页面操作 ...
- tcp/ip 性能优化问题的思考学习
首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在 ...

