欢迎光临
我们一直在努力

清华大学《Chromium指纹浏览器开发教程》固定版本拉取、编译、调试、打包全过程记录

参考文档

https://chromium.googlesource.com/chromium/src/+/main/docs/windows_build_instructions.md

系统要求

  • 一台配备至少 8GB 内存的 x86-64 机器。强烈建议使用 16GB 以上的内存。
  • 硬盘上至少需要 100GB 的可用空间,且硬盘格式必须为 NTFS。FAT32 格式不适用,因为部分 Git 包文件大于 4GB。
  • 如下所述的合适版本的 Visual Studio。
  • Windows 10 或更高版本。

100G 硬盘,还得让vs2022装在C盘,如果你没搞个1T的系统盘,还真不好弄,编译完成后能达到200G左右,所以想玩这个先把C盘更换为1T的NVME,否则再加上CPU垃圾,编译能搞一天

安装VS2022

官网现在下不了vs2022 社区版,自己网上搜,这个百度云给一个

通过网盘分享的文件:VisualStudioSetup.exe 链接: https://pan.baidu.com/s/1-JqUnGqMSlu3zlL48uT-Cg?pwd=92de 提取码: 92de  –来自百度网盘超级会员v9的分享

下面的C++桌面开发库依赖我截图了,完全按书上来的

书上当时还是c++ clang 17.0.3 我们这里变成了19,但是我们编译的 chromium 19 依赖clang 17,所以直接用visual studio 编译不了,会报clang 语言不能低于19,但是用 autoninja 不会有这个问题,ninja 用chromium自带的clang 编译器,没有这个要求

下载 Windows 11 SDK

我使用vs2022默认自带的10.0.22621.0 SDK(如上图),编译后也没啥大问题,书本要求的SDK找不到了

https://learn.microsoft.com/zh-cn/windows/apps/windows-sdk/downloads

安装完后,找这些SDK的路径啥的,一定要用everything工具,否则找死人

Chromium 源码对应的SDK版本是那个?这个在源码中是写死的,可以按照这个来下载对应的SDK,找不到完全匹配的也没关系,只要第三位匹配即可,第四位是bug修复而已

安装SDK时,记得勾选 Debugging Tools for Windows,如果不小心忘了,只能卸载后重装

下载 depot_tools 

下载地址:https://storage.googleapis.com/chrome-infra/depot_tools.zip,下载完毕后,放在你想要编译的文件夹下,然后将这个路径追加到环境变量Path里面去,可以让cmd找到相应的可执行文件和命令

另外环境变量要配置 DEPOT_TOOLS_WIN_TOOLCHAIN=0,意思是使用本地工具链编译的意思

同时把vs2022的软件地址也配置到系统变量里

vs2022_install=xxxxx\\2022\\Community (自己也用everything搜索吧)

具体讲解(AI)

在编译 Chromium 时,DEPOT_TOOLS_WIN_TOOLCHAIN=0 是一个非常关键的环境变量。简单来说,它决定了编译系统是**“吃官方提供的外卖”还是“用你自己厨房里的灶台”**。


核心作用:禁用 Google 预置工具链

1. 默认逻辑:Google 托管工具链 (=1 或未设置)

默认情况下,Google 的 depot_tools 倾向于维持一个高度受控的环境。

  • 自动化: 当你运行 gclient runhooks 时,它会尝试从 Google 的服务器下载一个特定版本的 Visual Studio 和 Windows SDK 的压缩包。

  • 一致性: 这样可以确保全球所有的 Chromium 开发者使用的编译器(MSVC/Clang)和 SDK 版本完全一致,避免因为你本地安装了不同版本的 VS 而导致编译出来的二进制文件有差异。

  • 局限: 这个功能通常只对 Google 内部员工或拥有特殊访问权限的人开放(或者是针对特定的开源版本有条件的自动化)。对于普通开发者,往往会因为没有权限下载这个包而报错。

2. 你的选择:使用本地工具链 (=0)

当你设置 DEPOT_TOOLS_WIN_TOOLCHAIN=0 时,你是在告诉 depot_tools:

“不要去网上下载工具链了,直接用我电脑上已经安装好的 Visual Studio 和 Windows SDK。”


为什么要设置它?(意义所在)

对于像你这样在自己 Windows 环境下编译的开发者,设置这个参数通常是强制性的,原因如下:

  • 权限问题: 如前所述,大多数外部开发者无法通过 depot_tools 自动获取 Google 打包好的工具链。

  • 版本控制: 你可以灵活地在自己的机器上安装特定版本的 Visual Studio(如 VS 2022)和对应的 SDK 版本。

  • 节省空间与带宽: 既然你已经手动安装了几个 GB 的 VS 和 SDK,就没有必要让脚本再去尝试下载一份重复的、可能还下不下来的备份。


设置后的连锁反应

当你声明了 =0 之后,Chromium 的构建系统(GN/Ninja)会启动自动搜索模式:

  • 自动寻找 VS: 它会在默认路径(如 C:\\Program Files\\Microsoft Visual Studio\\2022\\Community)下寻找编译器。

  • 验证版本: 它会检查你本地的 SDK 版本是否符合源码中 src/build/config/win/visual_studio_version.gni 等文件要求的最低版本。

  • 依赖报错: 如果你本地没装 SDK,或者版本太低,设置 =0 后运行 gn gen 就会直接弹回错误,提示找不到特定的 SDK 版本。


  • 操作指南

    如果你要在 Windows 上开始编译,通常的操作步骤是:

    第一步:设置环境变量

    在 CMD 中:

    set DEPOT_TOOLS_WIN_TOOLCHAIN=0

    或者在 PowerShell 中:

    PowerShell

    $env:DEPOT_TOOLS_WIN_TOOLCHAIN=0

    第二步:配合必要的“寻找”参数

    有时候仅仅设置 =0 还不够,你可能还需要告诉系统你的 VS 装在哪(如果是非默认路径):

    DOS

    set vs2022_install=C:\\Path\\To\\Your\\Visual Studio


    总结

    模式 DEPOT_TOOLS_WIN_TOOLCHAIN 行为 适用人群
    托管模式 1 (默认) 尝试从 Google 下载专用 VS/SDK 包 Google 员工或特定 CI 环境
    本地模式 0 强制使用本地安装的 VS 和 SDK 绝大多数外部开发者(包括你)

    下一步建议:

    既然你已经了解了这个参数,建议你在执行 gn gen out/Default 之前,先确认你的 Windows SDK 已经安装了 "Debugging Tools for Windows",这是本地编译最容易漏掉的一个组件。

    需要我帮你写一个检查本地环境是否就绪的脚本吗?

    配置 gclient

    gclient 是一个 git 多仓库管理器,git是针对一个仓库的管理,gclient是针对多仓库的相互依赖,编译过程,控制依赖顺序等。

    gclient config https://github.com/森哥/my-electron-project.git

    这个命令可以在当前文件夹下面创建一个src文件夹,用来存放源代码,同时还会生成一个 `.gclient` 文件,里面存放一些配置信息,这里配置的仓库是一个超级仓库,里面会有个其他仓库的依赖文件

    gclient config https://chromium.googlesource.com/chromium/src.git

    再配置一个缓存文件夹,这个缓存文件夹是啥意思呢?

    因为gclient是管理多仓库的,既然是多仓库,那么每个仓库可能依赖的库是相同的库,比如v8,那么这个v8就不用每个仓库都拉一份,只要有1个下载完后,那么其他仓库只需要将位置指向git_cache/v8 即可,这样就大大节省了流量和重复下载的次数

    gclient config –cache-dir C:\\chromium119\\git_cache

    拉取具体版本的chromium

    若你中途闪退导致代码下载不完整,建议你重新执行下面这个命令,如果去掉 –revision 这个参数,很可能导致版本对不齐

    这里src就是指当前文件下的src目录,@119.0.6045.123 是说这个仓库的代码要对齐 `119.0.6045.123` 这个版本

    gclient sync –revision src@119.0.6045.123 –with_tags –with_branch_heads

    gn 生成执行清单

    # 记得要在src目录里面执行这个命令才可以
    gn args out/debug

    其他参数请参考 https://blog.csdn.net/wangsenling/article/details/157469326

    is_debug = true
    enable_nacl = false # 禁用NativeClient,加快构建速度
    target_cpu = "x64" # 将目标CPU架构设置为x64
    is_component_build = true # 启用组件构建,而不是打成一个整体包,避免最后的长连接步骤
    symbol_level = 1 # 节省磁盘空间
    proprietary_codecs = true # 启用专有的音视频编码器支持,启用后,Chromium将能够解码和播放一些专有格式的音视频文件,如 H.264

    autoninja 就可以编译了

    这里的 chrome 的意思,是chrome浏览器源码仓库的意思,因为拉下来的代码可多了,有v8,安卓浏览器,最小安装版本啥的,所以这里要指定就编译 chrome 即可,想知道还有哪些参数,看  https://blog.csdn.net/wangsenling/article/details/157469326

    autoninja -C out/debug chrome

    编译发布版本

    1. 需要一个密钥key,同时修改 gn args 参数,密钥需要去google cloud——>APIs & Services——>Credentials

    is_debug = false
    enable_nacl = false # 禁用NativeClient,加快构建速度
    target_cpu = "x64" # 将目标CPU架构设置为x64
    is_component_build = false # 启用组件构建,而不是打成一个整体包,避免最后的长连接步骤
    proprietary_codecs = true # 启用专有的音视频编码器支持,启用后,Chromium将能够解码和播放一些专有格式的音视频文件,如 H.264
    ffmpeg_branding="Chrome"
    is_official_build=true
    google_api_key="xxx"
    goolge_default_client_id="xxx"
    google_default_client_secret="xxxx"

    未完待续

    赞(0)
    未经允许不得转载:171主机测评 » 清华大学《Chromium指纹浏览器开发教程》固定版本拉取、编译、调试、打包全过程记录
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址