在文章开始之前,我要diss一下掘金处理bug的速度,总结就是“一坨屎”。MD编辑器视频插入功能,几个月的bug了,都没解决,人家西瓜视频都已经和抖音业务合并了,还搁那用西瓜视频链接,公众号和客服私信反馈了问题,也无人回复,在社区bug反馈中,看到早早有人反馈过此问题,也装死看不见,不知道掘金的产品和客服是干啥去了。
正文
chromium各版本发布日程
chromium各版本git日志
在编译之前我们需要下载好全量的 chromium 源码,之前文章中,我们下载的时候是加上了 --no-history 参数,是不会去拉取全量源码,只会拉取最新版本的源码。
下载 depot_tools 工具
首先下载 depot_tools 工具,并将 depot_tools 目录添加到系统变量 path 中
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
下载好了之后,不要执行 gclient 命令和修改任何文件。在C盘根目录或者其他目录下新建 boto.cfg 文件,文件内容为以下内容:(proxy_port参数修改为自己设备的代理的端口)
[Boto]
proxy = 127.0.0.1
proxy_port = 10808
然后新增环境变量 NO_AUTH_BOTO_CONFIG ,值为boto.cfg文件路径,不会的可以参考之前的源码编译章节内容
拉取 chromium 全量源码
然后新建一个 chromiumAll 目录,用来放置全量 chromium 的源码(此目录所在磁盘建议剩余存储空间要在 150GB 以上),进到你刚刚新建的chromiumAll目录,然后拉取代码。
打开powerShell 7,建议使用前面文章介绍的新版powershell,设置全局代理,开启vpn,执行以下代码进行拉取即可,一共大约 80GB 的源码,中途不可中断,中断直接重头再来,所以需要保证你的网络顺畅,并且你的代理服务流量额度要够,我跑了好多次才成功将他全部拉取下来,都是中途中断了,然后只能重头再来,浪费了接近 300GB 的vpn流量,(如果你成功拉取了,可以将这个代码不做任何操作,备份一份到本地,然后用复制出来的代码去做项目,保证一直会有一份比较干净的源码)
$env:HTTP_PROXY="http://127.0.0.1:10808"; $env:HTTPS_PROXY="http://127.0.0.1:10808"
fetch chromium
下载好了之后,进到chromium各版本git日志中,地址在开头位置,全局搜索一下需要的版本
点击图中位置
点击图中位置
进入之后,首先记住commit的提交编号,这个非常重要,然后找到 Checking Out and Building,然后找到对应系统,打开构建文档链接即可。
环境要求按照构建文档要求的环境来,例如Windows 10 SDK,Visual Studio这些,严格按照文档要求来就可以。
环境配好之后,就是切换版本,在powershell 7 中,src目录中执行一下命令,5f8e74b8f1dab431a1a57d84101185f0e8da33d4就是刚刚的commit编号
git checkout 5f8e74b8f1dab431a1a57d84101185f0e8da33d4
执行完之后,执行 git log -1,查看一下当前版本的状态,目前的状态就是回到了,也可以通过查看前面的chromium各版本发布日程链接查看每个版本的发布时间来验证对错,一般不会差太久。
在src的DESP文件中,搜索一下depot_tools,记住这个版本号即可
powershell 切换到depot_tools目录,执行以下命令,87a7605160fdc1370d6fbaa6347a36cbc5287546就是图片中的版本号
git checkout 87a7605160fdc1370d6fbaa6347a36cbc5287546
在执行gclient之前,可以先运行一次depot_tools下的 bootstrap\win_tools.bat 文件,会自动下载一个对应版本的python,执行完之后,就可以执行 gclient 了,在gclient运行成之后,切换到chromium的src目录下,跟之前一样开始执行编译所需要的步骤就可以。
在执行 gn gen out/Default 的时候,构建配置可以使用我这份,当然你也可以根据GN官网的配置来。
# 系统
target_os = "win"
# 架构
target_cpu = "x64"
# 是否开启调试
is_debug = false
# 不允许远程调试
enable_remoting = false
# 使用 Chrome 官方的编译优化建议
is_official_build = true
# 分散链接编译
is_component_build = false
# 不使用官方 API 密钥
use_official_google_api_keys = false
google_api_key = ""
google_default_client_secret = ""
# 关闭支持 NaCl
enable_nacl = false
# 支持 H264 编码
proprietary_codecs = true
# 解码器
ffmpeg_branding = "Chrome"
# 启用调试符号以满足 GRIT 要求
symbol_level = 1
v8_symbol_level = 1
blink_symbol_level = 1
# 明确禁用 strip_debug_info
strip_debug_info = false
# 禁用 PGO 优化以避免配置文件缺失问题
chrome_pgo_phase = 0
最后构建的时候,用 ninja -C out/Default chrome,不要用 autoninja -C out/Default chrome
在编译过程中可能会报的错误: 如果你运行gclient sync 的时候报了gbk 编码之类的错误,可以尝试运行这个命令来重新执行
cmd /c "set PYTHONIOENCODING=utf-8 && gclient sync"
如果在执行hooks阶段报以下类似错误:
Running hooks: 46% (45/96) tools_traffic_annotation_windows
________ running 'vpython.bat src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --num_threads=4 --bucket chromium-tools-traffic_annotation -d src/tools/traffic_annotation/bin/win32' in 'J:\chromium'
1> File gs://chromium-tools-traffic_annotation/f983cccf0780bec2aa066a691f50e4c8a3a07153 for src/tools/traffic_annotation/bin/win32\traffic_annotation_auditor.exe does not exist, skipping.
Downloading 1 files took 4.006000 second(s)
File gs://chromium-tools-traffic_annotation/f983cccf0780bec2aa066a691f50e4c8a3a07153 for src/tools/traffic_annotation/bin/win32\traffic_annotation_auditor.exe does not exist.
Error: Command 'vpython.bat src/third_party/depot_tools/download_from_google_storage.py --no_resume --no_auth --num_threads=4 --bucket chromium-tools-traffic_annotation -d src/tools/traffic_annotation/bin/win32' returned non-zero exit status 1 in J:\chromium
可以在src目录中的DESP文件中,将此项注释,原因是谷歌存储桶中,tools_traffic_annotation_windows文件已经被删除不存在了,根据官方解释,这个东西的作用是用来记录你的流量用途,没有的话,不影响我们后面的编译
编译好了之后,就可以看到我们对应版本的chromium了。
要点总结: 对应历史版本的chromium在编译的时候,就要用DESP文件中记录的对应版本的depot_tools,将他们都回滚到历史版本,然后执行编译所需要的步骤即可,否则会发生很多奇怪的错误