【JS】Mac上本地编译Chrome浏览器踩坑笔记(2021.02最新)

Mac上本地编译Chrome浏览器踩坑笔记(2021.02最新)

zhuyingda发布于 今天 04:30

环境依赖

首先,请确保你的网络环境能够访问到Google面向开发者的服务,包括但不限于:

  • *.http://appspot.com

  • *.http://github.com

  • *.http://googlesource.com

  • *.http://googleapis.com

整个过程中99%以上的报错,根本原因都是这个。

其次,确保你的Mac电脑满足以下要求:

  1. 非ARM版 Mac
  2. 系统版本:10.15.4+
  3. xcode版本:12.2+(因为编译过程依赖xcode提供的clang编译器)
  4. macOS 11.0 SDK,这个可以通过运行 ls xcode-select -p/Platforms/MacOSX.platform/Developer/SDKs 来确认

下载编译工具链:deptool

deptool是下载和编译chromium项目的工具套件,编译v8等其他google的开源项目也同样适用。

使用 git 把 deptool 工具项目克隆到本地:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

此时fetch、gclient等命令行工具其实已经可以通过绝对路径访问并执行了,不过为了后续操作方便,可以将其加入到你的 ~/.zshrc 里:

export PATH="$PATH:/path/to/depot_tools"

完成后,在命令行里测试下 fetch 命令是否可用:

which fetch

下载Chromium项目代码

因为 gclient、fetch等工具核心下载代码的过程也是依赖于git的,所以有如下git全局设置建议调整下:

git config --global http.postBuffer 524288000

git config --global core.precomposeUnicode true

因为chrommium项目历史悠久,git仓库巨大无比,为更快的完成下载代码,可以忽略历史提交代码的方式拉取:

fetch --no-history chromium

国内的网络还是可能因不稳定因素导致拉取中途失败,没关系,遇到网络等原因拉取失败时,可以以此命令继续断点续传:

gclient sync

经过反复断点续传,最终完成下载,就可以开始本地编译了~

有关编译

Google的C++项目大多使用ninja这样一个跨平台的编译工具,在mac端ninja底层会调用苹果公司的clang编译器。

由于ninja的编译参数较为复杂,Google又提供了gn 这样一个工具用于 根据当前系统环境生成合适的ninjaFile,此后使用autoninja进行编译时就不用设置任何参数了,直接基于ninjaFile配置文件进行编译。

具体过程如下:

gn gen out/Default

现在会在out目录下生成编译Chrome所需的一系列参数和配置,然后开始编译(整个过程大概耗时4-5个小时):

autoninja -C out/Default chrome

编译完成后,你会看到在out目录下出现了 ./out/Default/Chromium.app/Contents/MacOS/Chromium 这样一个可执行文件,直接命令行执行即可,就会打开你自己本地编译的Chromium了,首次打开速度较慢

Mac端的C++代码入口文件是这个:

src/chrome/app/http://chrome_exe_main_mac.cc

你可以在此文件中 std::cout 打印输出到stdout,但由于chrome是多进程架构,子进程中无法直接进行输出或调试。

有关调试的内容,可以关注本专栏:Web开发技术内幕

另外,欢迎对抓取方面感兴趣的朋友关注我的一个开源项目webster, 项目以Node.js 结合Chrome headless模式实现了一个高可用性网络爬虫抓取框架,借以chrome对页面的渲染能力, 可以抓取一个页面中 所有的js及ajax渲染的异步内容;并结合redis实现了一个任务队列,使得爬虫程序可以方便的进行横向、纵向的分布式扩展。部署起来很方便,我已经为webster提供了一个官方版的基础运行时docker镜像,如果你想先睹为快也可以试试这个webster demo docker镜像。

参考来源

本文中的踩坑笔记来自于:

官方文档:如何获取chromium源代码

官方文档:Mac端编译Chromium项目指南

chromejavascriptwebkitc++前端

阅读 162更新于 今天 08:24

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议


web开发技术内幕

web开发者和使用者,关注web技术但并不局限于web技术,站在软件工程师的角度关注一切与软件领域的现状与...

avatar

zhuyingda

web全栈开发,关注安全领域和性能优化问题

909 声望

31 粉丝

0 条评论

得票时间

avatar

zhuyingda

web全栈开发,关注安全领域和性能优化问题

909 声望

31 粉丝

宣传栏

环境依赖

首先,请确保你的网络环境能够访问到Google面向开发者的服务,包括但不限于:

  • *.http://appspot.com

  • *.http://github.com

  • *.http://googlesource.com

  • *.http://googleapis.com

整个过程中99%以上的报错,根本原因都是这个。

其次,确保你的Mac电脑满足以下要求:

  1. 非ARM版 Mac
  2. 系统版本:10.15.4+
  3. xcode版本:12.2+(因为编译过程依赖xcode提供的clang编译器)
  4. macOS 11.0 SDK,这个可以通过运行 ls xcode-select -p/Platforms/MacOSX.platform/Developer/SDKs 来确认

下载编译工具链:deptool

deptool是下载和编译chromium项目的工具套件,编译v8等其他google的开源项目也同样适用。

使用 git 把 deptool 工具项目克隆到本地:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

此时fetch、gclient等命令行工具其实已经可以通过绝对路径访问并执行了,不过为了后续操作方便,可以将其加入到你的 ~/.zshrc 里:

export PATH="$PATH:/path/to/depot_tools"

完成后,在命令行里测试下 fetch 命令是否可用:

which fetch

下载Chromium项目代码

因为 gclient、fetch等工具核心下载代码的过程也是依赖于git的,所以有如下git全局设置建议调整下:

git config --global http.postBuffer 524288000

git config --global core.precomposeUnicode true

因为chrommium项目历史悠久,git仓库巨大无比,为更快的完成下载代码,可以忽略历史提交代码的方式拉取:

fetch --no-history chromium

国内的网络还是可能因不稳定因素导致拉取中途失败,没关系,遇到网络等原因拉取失败时,可以以此命令继续断点续传:

gclient sync

经过反复断点续传,最终完成下载,就可以开始本地编译了~

有关编译

Google的C++项目大多使用ninja这样一个跨平台的编译工具,在mac端ninja底层会调用苹果公司的clang编译器。

由于ninja的编译参数较为复杂,Google又提供了gn 这样一个工具用于 根据当前系统环境生成合适的ninjaFile,此后使用autoninja进行编译时就不用设置任何参数了,直接基于ninjaFile配置文件进行编译。

具体过程如下:

gn gen out/Default

现在会在out目录下生成编译Chrome所需的一系列参数和配置,然后开始编译(整个过程大概耗时4-5个小时):

autoninja -C out/Default chrome

编译完成后,你会看到在out目录下出现了 ./out/Default/Chromium.app/Contents/MacOS/Chromium 这样一个可执行文件,直接命令行执行即可,就会打开你自己本地编译的Chromium了,首次打开速度较慢

Mac端的C++代码入口文件是这个:

src/chrome/app/http://chrome_exe_main_mac.cc

你可以在此文件中 std::cout 打印输出到stdout,但由于chrome是多进程架构,子进程中无法直接进行输出或调试。

有关调试的内容,可以关注本专栏:Web开发技术内幕

另外,欢迎对抓取方面感兴趣的朋友关注我的一个开源项目webster, 项目以Node.js 结合Chrome headless模式实现了一个高可用性网络爬虫抓取框架,借以chrome对页面的渲染能力, 可以抓取一个页面中 所有的js及ajax渲染的异步内容;并结合redis实现了一个任务队列,使得爬虫程序可以方便的进行横向、纵向的分布式扩展。部署起来很方便,我已经为webster提供了一个官方版的基础运行时docker镜像,如果你想先睹为快也可以试试这个webster demo docker镜像。

参考来源

本文中的踩坑笔记来自于:

官方文档:如何获取chromium源代码

官方文档:Mac端编译Chromium项目指南

以上是 【JS】Mac上本地编译Chrome浏览器踩坑笔记(2021.02最新) 的全部内容, 来源链接: www.h5w3.com/113851.html

回到顶部