编译旧版本的electron内核
我们的软件产品使用的electron框架,electron框架是不断更新的,但是我们的软件太过庞大复杂,不敢轻易升级electron框架。Electron旧版本存在一些BUG和不合理的地方,需要去修复BUG或者不合理的地方。修复完BUG后,要对electron内核进行编译。
本文以electron 20.3.8为例,在windows下进行x64位的编译(我公司所有的软件都已经抛弃了32位系统),介绍旧版本的编译,分享给大家交流。
Mac和Linux版本的操作方法类似。
前提:
○本文以electron 20.3.8为例
○代码放在D盘
○本文默认读者使用的代理软件的端口为7890
目录
一. 调查工作
1.1. 确定要编译的版本所需要的各组件的版本
1.2. 确定electron 20.3.8对应的Chrome精确版本
1.3. 确定electron 20.3.8对应的编译Windows Build Requirements
1.4. 确定depot_tools版本
1.5. 综合调查信息准备软件
二. 软件准备
2.1. 硬件和操作系统
2.2. 安装git
2.3. 安装Nodejs v16.15
2.4. 安装Microsoft Visual Studio 2019
2.5. 安装depot_tools
2.6. 准备网络环境
2.7. 设置环境变量
三. 编译准备
3.1. 设置GIT参数
3.2. 获取electron代码
四. 编译内核
一. 调查工作
1.1. 确定要编译的版本所需要的各组件的版本
访问https://www.electronjs.org/zh/docs/latest/tutorial/electron-timelines
Electron | Alpha | 测试版 | 稳定版 | EOL | Chrome | Node |
20.0.0 | 2022年5月26日 | 2022年6月21日 | 2022年8月2日 | 2023年2月7日 | M104 | v16.15 |
从上面信息可知:
20.0.0 版本对应的Chrome是M104,稳定版的日期是2022年8月2日,Nodejs版本为v16.15
1.2. 确定electron 20.3.8对应的Chrome精确版本
访问https://releases.electronjs.org/release,找到electron 20.3.8
从上面信息可知:
electron 20.3.8 版本对应的Chromium是104.0.5112.124
1.3. 确定electron 20.3.8对应的编译Windows Build Requirements
从Chromium开发官网没有找到编译electron的各种软件的对应版本,但是在其衍生产品CEF的官网上找到了
https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md#markdown-header-current-release-branches-supported
从上表可以看到在Windows下编译Chromium104.0.5112.124版本对应的
操作系统Win 7及其以上
VS2019 16.11.13版本以上
Windows SDK为Win 10.0.20348
1.4. 确定depot_tools版本
编译electron核心其实是编译Chromium,Chromium代码非常庞大,所以Chromium自己编写了一个辅助编译软件depot_tools用来编译Chromium的代码。
depot_tools是不断更新的,它的最新版总是用于编译最新版本Chromium代码。所以每个Chromium的版本也需要相对应的depot_tools版本。现在要确定electron 20.3.8编译所需要的depot_tools的版本。
安装git软件,先把depot_tools下载下来,然后通过 git map来查看其更新记录。
通过1.1里所查的信息,electron 20.3.8最后稳定版为2022年8月2日维护结束,那么我们只要找到depot_tools在2022年8月2日当日或者之前的最后一个版本即可。
通过git map可以看到2022年8月2日的最后一个提交记录是d895d01ac4,后续步骤我们通过
git checkout d895d01ac4
获取这个版本。
1.5. 综合调查信息准备软件
总以上上面调查的信息
Win 7及其以上
electron 20.3.8
Chromium 104.0.5112.124
VS2019 16.11.13+
Windows SDK为Win 10.0.20348
nodejs v16.15
depot_tools版本为提交记录为d895d01ac4这个版本
二. 软件准备
此步骤是安装支持软件,分别为:
○ 硬件和操作系统
○ git最新版
○ Node.js v16.15
○ Microsoft Visual Studio 2019 16.11.13+
Windows 10 SDK version 10.0.20348.0
Debugging Tools for Windows
○ depot_tools
○ 准备网络环境
○ 环境变量设置
需要提及的细节如下每个小章节。
2.1. 硬件和操作系统
CPU | 高性能CPU,CPU越快越好,否则编译速度会非常慢,以I5-14400为例子,整个编译过程要4个多小时。最新版本electron需要的时间更多。 |
内存 | 32G及其以上,否则编译会经常中断。 |
操作系统 | ○ WIN11专业版或者企业版需要一个干净的系统。刚刚安装完成的或者重置完成的全新系统,防止其他软件的干扰。 ○打开WIN11语言和区域设置,在管理语言设置里将“使用Unicode UTF-8提供全球语言支持”选择上。同时建议直接将操作系统的语言改为英文版,以避免比必要的编译错误。 ○为了不必要的干扰,请启用Administrator账户进行编译。 |
2.2. 安装git
https://git-scm.com/downloads
下载最新版的默认安装即可,本文作者认为你已经安装了git,因为1.4章节需要git软件。
2.3. 安装Nodejs v16.15
https://nodejs.org/download/release/
找到Nodejs v16.15最后一个版本v16.15.1,下载node-v16.15.1-x64.msi后默认安装即可。
2.4. 安装Microsoft Visual Studio 2019
https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/history
在Microsoft官网找到Microsoft Visual Studio 2019 16.11.13+安装包,进行安装。
找到最新版本16.11这个版本的最新版即可。选择项目如下:
安装完成后Microsoft Visual Studio 2019 16.11.49后,打开操作系统控制面板的软件列表。
找到Windows Software Development Kit - Windows 10.0.20348.1,点击右键选择“更改”,
将Debugging Tools for windows选择上,然后开始安装。
2.5. 安装depot_tools
本文的代码部分都是放在D盘。
git clone https://chromium.googlesource.com/chromium/tools/depot_tools
再取得对应的版本
git checkout d895d01ac4
PS:网络准备请参照2.6和2.7的《设置网络环境变量》
2.6. 准备网络环境
因为特殊原因,我认为你已经准备好了网络环境,以用于访问
https://github.com/
https://chromium.googlesource.com
等站点。
本文默认读者使用的代理软件的端口为7890。
2.7. 设置环境变量
在操作系统的环境变量,以顺利编译代码。
○ git环境变量
set GIT_CACHE_PATH=D:\git_cache
因为代码非常庞大,编译复杂,中途可能中断重试,所以设置git缓存以避免代码重复下载。
○ depot_tools环境变量
set DEPOT_TOOLS_UPDATE=0
此环境变量让depot_tools启动时候不要自动更新,因为我们需要使用特定的旧版本,
没有这个环境变量它一启动就会变为最新版。
在PATH中添加D:\depot_tools路径,并把它移动到第一位。
○ Microsoft Visual Studio 2019环境变量
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
此环境变量告诉depot_tools使用本地的Visual Studio进行编译,
否则它会自己下载编译器。
set vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional
告诉depot_tools本地编译器路径
○ 设置网络环境变量
set http_proxys=http://127.0.0.1:7890
set https_proxy=http://127.0.0.1:7890
这样你才能顺利下载代码,请准备100G左右的流量。
三. 编译准备
打开depot_tools/bootstrap目录,在cmd下执行win_tools.bat
执行完,depot_tools会执行初始化工作,它会执行如下载所需的Python到depot_tools目录等操作。
在cmd再执行gclient命令,以完成其他初始化工作。
执行完成后,打开操作系统的软件别名设置界面,将python.exe和python3.exe的别名选项关掉。
3.1. 设置GIT参数
以管理员身份打开cmd,切换到D盘,执行以下命令:
D:\
设置git的代理:
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
如果能直通外网,则不需要执行上面命令
设置git参数:
git config --global core.autocrlf false
git config --global core.filemode false
git config --global core.preloadindex true
git config --global core.fscache true
git config --global branch.autosetuprebase always
git config --global core.longpaths true
3.2. 获取electron代码
建立存放源代码和编译结果的目录:
mkdir electron_build && cd electron_build
建立下载代码的配置文件:
gclient config --name "src/electron" --unmanaged https://github.com/electron/electron
执行完成后,会在electron_build目录下生成.gclient文件,用编辑器打开,
在custom_vars字段里内容:"checkout_pgo_profiles": True,
PS:此操作是为了获取PGO性能优化特性。
获取代码,如果想获取全部版本的代码,则执行
gclient sync --with_branch_heads --with_tags
整个代码大概超过100G。
因为我们只需要特定版本,为了不浪费时间去下载全部版本代码,我选择了执行获取特定版本代码的指令:
gclient sync --revision v20.3.8 --no-history
ps:在拉取代码的整个过程中,如果出现中断可以多次执行gclient sync 操作
四. 编译内核
通过上面的操作,形成的代码结构如下:
在CMD中执行如下命令获取PGO文件:
cd src
python3 tools/update_pgo_profiles.py --target=win64 update --gs-url-base=chromium-optimization-profiles/pgo_profiles
执行gn命令构建编译.ninja文件建立编译系统
md out\Release
gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
PS:默认编译的是64位的程序
进行编译
ninja -C out/Release electron
编译估计耗费6-10个小时左右,取决于编译计算机的性能。
编译完成后,可以在D:\electron_build\src\out\Release找到编译结果文件,在其中提取需要的文件即可。
参考的资料:
https://github.com/electron/electron
https://www.electronjs.org/zh/docs/latest/tutorial/electron-timelines
https://www.electronjs.org/zh/docs/latest/development/build-instructions-gn
https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md#markdown-header-legacy-release-branches-unsupported
https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/history
https://chromium.googlesource.com/chromium/src/+/main/docs/README.md
https://chromium.googlesource.com/chromium/src/+/main/docs/windows_build_instructions.md#visual-studio
交流QQ:99107247