Chromium源码系列一:Chromium简介及源代码获取和编译

Chromium简介

Chromium是一个由Google主导开发的网页浏览器,以BSD许可证等多重自由版权发行并开放源代码。Chromium的开发早自2006年即开始,设计思想基于简单、高速、稳定、安全等理念,在架构上使用了Apple发展出来的WebKit排版引擎、Safari的部分源代码与Firefox的成果,并采用Google独家开发出的V8引擎以提升解析JavaScript的效率,而且设计了[沙盒]、[黑名单]、[无痕浏览]等功能来实现稳定与安全的网页浏览环境。

​ 在可以查看各个浏览器的市场占有率。

Chromium vs Chrome

ChromiumChrome的差异主要表现在以下方面:

  1. 程序图标:两者图标只在色彩上不同,Chromium是天蓝色,而ChromeGoogle公司的代表色(红、黄、蓝、绿);

    1. 自动更新:Chromium不开放自动更新功能,所以用户需要手动下载更新,而Chrome则可自动脸上Google的服务器更新,但新版的推出很慢;

    2. 安装模式:Chromium可以免安装,下载zip压缩包后解压即可使用,而Chrome则只有安装板;

    3. 功能差异:新功能会率先在Chromium上推出,Chrome则会相对落后很多。

获取Chromium源代码

可以先看一下官方文档中的说明。简单来讲,获取Chromium源代码之前,需要能翻墙,系统需要满足一定的要求,我这里使用的是Mac系统,就按照Mac的要求来做,另外我使用的shadowsocks来访问google。

安装depot_tools

depot_toolsGoogle官方提供的一个用来checkoutcompilerunsubmit的工具集,可以帮助我们更好的学习和调试Chromium代码,因此我们先安装depot_tools

  1. 克隆 depot_tools repository

    gitclone https://chromium.googlesource.com/chromium/tools/depot_tools.git
  2. 添加depot_tools路径到PATH变量

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

    假设你把depot_tools放置在目录path/to/目录下。最好将上述命令添加到~/.bashrx或者~/.zshrc中,然后执行source ~/.bashrx或者source ~/.zshrx

获取代码

  1. 首先确保Unicode文件名不会破坏HFS。执行

gitconfig --globalcore.precomposeUnicode true
  1. 创建chromium目录,切记chromium所在的目录名中没有空格。我在下载depot_tools之前已经创建了chromium目录,并且将depot_toolssrc都放在了chromium目录下。执行

mkdirchromium && cdchromium
gitconfig --globalcore.precomposeUnicode true
  1. 使用depot_tools获取chromium代码。执行

fetch chromium
# or
fetch chromium --no-history# 不下载全部的代码提交历史,推荐使用这个

下载完成后,会有一个.gclient文件,以及源代码目录src,之后的所有操作都在src中执行。

构建工程

Chromium使用NinjaGN作为主要的构建工具。执行

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

在用NinjaGN构建完成之后,执行这条命令需要的时间就比较少了。然后就可以用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简介及源代码获取和编译的更多相关文章

  1. chromium浏览器开发系列第二篇:如何编译最新chromium源码

    说一下为什么这么晚才发第二篇,上周和这周department的工作太多了,晚上都是十点半从公司出发,回家以后实在没有多余的精力去摸键盘了.所以请大家包涵! 上期回顾: chromium源码下载: 1. ...

  2. chromium浏览器开发系列第三篇:chromium源码目录结构

    上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流. 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠 ...

  3. 【转载】chromium浏览器开发系列第一篇:如何获取最新chromium源码

    背景:     最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧.于是乎,本文顺理成章.由于有些细节必需描述清楚,所以这次先讲如何拿到ch ...

  4. Chromium浏览器高级开发系列第一篇:如何获取最新chromium源码

    背景:     最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧.于是乎,本文顺理成章.由于有些细节必需描述清楚,所以这次先讲如何拿到ch ...

  5. 转载:浏览器开发系列第一篇:如何获取最新chromium源码

    背景:     最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧.于是乎,本文顺理成章.由于有些细节必需描述清楚,所以这次先讲如何拿到ch ...

  6. chromium浏览器开发系列第一篇:如何获取最新chromium源码

    背景:      最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧.于是乎,本文顺理成章.由于有些细节必需描述清楚,所以这次先讲如何拿到c ...

  7. Chromium源码--视频播放流程分析(拨开云雾)

    转载请注明出处: http://www.cnblogs.com/fangkm/p/3791964.html 在PC浏览器中播放视频,大部分视频网站都是采用flash播放器,这多亏了Adobe Flas ...

  8. chromium源码阅读--Browser进程初始化

    最近在研读chromium源码,经过一段懵懂期,查阅了官网和网上的技术文章,是时候自己总结一下了,首先IPC message loop开始吧,这是每个主线程必须有的一个IPC消息轮训主体,类似之前的q ...

  9. Chromium源码--网络请求流程分析

    转载请注明出处:http://www.cnblogs.com/fangkm/p/3784660.html 本文探讨一下chromium中加载URL的流程,具体来说是从地址栏输入URL地址到通过URLR ...

随机推荐

  1. PHP命名空间 namespace 及导入 use 的用法

    命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀. 在PHP中,出现 ...

  2. 洛谷P2071 座位安排

    题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛,每排座位只能坐两人,且每个人都有自己想坐的排数,问最 ...

  3. springboot整合redis存放session

    y进入maven依赖: <!--spring boot 与redis应用基本环境配置 --> <dependency> <groupId>org.springfra ...

  4. react 中文文档案例三 (开关按钮)

    开关按钮制作   import React from 'react'; import ReactDOM from 'react-dom'; class Toggle extends React.Com ...

  5. X星球居民小区的楼房全是一样的...

    每周一题之3 [问题描述] X星球居民小区的楼房全是一样的,并且按矩阵样式排列.其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号. 比如:当小区排号宽度为6时,开始情形如下: ...

  6. js 的 一些操作。。。

    // 对错误图片进行处理 $("img").error(function() { $(this).attr("src", "http://127.0. ...

  7. 了解Linux系统

    ++++++++++++++++++++++++++++++++++++++++++++++++++++ 有用的参考链接: 带你初识Linux操作系统:https://www.linuxidc.com ...

  8. P2596 [ZJOI2006]书架(splay)

    [题目链接] https://www.luogu.org/problemnew/show/P2596 平衡树,需支持五个操作: 1. 将某元素置顶:将元素旋到根,然后将左子树合并到该元素的后继 2. ...

  9. Android_靠谱的监听软键盘状态的方法

    public class MyActivity extends AppCompatActivity { /** * 当前界面中的软件盘的状态 */private boolean isKeyBoardO ...

  10. Hibernate JPA 如何使用SQL文直接查询

    对于复杂SQL,可以直接调用native sql来是实现 public List<Partner> findPartners() { List<Partner> partner ...