chromium源码下载并编译
来源:互联网 发布:ubuntu terminator 编辑:程序博客网 时间:2024/05/19 23:24
目前,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设置网络代理。具体的方法如下所示:
首先必须找到一个可用的高速http/https/socks5的代理服务器
为cmd设置http/https/socks5代理。打开一个具有管理员权限的cmd(非常重要),在其中输入:
x:>netshnetsh>winhttpnetsh winhttp>netsh winhttp>netsh winhttp>set proxy http.proxy.com:12345
其中
http.proxy.com:12345
为你的代理的IP地址和端口号。
设置完成后,退出该cmd就可以了。该设置使固化在系统红的,重新启动之后,该设置依然有效。启动一个新的cmd,执行命令
x:>gclient
,这时就能够利用设置好的cmd代理下载git、svn、python等工具并更新depot_tools。等上面的步骤执行结束后,再次执行
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,设置方法如下:
先设置CMD环境变量,在CMD中输入:
x:>set http_proxy=http://http.proxy.com:12345x:>set https_proxy=http://https.proxy.com:23456x:>set socks5_proxy=socks5://https.proxy.com:23456
为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%
验证git代理
设置完后,用下面命令看是否成功:x:>git config --get http.proxyx:>git config --get https.proxy
再次执行gclient命令
这时git的代理就设置好了,再次运行gclient
命令,就会利用git通过设置的代理下载一些数据。这样gclient
命令就能够正确的执行完毕。
成功后可以运行一次gclient –version看看版本号,并注意一下有没有错误提示:x:>gclient --version
配置git的用户名和邮箱
x:>git config --global user.name "yourname" #yourname改为你希望的用户名x:>git config --global user.email "youremailaddress@gmail.com" #输入你自己的邮箱x:>git config --global core.autocrlf falsex:>git config --global core.filemode false
4.开始同步chromium源代码并编译
环境设置完毕,下面就开始同步源代码:
建立一个目录用于下载chromium代码,比如D:\chromium,在此目录中在建立一个目录master;D:\chromium\master就是我们将要签出代码的主目录。
进入该目录,通过下面的命令,产生.gclient文件:
gclient config https://chromium.googlesource.com/chromium/src.git
设置环境变量
set GYP_MSVS_VERSION=2013set GYP_GENERATORS=ninjaset 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版本的。
在当前窗口运行,运行如下内容耐性等待,看网络条件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
再次运行下面的命令:
gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"
执行完成后进入src目录,执行下面的命令:
cd srcgit fetchgit pull
为了安全起见,再次执行下面的命令:
cd ..gclient sync --nohooks --with_branch_heads --with_tags --output-json="log.json"cd srcgit fetchgit pull
生成工程文件(最好做一个备份或者做个分支)
一定要注意,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
编译当前版本源代码,在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.代码同步完成后,恢复系统的代理设置
恢复netsh winhttp设置为直连
打开一个具有管理员权限的CMD,输入下面命令:x:>netshnetsh>winhttpnetsh winhttp>netsh winhttp>reset proxy
输入下面命令看清除是否成功,成功后显示下面信息:
netsh winhttp>show proxyCurrent WinHTTP proxy settings: Direct access (no proxy server).
清除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源码下载并编译
- Chromium的源码下载和编译
- Linux chromium 源码下载及编译
- mac 版本下载编译chromium最新源码
- chromium下载编译过程
- chromium下载与编译
- 下载编译chromium
- 编译Chromium 源码
- chromium 源码编译
- Windows 编译下载Chromium常见问题
- chromium的下载和编译
- chromium 源码的下载方式
- 使用depot_tools下载chromium源码
- 下载并编译Android 2.3源码
- 下载最新的firefox源码并编译
- Ubuntu环境下载并编译Android源码
- 下载最新的firefox源码并编译
- Spring4源码下载编译并导入eclipse
- mybatis缓存 redis实现
- ubuntu连接windows远程桌面
- [Java] 浅谈泛型的意义与不足
- 【LeetCode-1】Two Sum
- 173.When does a transaction complete? (Choose all that apply.)
- chromium源码下载并编译
- 平均年龄-美团笔试
- tomcat Server Locations 不可用 两种解决方式
- keystore 获取(常用命令行,SDK创建应用,找应用签名的方法)
- css基础效果
- sdk23_EditText:singleLine="true"过时及引发inputType="textPassword"失效
- HTML5 表单元素
- iOS资源大全
- 轻松把玩HttpClient之封装HttpClient工具类(四),单线程调用及多线程批量调用测试