Chrome编译

转自:http://blog.sina.com.cn/s/blog_557946010100ecu0.html ,这篇文章适合较新的chrome编译。

 

编译篇
研究Chrome,首先得把它编译出来,这对于后续的代码分析和阅读有很大的帮助,想想自己编译出一个Chrome浏览器来使用,那是一件很开心的事情。
编译环境准备
Chrome的编译和WebKit相比起来,难度上来说,简直是一元二次方程求解和偏微分方程求解的对比(我到现在还没有完整的把WebKit编译出来,鄙视一下自己)。虽然Chrome也是从WebKit演进过来,差不多也就是把WebKit的JS引擎替换成了V8。但是不得不承认Google把WebKit的编译难度降低了几个数量级。
言归正传,Chrome官方网站上公布的是基于Visual Studio 2005进行编译,网上也有兄弟基于Visual Studio 2008编译成功过,但我手头上没有Visual Stdio 2008,所以无从得知。本文也是以Visual Studio2005环境为例。我曾经在自己家里的电脑上用Visual C++ 2005 Express版本编译过,没有成功。在XP Professional和Vista Home两个操作系统上均编译成功。
在下载Chrome代码前,需要安装下面几个软件:
1. 安装Visual Studio 2005.
2. 安装Visual Studio 2005 Service Pack 1 .
3. 安装热补丁Hotfix 947315 .
4. 如果操作系统是Vista,还需要安装Visual Studio 2005 Service Pack 1 Update for Windows Vista
5. 安装Windows 2008 SDK 。按照网上说法,如果是Visual Studio 2008,就不需要安装这个了。
6. 配置Windows 2008 SDK。在开始->程序->Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool.。选择make current按钮,幸运的话,应该能一次成功。如果不能成功,Chrome官方网站上有一个手动配置 的帮助,大家可以参考。
下载代码
Google为Chrome提供了一个一个部署工具depot_tools ,包括下载代码、同步代码、上传代码等功能。这个工具采用Python编写的,其中还包含了一些Javascript脚本。depot_tools 中包含了一个gclient工具,是我们需要关注的重点。
下载代码有几种方式:
1. Chrome官网上提供了一个源代码包 ,可以直接下载下来。不过这个包并不是最新的包。我采用的是这种方法进行下载的,相对来说比较快。
2. 采用SVN客户端工具进行下载,比如TortoiseSVN客户端工具,SVN服务器地址是http://src.chromium.org/svn/trunk/src。
3. 采用google提供的depot_tools 工具。
(1) 下载和安装depot_tools
(2) 把depot_tools的安装目录设置到系统目录(系统Path环境变量)中。
(3) 创建一个存放Chrome代码的目录,比如d:/chrome。目录不要包含空格。
(4) 在命令行下,先将当前目录切换到chrome代码的目录,例如上面的(d:/chrome)。
(5) 运行gclient config http://src.chromium.org/svn/trunk/src命令。Gclient将会先下载svn工具和python工具,然后调用svn进行代码同步。
注意:gclient中下载svn和python采用的是javascript实现。如果在需要设置proxy的环境中,则需要需要修改一下脚本。
1.打开X:/depot_tools/bootstrap/win/get_file.js文件。其中X是你的安装盘符。
将Line9-Line22行之间的代码

try {
xml_http = new ActiveXObject("MSXML2.ServerXMLHTTP");

} catch (e) {
WScript.StdOut.WriteLine("[-] XMLHTTP " + new Number(e.number).toHex() +
": Cannot create Active-X object (" + e.description) + ").";
WScript.Quit(1);
}
try {
xml_http.open("GET", url, false);
} catch (e) {
WScript.StdOut.WriteLine("[-] XMLHTTP " + new Number(e.number).toHex() +
": invalid URL.");
WScript.Quit(1);
}
修改成
try {
xml_http = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0 ");
} catch (e) {
WScript.StdOut.WriteLine("[-] XMLHTTP " + new Number(e.number).toHex() +
": Cannot create Active-X object (" + e.description) + ").";
WScript.Quit(1);
}
try {
xml_http.setProxy(2, proxyIP:Port);//Proxy IP和Port
xml_http.open("GET", url, false);
xml_http.setProxyCredentials(username,pwd);//用户名和密码
} catch (e) {
WScript.StdOut.WriteLine("[-] XMLHTTP " + new Number(e.number).toHex() +
": invalid URL.");
WScript.Quit(1);
}

编译代码
如果你是下载的源代码包,则需要先解压,这个代码包是双重压缩。估计要把所有代码解压下来,半个小时左右,我在我的本本上是花了将近半个小时时间才解压出来,解压下来所有代码的大小是3个多G。
从网上搜索了很久相关Chrome编译相关的材料,大家都反馈在src/chrome目录下有chrome.sln文件,直接打开这个sln就可以利用Visual Studio 2005进行编译了。但是我翻遍所有代码却找不到这个文件,让我郁闷了很久,开始怀疑是我下的代码版本问题,在线查看了Chrome的SVN目录,发现最新版本也没有这个文件了。检查一下网上的那些文章基本上都是2008年的文章,开始怀疑是否是chrome做了改变,但是从chrome的官网上来看,似乎没有更新。最后在线翻阅了chrome的开发group论坛,才知道Chrome确实作了修改,原来代码中的那些.sln、.vcproj文件全部抛弃了,google自己开发了一个脚本工具GYP 工具,这个工具也是采用python编写的。GYP 采用了自定义的一套规则,用于生成各种工程文件。
其实这个文件的内容和visual studio 2005中的.vcproj文件虽然有比较大的差别,但是描述的东西没有太大变化,更简单更简洁一些而已。无非描述了工程的文件,编译设置等内容。
下面描述一下编译步骤:
1. 运行命令行工具。
2. 切换到Chrome主目录下(我的电脑是d:/chrome目录)。
3. 执行gclient runhooks --force。这个命令将会调用GYP工具,对Chrome.gyp进行解析,生成各个Visual Studio2005工程文件。
4. 双击chrome/chrome.sln文件,即可打开Visual Studio 2005,一共有215个工程,非常庞大。
5. 右键选择解决方案,选择生成解决方案,编译开始了。这个过程在我的本本里是持续了2个小时左右,CPU前一个多小时都是持续100%,害得我连看电影都卡的不行了。编译后的文件放置在chrome/debug目录下(我编译的是debug版本)。整个编译下来,Debug目录增加了将近7个G的东东,实在是恐怖!要编译Chrome,至少要保留10个G的空间。
总结
整个编译Chrome的过程说实话还是花了我不少的力气,不过看着编译出来的chrome,心里还是很happy的。


 
在我编译的过程中主要遇到的几个问题:
1. 公司有Visual Studio2005,可是因为Proxy的原因,depot_tools工具无法进行,为了突破proxy的限制,花了不少力气。
2.Chrome工程组织方式发生了变化,但在官网上没有更新,网上其他的资料都是基于旧的版本介绍,所以在适应新的gyp方式方面花了不少力气。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值