当前位置: 首页 > news >正文

编译旧版本的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

http://www.xdnf.cn/news/1237033.html

相关文章:

  • VisualStudio的一些开发经验
  • 能表示旋转的矩阵是一个流形吗?
  • C++与Go的匿名函数编程区别对比
  • 吴恩达【prompt提示词工程】学习笔记
  • 曼哈顿距离与切比雪夫距离
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十六天
  • Digit Queries
  • Arrays.asList() add方法报错java.lang.UnsupportedOperationException
  • 常见的深度学习模块/操作中的维度约定(系统性总结)
  • 接口测试用例的编写
  • Java 大视界 -- Java 大数据机器学习模型在金融市场情绪分析与投资决策辅助中的应用(379)
  • WSUS服务器数据库维护与性能优化技术白皮书
  • Nvidia Orin + RealSense D435i 与3D地图实现导航
  • ulimit参数使用详细总结
  • 第九章:了解特殊场景下的redis
  • 推荐系统学习笔记(八)其他召回通道
  • 机器人抓取流程介绍与实现——机器人抓取系统基础系列(七)
  • 《人形机器人的觉醒:技术革命与碳基未来》——类人关节设计:人工肌肉研发进展及一款超生物肌肉Hypermusclet的设计与制造
  • 最小半径覆盖问题【C++解法+二分+扫描线】
  • 从零开始学Express,理解服务器,路由于中间件
  • 批发订货系统:私有化部署与源代码支持越来越受市场追捧
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-56,(知识点:电源模块,DCDC电源,LDO电源,原理及其特点)
  • CVE-2025-5947 漏洞场景剖析
  • SpringBoot3.x入门到精通系列:2.5 整合 MyBatis 详解
  • 井盖识别数据集-2,700张图片 道路巡检 智能城市
  • [硬件电路-134]:模拟电路 - 运算放大器常见运算:两模拟信号相加、相减、单模拟信号的积分、微分...
  • 如新能源汽车渗透率模拟展开完整报告
  • 老电脑PE下无法读取硬盘的原因
  • node.js常用函数
  • 【代码详解】Triplane Meets Gaussian Splatting中triplane部分解析