????????我們的軟件產品使用的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