目前,chromium的源代码已经全部迁移到了git管理,所以本文主要梳理一下下载chromium源代码的过程。

一、概况

chromium现在分为四个大分支:

  • canary:最前沿的版本,每天都发布,bug一堆,不适合新人
  • dev:每两个星期发布,比较稳定,可以体验新功能和新特性
  • deta:每周小版本更新,六周大版本更新。比dev稳定,比同期dev版小1个版本号,基本上是stable的待发版本
  • stable:比同期dev小2个版本号,两到三周次版本更新一次,每六周主版本更新。这是正式的发布版本,推荐用这个来学习,特别是新人

二、下载chromium源代码

1.浏览器翻墙下载并设置depot_tools

chromium源代码的构建工具集的管理是通过depot_tools来管理的,所以首先要下载一个depot_tools。这个工具是在chromium的官网上的,可能需要科学上网才能够下载,具体的下载地址:depot_tools。直接下载对应的系统的版本,windows的直接下载一个压缩包。
下载完成后,将depot_tools.zip解压,把depot_tools目录路径添加到系统的PATH环境变量开始处;如PATH=c:\depot_tools;.......

要把depot_tools的目录放大path的前面。如果加在path路径后面,要确保你path内部没有git,python等路径

2.为dos的cmd.exe设置代理

depot_tools工具下载设置完成后,就可以利用depot_tools中的脚本去下载一些必要的工具,比如git、svn、Python等工具,同时也会更新depot_tools中的数据。这些脚本的执行都是在cmd中完成的,并需要连接网络来下载数据,这时就要为cmd设置网络代理。具体的方法如下所示:

  1. 首先必须找到一个可用的高速http/https/socks5的代理服务器

  2. 为cmd设置http/https/socks5代理。打开一个具有管理员权限的cmd(非常重要),在其中输入:

    x:>netsh
    netsh>winhttp
    netsh winhttp>
    netsh winhttp>
    netsh winhttp>set proxy http.proxy.com:12345

    其中http.proxy.com:12345为你的代理的IP地址和端口号。
    设置完成后,退出该cmd就可以了。该设置使固化在系统红的,重新启动之后,该设置依然有效。

  3. 启动一个新的cmd,执行命令x:>gclient,这时就能够利用设置好的cmd代理下载git、svn、python等工具并更新depot_tools。

  4. 等上面的步骤执行结束后,再次执行x:>gclient,一般这里的执行结果会失败。即使再次成功了,也没有关系,继续往下设置。

    之所以说这里可能失败,是因为第一次执行gclient只要是更新depot_tools、下载git等工具;第二次执行gclient就要通过git工具下载一些东西了,但是这时git并没有设置代理。如果git下载不能翻墙,那么就会报错。

3.为git设置代理

在第二次运行gclient命令前,我们要为git设置好代理。git支持git、http/https、ssh等协议,在这里我们只需要设置最简单的http/https协议就行了。假设代理服务器的地址为:http://http.proxy.com:12345,http://https.proxy.com:2345,scoks5://scoks.proxy.com:3456,设置方法如下:

  1. 先设置CMD环境变量,在CMD中输入:

    x:>set http_proxy=http://http.proxy.com:12345
    x:>set https_proxy=http://https.proxy.com:23456
    x:>set socks5_proxy=socks5://https.proxy.com:23456
  2. 为git设置代理
    a)使用http/https代理服务器

    x:>git config --global http.proxy %http_proxy%
    x:>git config --global https.proxy %https_proxy%

    或者:b)使用socks5代理服务器

    x:>git config --global http.proxy %socks5_proxy%
    x:>git config --global https.proxy %socks5_proxy%
  3. 验证git代理
    设置完后,用下面命令看是否成功:

    x:>git config --get http.proxy
    x:>git config --get https.proxy
  4. 再次执行gclient命令
    这时git的代理就设置好了,再次运行gclient命令,就会利用git通过设置的代理下载一些数据。这样gclient命令就能够正确的执行完毕。
    成功后可以运行一次gclient –version看看版本号,并注意一下有没有错误提示:

    x:>gclient --version
  5. 配置git的用户名和邮箱

    x:>git config --global user.name "yourname"                         #yourname改为你希望的用户名
    x:>git config --global user.email "youremailaddress@gmail.com"      #输入你自己的邮箱
    x:>git config --global core.autocrlf false
    x:>git config --global core.filemode false

4.开始同步chromium源代码并编译

环境设置完毕,下面就开始同步源代码:

  1. 建立一个目录用于下载chromium代码,比如D:\chromium,在此目录中在建立一个目录master;D:\chromium\master就是我们将要签出代码的主目录。

  2. 进入该目录,通过下面的命令,产生.gclient文件:

    gclient config https://chromium.googlesource.com/chromium/src.git
  3. 设置环境变量

    set GYP_MSVS_VERSION=2013
    set GYP_GENERATORS=ninja
    set DEPOT_TOOLS_WIN_TOOLCHAIN=0
    // 如果要编译release版本则是 set GYP_DEFINES=branding=Chromium buildtype=Official
    //这里使用的是windows kit 10,后面说为什么。
    set GYP_DEFINES=windows_sdk_path="C:\Program Files (x86)\Windows Kits\10" component=shared_library disable_nacl=1 enable_automation=0 enable_captive_portal_detection=0 enable_google_now=0 enable_hidpi=0 fastbuild=1 ffmpeg_branding=Chrome incremental_chrome_dll=0 proprietary_codecs=1 remoting=0

    提示:环境变量set GYP_MSVS_VERSION原来是2015,但是用了一个月过期了,再次使用它编译出现一些问题,所以还是用2013版本的。

  4. 在当前窗口运行,运行如下内容耐性等待,看网络条件2–40小时:

    gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"

    如果发生错误,注释掉depot_tools\python276_bin\Lib\mimetypes.py文件的248–251行内容:

    # try:
    # ctype = ctype.encode(default_encoding) # omit in 3.x!
    # except UnicodeEncodeError:
    # pass

  5. 再次运行下面的命令:

    gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"
  6. 执行完成后进入src目录,执行下面的命令:

    cd src
    git fetch
    git pull
  7. 为了安全起见,再次执行下面的命令:

    cd ..
    gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"
    cd src
    git fetch
    git pull
  8. 生成工程文件(最好做一个备份或者做个分支)

    一定要注意,runhooks前要修改两个文件: src\build\common.gypi 在5488行(4610, # Object
    can never be instantiated)左右,加入 4702, 4819, 4996,
    src\build\some.gyp 的 #’../chrome/chrome.gyp:chrome’,前面的#取消,解除注释

    这里说一下添加这几个数字的用途:
    由于编译chromium源码对warning要求很严格,一旦出现warning就会停止编译。在common.gypi文件中增加这些整数就是降低该warning的等级,或者说忽略该warning。

    如果在最新的代码基础上面产生工程文件,会生产一个不稳定版本。类似于 http://dev.chromium.org/getting-involved/dev-channel 上面的 Canary build for Windows 版本.
    执行命令开始构建系统:

    gclient runhooks --force
  9. 编译当前版本源代码,在src目录执行:

    ninja -C out\Debug chrome       # 生成x86 Debug版本
    ninja -C out\Debug content      # 生成content_shell版本
    ninja -C out\Release chrome     # 生成x86 Release版本
    ninja -C out\Debug_X64 chrome   # 生成x64 Debug版本
    ninja -C out\Release_X64 chrome # 生成x64 Release版本

    注意:这样直接的编译会产出好多的提示信息,又由于windows的控制台是不能翻页的,所以最好把编译的信息重定向到一个文件中。在每一个命令的后面加上>>log.txt 2>&1就可以了。

5.代码同步完成后,恢复系统的代理设置

  1. 恢复netsh winhttp设置为直连
    打开一个具有管理员权限的CMD,输入下面命令:

    x:>netsh
    netsh>winhttp
    netsh winhttp>
    netsh winhttp>reset proxy

    输入下面命令看清除是否成功,成功后显示下面信息:

    netsh winhttp>show proxy
    Current WinHTTP proxy settings:Direct access (no proxy server).
  2. 清除git代理
    打开一个普通的CMD,输入下面的命令:

    git config --global --unset http.proxy

三、编译指定版本的chromium源代码

首先切换至src目录下,列出所有版本的标签,下面的命令将标签记录到tags.txt文本中:

git tag >>tags.txt 2>&1

用sublime打开tags.txt文件后查看版本号,这里只截取最新版本号。

大家可以切换到某个tag进行编译,命令和切换到分支相同,使用如下命令:

git checkout -b chrome_43.0.2355.2_local_branch 43.0.2355.2

这句话的意思就是创建本地分支chrome_43.0.2355.2_local_branch并切换到远程43.0.2355.2tag上。这里可以通过git branch查看当前的分支。
在某个特定的版本上创建完分支之后,再次同步代码:

gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"–jobs 16
//使用--nohooks可以减少每次都检查编译环境等信息。

这样就能够编译当前版本的chromium源代码了。

四、参考文档

  • netfleet的博客
  • chromium浏览器开发系列第二篇:如何编译最新chromium源码

chromium源码下载并编译相关推荐

  1. WebRTC源码下载与编译

    WebRTC源码编译 1 几种源码下载方案对比 1.1 拉别人下好的代码 1.2云服务器 1.3 国内镜像 1.4 挂代理(推荐) 2 源码编译环境准备 2.1 环境要求 2.2 代理服务器配置 2. ...

  2. WebRTC 开发(二)源码下载与编译

    转载:http://depthlove.github.io/2019/05/02/webrtc-development-2-source-code-download-and-build/ 在使用任何工 ...

  3. VLC for Android源码下载和编译

    Project Hosting on 点击打开链接 最受欢迎的开源项目 点击打开链接 由Android的核心开发团队提供了15个优秀的示例项 目,包含了游戏.图像处理.时间显示.开始菜单快捷方式等. ...

  4. ros源码下载及编译

    Ros1 源码下载及编译 准备工作 Setup your sources.list Setup your computer to accept software from packages.ros.o ...

  5. Android12 源码下载、编译、刷机、单编调试Framework

    文章目录 说明 1. 代码下载 1.1 下载Repo工具 1.2 安装和配置Git 1.3 创建工程目录 1.4 初始化Repo仓库 1.5 同步代码 2. 驱动下载 2.1 下载对应机型的驱动 2. ...

  6. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:http://item.jd.com/12212640.html 试读地址:http:/ ...

  7. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:item.jd.com/12212640.ht- 试读地址:www.epubit.com ...

  8. SELinux零知识学习四、Audit应用层源码下载、编译和安装

    接前一篇文章:SELinux零知识学习三.SELinux应用层源码下载.编译和安装 在前篇文章中编译SELinux源码时,出现了如下错误: seusers_local.c:11:10: 致命错误:li ...

  9. Android 4.0.1 源码下载,编译和运行

    [牛人分享]Android 4.0.1 源码下载,编译和运行 转自 http://blog.csdn.net/rambo2188/article/details/6943382 ----------- ...

最新文章

  1. noi 2728 摘花生
  2. 一种简单的redis分布式锁方案
  3. Redis设置外网可访问
  4. 8个JavaScript库可更好地处理本地存储
  5. curl shell 失败_linux – curl命令不在bash中通过shell脚本执行
  6. 机器学习-01regression
  7. git grep 全字匹配_git log --grep 筛选(转)
  8. 推荐一款好用的取色器(仅支持windows)
  9. MATLAB画圆时却显示椭圆?一个命令解决问题!
  10. android截屏加水印,Android截图以及加水印Demo
  11. 【GEE笔记】最大类间方差法(otsu、大津法)算法实现——计算阈值、图像二值化分割
  12. SOPCAST所有频道的地址
  13. Ps的变换、蒙版与色彩平衡
  14. 0xc0000225无法进系统_win10系统出现0xc0000225无法进入系统的恢复方法
  15. 小图标的使用(插入icon图标)
  16. 题解HDU6148 Valley Numer(数位DP+深搜DFS)
  17. 竞技体育数据可视化与可视化分析综述
  18. 线性代数2.5分块矩阵
  19. SPSS——方差分析(Analysis of Variance, ANOVA)——单因素方差分析
  20. Element UI 多选搜索实现拼音匹配

热门文章

  1. 什么是国密SSL证书?和普通SSL证书有什么区别?
  2. polkadot区块链浏览器
  3. lockbit勒索病毒专杀工具,.lockbit勒索病毒数据恢复,lockbit勒索病毒解密处理,数据库恢复
  4. 如何将小米手机的备忘录内容导出到华为Nova3?
  5. Python调用华为API实现人脸比对
  6. 领域驱动设计(DDD):领域接口化设计
  7. Java连接sql server数据库实现简单版人力资源系统
  8. js四舍五入并保留两位小数
  9. 苹果那个 iMessage 商店上线才半年,已经不热了
  10. 文明5 java 攻略_【图片】新手入门教程(科技胜利向指导)【文明5吧】_百度贴吧...