我们的软件产品使用的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.pswp.cn/news/917534.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917534.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917534.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elastic 9.1/8.19:默认启用 BBQ,ES|QL 支持跨集群搜索(CCS)正式版,JOINS 正式版,集成 Azure AI Foundry

作者:来自 Elastic Mark Doncov 今天,我们很高兴宣布 Elastic 9.1 和 8.19 正式发布! 是的,又有好消息 —— 我们将 8.x 系列最终延长到 8.19,这样那些还在等待升级到 9.x 的用户也能享受到许多新功能。 Elastic 9.1…

Redis面试精讲 Day 8:Stream消息队列设计与实现

【Redis面试精讲 Day 8】Stream消息队列设计与实现 文章标签 Redis,消息队列,Stream,面试技巧,分布式系统,后端开发 文章简述 本文是"Redis面试精讲"系列第8天,聚焦Redis 5.0引入的Stream消息队列。文章深入解析Stream的核心概念与实现原理&#xff0…

【01】大恒相机SDK C++开发 —— 初始化相机,采集第一帧图像、回调采集、关闭相机

文章目录1 初始化相机&#xff0c;采集第一帧图像2 回调方式采集图像3 视频教程1 初始化相机&#xff0c;采集第一帧图像 #include <iostream> #include <GalaxyIncludes.h> using namespace std;int main() {//首先&#xff0c;对相机资源进行初始化IGXFactory::…

Windows下定位Mingw编译的Qt程序崩溃堆栈

一、dump和pdb是什么 在Windows系统下&#xff0c;当我们写的程序跑在客户的机器上&#xff0c;因为一个bug&#xff0c;导致程序崩溃&#xff0c;我们该如何定位并修复这个bug呢&#xff1f; 有人会说记录日志&#xff0c;即便有日志&#xff0c;也是不好定位的&#xff0c;因…

.net依赖注入框架 Autofac和MEF的对比

Autofac 默认需要显式注册每个类型&#xff0c;这是它与MEF在模块化设计上的主要区别。以下是具体对比说明&#xff1a;1. Autofac 的基本注册方式 Autofac 必须通过代码明确注册每个需要注入的类型&#xff08;除非使用特殊扫描机制&#xff09;&#xff1a; var builder new…

Python 使用 asyncio 包处理并 发(使用asyncio包编写服务器)

使用asyncio包编写服务器 演示 TCP 服务器时通常使用回显服务器。我们要构建更好玩一点的示 例服务器&#xff0c;用于查找 Unicode 字符&#xff0c;分别使用简单的 TCP 协议和 HTTP 协议实现。这两个服务器的作用是&#xff0c;让客户端使用 4.8 节讨论过的 unicodedata 模块…

Node.js (Express) + MySQL + Redis构建项目流程

以下是使用 Node.js (Express) MySQL Redis 构建完整项目的详细流程&#xff0c;涵盖环境搭建、架构设计、核心代码实现和部署优化&#xff1a;一、项目初始化 1. 创建项目目录 mkdir my-project cd my-project npm init -y2. 安装基础依赖 npm install express mysql2 redis…

Python3 中使用zipfile进行文件(夹)的压缩、解压缩

一、文件压缩与解压缩模块 zipfile简介 zipfile 是 Python 标准库中用于处理 ZIP 压缩文件的模块&#xff0c;提供了创建、读取、写入、解压 ZIP 文件的完整功能。它支持多种压缩算法&#xff0c;无需安装额外依赖&#xff0c;是处理 ZIP 格式的首选工具。 核心功能与常用类 zi…

在Java客户端使用Redis

目录 第一步&#xff1a;开放Redis外部连接配置 第二步&#xff1a;配置端口转发 第三步&#xff1a;在IDEA中导入依赖 第四步&#xff1a;编写代码命令 连接环境&#xff1a;Java客户端为本地IDEA&#xff0c;Redis服务器安装在云服务器Ubuntu系统中。 第一步&#xff1a;开…

【MySQL】MySQL索引—B树/B+树

目录 1. 数据库索引 1.1 索引的概念 1.2 索引的特点 1.3 索引查询对比普通的查询 1.4 索引的操作 1.5 索引的原理 1.6 B树 1.7 B树 1.8 B树的优点 1. 数据库索引 1.1 索引的概念 数据库的索引是一种特殊的数据结构&#xff0c;里面包含着数据表中所有记录的引用&…

jQuery Mobile 面板详解

jQuery Mobile 面板详解 引言 随着移动设备的普及,移动网页开发变得越来越重要。jQuery Mobile 是一个基于 jQuery 的移动网页开发框架,它提供了一套丰富的 UI 组件和主题,使得开发者可以快速构建出美观、响应式的移动网页。在 jQuery Mobile 中,面板(Panel)是一个非常…

Python中的import和from...import有什么区别?

文章目录 前言 一、import导入模块 导入模块并给它一个别名 语法格式 二、from...import导入特定项 1.导入模块中的特定项 2.导入模块中的所有项 2.1 命名空间核污染 2.2 性能影响 总结 前言 在Python编程中,模块和包的导入机制是编写可维护、可扩展代码的核心。深入理解Pyth…

vscode提示“无法使用 compilerPath 解析配置”解决办法

0 问题描述 使用vscode的Remote-SSH插件连接安装在虚拟机上的Windows10进行远程开发时&#xff0c;出现如下提示&#xff1a;无法使用 compilerPath 解析配置:“D:\mingw64\bin\gcc.exe” 所有包含C库头文件的文件都被标红提示错误&#xff1a;1 问题原因 vscode没有设置正确的…

信噪比(Signal-to-Noise Ratio, SNR)详细介绍

信噪比&#xff08;Signal-to-Noise Ratio, SNR&#xff09;信噪比&#xff08;Signal-to-Noise Ratio&#xff0c;SNR&#xff09;是衡量信号质量的重要参数&#xff0c;表示有用信号的功率与背景噪声功率的比值。SNR在通信、音频处理、视频处理以及其他电子信号处理领域中具有…

Nginx 相关实验(1)

nginx源码编译 本实验采用nginx源码编译的安装方式&#xff0c;需要准备一个tar包&#xff0c;可从nginx官网上下载。 下载地址&#xff1a;nginx: downloadhttps://nginx.org/en/download.html 将下载好的压缩包传到虚拟机中的自定义目录下 [rootwebserver ~]# ls anacond…

【选型】HK32L088 与 STM32F0/L0 系列 MCU 参数对比与选型建议(ST 原厂 vs 国产芯片)(单片机选型主要考虑的参数与因素)

国产 vs ST 单片机在工业控制中的性能对比分析 HK32L088 与 STM32F0/L0 系列 MCU 参数对比与选型建议 工业控制领域 MCU 选型:国产航顺 HK32 与 ST 原厂芯片深入比较 国产 MCU 是否可替代 ST?基于发电机控制应用的深入评估 从数据手册看 MCU 制造工艺差异:HK32L088 vs S…

LLM Prompt与开源模型资源(1)提示词工程介绍

学习材料&#xff1a;https://www.hiascend.com/developer/courses/detail/1935520434893606913学习时长&#xff1a; 预计 30 分钟学习目的&#xff1a; 了解提示工程的定义与作用 熟悉提示工程的关键技术相关概念 掌握基于昇腾适配的大模型提示工程的入门及进阶指南 提示…

kafka与其他消息队列(如 RabbitMQ, ActiveMQ)相比,有什么优缺点?

Kafka、RabbitMQ 和 ActiveMQ 是三种最主流的消息中间件&#xff0c;它们的设计和适用场景有所不同。 我们可以通过一个简单的表格来快速了解它们的核心区别&#xff1a; 核心对比一览特性 / 维度KafkaRabbitMQActiveMQ核心模型分布式、持久化的日志系统 (Dumb Broker / Smart …

Kubernetes架构和部署

k8s组件 master节点:管理节点 管理平面组件 api server : api gateway controller manager scheduler etcd 数据库 worker节点:被管理节点,运行容器 kubelet:k8s agent container runtime:docker,containerd,cri-o kube-proxy:service 网络 कुबेरनेट…

建造者模式及优化

建造者模式是一种创建型设计模式&#xff0c;它将复杂对象的构建过程与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。核心思想是指挥者定流程&#xff0c;建造者填细节&#xff0c;通过多个步骤逐步构建对象&#xff0c;并允许灵活组合这些步骤以生成不同配置的…