Hi,大家好,欢迎大家观看由IT猫之家打造的【网络爬虫教学】虫师终极武器之Chromium定制开发系列教学文章的第二篇,如果您还未看过第一篇,请先到这里看完第一篇后再回来哦!大家在学习过程中,有任何疑问可以留言或加入我们的QQ技术交流群进行探讨: 544185435
编译第一个Chromium
在上一篇文章中,我们一起配置了Chromium环境以及通过 depot-tools 将整个浏览器的源码下载到了本地(假设大家已经完成下载)。但下载完成并不代表就是完成了,我们要的不是一个源码,而是一个所见即所得的浏览器,类似Chrome,所以我们需要编译它,如果说,下载源码你花了整整半天时间,那么我可以很负责的告诉你,编译浏览器你可能需要一天到两天的时间,因为重点就在这了,在编译过程中,资源消耗也特别大,所以在编译前,我建议大家先查看系统的内存占用是否异常,如果异常可参考以下方式进行释放!
该方式仅对于虚拟内存导致占用过高有效,如果本身内存不足,或本身运行的某些程序占用了内存资源请自行解决,这里我们按键盘上的win + PauseBreak键(如果适用),或者打开控制面板 –> 系统和安全 –> 系统,打开系统属性页面 。
在页面左侧找到并打开高级系统设置 –> 切换到高级菜单 –> 点击性能下方的设置按钮 –> 在弹出的窗口中切换到高级选项 –> 点击更改按钮。
在弹出的窗口中,我们点击去掉自动管理所有驱动器的分页文件大小(A) –> 选中盘符 –> 勾选自定义大小,并设定内存大小(仅供参考)–> 点击设置按钮(别忘了点击这里哦,否则不会生效的)最后按确认确认,之后重启电脑即可。
初识GN编译器
GN是由谷歌打造的一款可用于生成Ninja构建文件的元构建系统,它是GYP元构建系统的衍生版本,主要为了取代GYP而生,通过使用GN生成的Ninja文件我们可以更快速的构建Chromium;由于GN是基于CPP开发的,所以理论上比基于python开发的GYP要快上20倍左右,而我们要编译最新版的Chromium,也需通过使用GN命令进行构建。
构建Chromium的Ninja文件
构建Ninja文件很简单,我们只需使用gn命令即可完成构建,而gn工具事实上我们并不需要额外安装,它已经被集成到 depot-tools 之中,我们直接调用即可。
如图,我们在命令行中键入:gn args out目录 将会打开一个文本编辑器,这里我采用的是默认的记事本,如果你们装了别的编辑器,可能不太一样,但这不影响操作,在打开的编辑器中,我们可以键入一些参数,指定chromium按照这些参数进行编译,(事实上我也对这些参数理解的不太透彻,所以仅从网上找了一些)
# Build arguments go here.
# See "gn args <out_dir> --list" for available build arguments.
is_component_build = false
is_debug = false
enable_nacl = false
target_cpu = "x86"
google_api_key ="AIzaSyDCNWofwOkYgeS3aBnd901sIJqSS4p3nKc"
google_default_client_id = "752805503192-gigd4quq46757vjupq4rv5oga3sougnp.apps.googleusercontent.com"
google_default_client_secret = "bEbljK3NYvuRBe-zn7UyS4Zy"
- is_component_build 可选值为true或false。当为true时编译成多个小的dll,false时编译成单个dll。通常在debug模式时,设置true,而编译release版本时,设置为false,这样就可以把所有代码编译到一个dll里面。
- is_debug 可选值为true或false,当为true时为编译调试版本,否则则为release发布版本。
- enable_nacl 可选值为true或false,表示是否开启 Native Client 功能,通常情况下我们并不需要,所以设置为false即可。
- target_cpu 可选值为”x86″或”x64″,表示要编译的版本即32位或64位(温馨提示:x86版本比x64快很多哦!)
- google_api_key 设置谷歌API key,针对编译后调用各大内置接口时提示需要获取key情况,如调用谷歌翻译接口。
- google_default_client_id 设置谷歌 default_client_id ,针对编译后调用各大内置接口时提示需要获取key情况,如调用谷歌翻译接口。
- google_default_client_secret 设置谷歌 default_client_secret ,针对编译后调用各大内置接口时提示需要获取key情况,如调用谷歌翻译接口。
以上后三个以google开头的参数仅用于编译时设定api接口,而无需用户在安装后自己设定,该值可以直接使用上面附带的值,也可以自行通过谷歌开发者平台自行申请。
在完成上述的输入后,我们会惊讶的发现,在out/chrome目录中多了许多文件,而这些文件都是用于生成编译的。
事实上上面的通过args参数指定编译虽说也没有什么问题,但编译的文件还是很大的,它是基于完整的编译,为了缩减编译的时间,我们可以通过使用gn gen –filters=//chrome –noideps out目录 命令来过滤出chrome,这样我们也可以到该目录下修改args.gn文件,然后添加上述的命令进去亦可。
那么接下来就是重头戏编译啦,由于我们开发的产品是为了可以更方便的分享给它人使用,那么很有必要打包成一个exe安装包,事实上谷歌已经为我们提供了打包的环境,我们只需通过指定mini_installer既可以告诉编译器,我们要打包一个迷你的安装包,这里我们通过命令:autoninja -C out目录 mini_installer,进行编译,默认情况下 autoninja 以6条线程进行编译,如果您的电脑配置太低,可以在命令末尾添加-j 0 这里的0是一个数值,指的是你想以多少线程来跑,建议配置低的可以适当的减少线程数,配置高的可以适当添加,接下来我们就让电脑一直在挂着,自己该干嘛干嘛去吧!
总结
由于本篇文章要操作的流程稍微有些繁杂,但根据上述步骤处理不会有太多问题,值得注意的是,编译chromium是极其消耗资源的,在普通的core i5 4950下执行编译测试,CPU一直保持100%从未降低过,所以在编译时请杜绝开任何其它无关的进程,以免造成内存不足而导致编译退出(编译器这方面很脆弱),编译时长跟你电脑配置有关,多核+高内存+SSD会稍微快点,其它普通的可能要1-2天,然后如果编译中断了,可以继续执行上述指令进行增量编译,该指令是支持后期更新时增量而无需重新编译,最后大家如果在编译时有任何疑虑可参考以下文档!
- Chromium官方编译文档
- GN快速入门指南
- Ninja, a small build system with a focus on speed
- GN编译指令参考