花了两天时间编译了下Firefox。本来想编译chrome的,但是google的网络连不上,所以选择了firefox。原理应该都差不多的。编译出来以后再回头看,其实还蛮简单的,但是在没有成功编译之前可是苦恼的很,来来回回不知道到装了多少次mozillabuild。

展示下编译成果,如果自己的环境不出问题,在windows上编译还是很简单的。
编译过程
百度输入:firefox源码下载,打开第一个网址:https://developer.mozilla.org/zh-CN/docs/Mozilla/Developer_guide/Source_Code/Downloading_Source_Archives,根据里面提示打开: https://archive.mozilla.org/pub/,然后选择firefox,releases,72.0b9,source,firefox-72.0b9.source.tar.xz下载当前最新的源码包。打开源码包里面的README.txt,根据提示打开https://developer.mozilla.org/en/docs/Build_Documentation,选择Simple Firefox build链接,接着选择Building Firefox on Windows,根据里面的提示需要64位的win7及以上版本,硬盘需要40G空间。安装vs2019,我这里有vs2017,就直接用它来编译,也不知有没有问题,后续再看。下载并安装MozillaBuild,这里它建议是安装在c:\mozilla-build\,因为C盘空间不是太多,我安装到D盘。点击start-shell.bat并cd到源码目录,然后输入./mach bootstrap,此时弹出选择要编译的firefox版本,选择2,然后就出错了,查看后貌似说只能用Mercurial来获取源码,我去,前面下载的源码等于白下载了。好吧,跟着他的文档走,hg clone https://hg.mozilla.org/mozilla-central,经过漫长的等待,终于下载完成,这里经常会没反应或者报错,多试几次就可以了。然后又是报错UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xa3 in position 4: ordinal not in range(128),图省事直接百度了下,按照别人的方法reload(sys), sys.setDefaultEncode(‘utf-8’),问题解决。后面又报出问题:Exception: Could not find a suitable make implementation.,到这里我折腾了好久,开始以为是不是环境的问题,所以索性卸载了自己的VS2017,因为自己安装的VS2017也不知道功能全不全,按照官网里面写的下载安装了VS2019,结果还是一样的错误。纠结啊,后面就是来来回回安装mozillabuild,因为我直接装在D盘,所以先整到C盘,依然不行,后面就去下载个1.9版本的,还是不行。没法子,看看编译的脚本,到底是错在什么地方,通过查看发现在base.py的776行 make = which(test) 这里总是None,实在没有法子,搞不明白,就注册了mozilla的bugzilla,提交了bug上去。后面我又想了想,这个问题会不会是解决前面的问题引入的呢?自己就把前面加的设置编码去掉,查看脚本里面到底是出了什么问题,功夫不负有心人,终于被我找到了,原来在我的机器上PATHEXT这个环境变量里面有个全角的分号,修改后问题解决。后续会报出路径里面有空格的错误,按照它的提示futil setshortfilename 就可以。./mach build 经过一个多小时的等待,就可以编译成功firefox了。
编译成功了,简单总结下windows编译firefox,1.VS准备,这里用的VS2019,我觉得其实用那个都行,只要源码里面的语法能支持都可以,当然Windows SDK版本还是有要求的,具体根据自己编译的版本选择合适的VS吧。2.源码准备,前面提到了,这里就不说了,主要两种方式,一种是下载release版本的源码包,一种是通过他们的版本管理工具直接clone代码。3.下载相应的mozillabuild工具,这是个cygwin工具,然后安装就可以了。4../mach bootstrap 这一步会下载编译所需的所有依赖工具。5./mach build 编译命令,然后就是等待,这里默认是全编译,如果想自己做设定,需要自己编辑配置文件。
后续问题
编译只是个开始,最主要的目的还是研究修改,打造一个适合于自己的浏览器。浏览器工程在软件里面算的上比较浩大的,如果自己能把里面的相关源码搞通,也是自己能力的一个展示。首要的问题是需要研究编译配置的处理,先把那些用不到的东西删减掉,我这里没有写配置,直接build的,在脚本里看,应该是全编译了,没有必要。第二个问题是中文包的问题,看其他人编译后要去官网下载中文xpi文件,不知道自己能不能弄出来中文包。第三个问题就是代码的熟悉和修改定制自己的浏览器了,是个长期艰巨的任务,我想的是能不能用VS进行调试跟踪,这样遇到特定问题有针对性的研究会很有效果,盲目的看代码得来总觉得浅,还是不断的修改源码才能给与稳定掌握的感觉。