乐趣区

关于chrome:Mac上本地编译Chrome浏览器踩坑笔记202102最新

科普:Google Chrome 浏览器是基于开源我的项目 Chromium 构建的,因而 Chromium 我的项目构建进去的产物就是 Chrome 浏览器本尊。

环境依赖

首先,请确保你的网络环境可能拜访到 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 我的项目代码

因为 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

其实当初 autoninja 的编译速度曾经比以前快多了,几年前我第一次编译 chromium,应用过后简陋的官网文档一步一个坑踩过去,编译一遍要花一夜的工夫,甚至被 mac 的风扇声吵得不得不行 …

编译实现后,你会看到在 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 我的项目指南

退出移动版