Windows10 下載並編譯指定版本chromium原始碼

2023-10-19 12:00:42

1、一些資訊

當前 Chrome 、Edge 都是基於 Chromium 核心開發的瀏覽器。

眾所周知的原因,你無法直接存取到上面的 Git 倉庫,需要自己準備代理

2、確定使用的版本

Chrome 瀏覽器的關於頁面截圖如下:

通過以上得知,Chrome 是基於 Chromium 的 tag 103.0.5060.66 開發的,也可以間接說明,這個版本比較穩定,可用。所以,我也打算選用這個版本的 Chromium 程式碼來編譯。

3、找到對應版本的構建說明

確定了版本號,然後就是找到對應的編譯說明。

用瀏覽器開啟 https://chromium.googlesource.com/chromium/src.git ,在左側 Tags 列表找到對應版本的連結:

 

找到 103.0.5060.66 版本,點選進入,或者直接存取:https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5060.66

捲動到頁面底部,看到 README.md 的說明:

不要直接使用 git clone 克隆倉庫,而是根據後面的連結指引來獲取程式碼。因為編譯時依賴的第三方庫並不在這個 git 倉庫裡,需要使用專用工具來獲取。

根據指引,最終找到 Windows 平臺的構建說明頁面:https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5060.66/docs/windows_build_instructions.md

因為不同的 tag 對 Visual Studio 和 Windows 10 SDK 的版本要求不一樣,所以我們必須找到對應版本的編譯說明頁面。

4、系統要求

  • 具有至少 8GB 記憶體,強烈建議超過 16GB。
  • 硬碟至少有 100GB 的可用空間,且為 NTFS 格式。
  • 適當版本的 Visual Studio,後面會講。
  • 系統為 Windows 10 或更高版本。

我的機器是一臺筆記型電腦,16GB 記憶體,CPU 是 AMD Ryzen 7 4800U,硬碟 500GB SSD,作業系統是 Windows 10 專業版。

5、安裝 Visual Studio

需要安裝 Visual Studio 2017 (>=15.7.2),推薦 Visual Studio 2019 (>=16.0.0) 。有時 VS 版本太高了也不行,例如 Chromium 95 的編譯不能用 VS2022。

我自己安裝的是 Visual Studio 2022 專業版,下載地址:https://visualstudio.microsoft.com/zh-hans/downloads/

安裝的時候,左側勾選使用 C++ 的桌面開發,右側勾選 C++ ATL 生成工具,其他項預設就可以了:

安裝完成後,需要在系統中設定環境變數:

變數名 vs2017_install 或 vs2019_install 或 vs2022_install 是根據你安裝的 Visual Studio 版本來定的,變數值就是具體的安裝目錄。

6、安裝 Windows 10 SDK

頁面中要求安裝 10.0.20348.0 這個版本的 Windows 10 SDK,下載地址是:https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/

注意,別下載錯了,必須安裝指定版本的 SDK,低了高了都不行!

安裝的時候,直接選預設項就行了,確保勾選了 「Debugging Tools For Windows」:

安裝完成後,還需要設定環境變數 WINDOWSSDKDIR,值是 Windows 10 SDK 的安裝目錄:

7、安裝 depot_tools

下載地址 https://storage.googleapis.com/chrome-infra/depot_tools.zip,將其解壓至 D:\src\depot_tools 目錄。

注意:不要使用滑鼠拖拽或複製貼上,否則其中 .git 目錄可能不會正常複製過來,請使用 zip 壓縮包管理工具直接解壓到目標目錄。

解壓完成後,將 depot_tools 目錄新增到 PATH 環境變數。確保要在你已經安裝的 git 和 python 前面,因為 depot_tools 內建了 git 和 python 包。為了省事,我直接把它放到最前面:

還需要再新增一個環境變數 DEPOT_TOOLS_WIN_TOOLCHAIN,其值為 0,作用是讓 depot_tools 使用本地安裝的 Visual Studio 版本(預設情況下,depot_tools 將嘗試使用 google 內部版本):

需要關閉 win10 系統中的 python 別名(開始選單→設定→應用→應用執行別名):

8、depot_tools 初始化

使用管理員身份執行 CMD 命令提示字元,它的路徑是 C:\WINDOWS\System32\cmd.exe,切忌不可以用 cygwin、PowerShell 代替。

建議關閉防毒軟體,因為初始化會下載第三方依賴包,可能會被防毒軟體攔截。

在 CMD 下通過環境變數設定 HTTP 代理(因為我是通過 HK雲伺服器 + Xshell隧道 + Charles代理 的方式上網,所以要單獨設定,如果你已經使用其他軟體設定了系統全域性代理則可以忽略):

set HTTP_PROXY=http://127.0.0.1:8888
set HTTPS_PROXY=http://127.0.0.1:8888

如圖(記得每個新建的 CMD 視窗都要設定一遍代理):

執行 gclient 初始化(這個指令只需要執行一次):

設定一下 Git 預設項:

# 設定git使用者名稱和email,如已設定請跳過
git config --global user.name "My Name"
git config --global user.email "[email protected]"

# 檢出程式碼時不自動轉換換行符(為true時Windows下會將檢出檔案的換行符\n轉成\r\n)
git config --global core.autocrlf false

# 忽略檔案許可權的變化
git config --global core.filemode false

# 所有的分支都支援rebase
git config --global branch.autosetuprebase always

9、拉取程式碼

將 CMD 的工作目錄切換至 D:\src 目錄(確保有100GB可用空間),建立 chromium 目錄(也可以換成其他名稱)並切換至該目錄,指令:

cd /d D:\src
mkdir chromium && cd chromium

如圖:

拉取 Git 倉庫程式碼,有兩種方式:一種是直接從 Google 的程式碼倉庫拉,另一種是從國內 Gitee 映象倉庫拉。後者快一點,但可能沒有最新版本。

第一種,從 google 拉取(需要代理):

git clone --depth 100 -b 103.0.5060.66 https://chromium.googlesource.com/chromium/src.git src

第二種,從 gitee 拉取(不需要代理):

git clone --depth 100 -b 103.0.5060.66 https://gitee.com/mirrors/chromium.git src

# 還原git倉庫地址
cd src
git remote set-url origin https://chromium.googlesource.com/chromium/src.git
cd ..

引數說明:

  • --depth 100 意思是拉取深度為100,這將會拉取一些 log,因為編譯指令碼會基於倉庫的 log 反查版本釋出時間。如果這個值太小,可能會查不到,因而報錯。所以,建議設為 100 或更大些。或者,直接去掉這個引數,但這樣將拉取全部的 log,特別慢。
  • -b 103.0.5060.66 指定拉取的 tag 版本。

我使用第二種方式拉取:

注:我沒有使用官方的 fetch chromium 指令,是因為這個指令拉取的是主分支最新程式碼。

10、生成 .gclient 檔案

指令:

gclient config --unmanaged https://chromium.googlesource.com/chromium/src.git

如圖:

 

11、同步第三方依賴

第三方依賴,是指編譯 chromium 時用到的軟體,在 Windows 和 Linux 上分別使用不同的依賴包,它們並沒有包含到 chromium 的倉庫裡。

指令是:

gclient sync

等同於:

gclient sync --nohooks
gclient runhooks

注:在 runhooks 階段,指令碼會呼叫 PowerShell 下載軟體包,而 PowserShell 使用的是系統的代理。使用 Charles 代理的話,記得啟用 Windows Proxy,僅通過環境變數設定代理是不夠的。

執行指令後,要下載幾個 G 的依賴包,比較慢,視窗也會輸出 「Still working on」 的提示,防止假死被誤關:

根據自身網路環境不同,下載完成可能需要幾個小時,請耐心等待。如果執行意外中斷,可以重複執行上述指令繼續下載。

執行完畢如下(Running hooks: 100%):

中間的這個提示可以忽略不管:

NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.

12、編譯偵錯版瀏覽器

進入 D:\src\chromium\src 目錄編譯:

cd src

# 生成方案
gn gen out\Default

# 編譯
autoninja -C out\Default chrome

如圖:

指令 gn gen out\Default 生成的方案預設是編譯為偵錯版的瀏覽器。

編譯過程很久,根據機器效能決定,持續幾個小時是正常的。如果意外中斷,可再次執行 autoninja -C out\Default chrome 繼續編譯。

編譯完成後,可開啟 D:\src\chromium\src\out\Default\chrome.exe 執行瀏覽器,顯示為開發者內部版本:

13、編譯正式版瀏覽器

進入 D:\src\chromium\src 目錄,執行:

gn args out\Release

彈出一個記事本檔案編輯框,讓我們輸入編譯引數,填寫:

target_os="win"
target_cpu="x64"
is_component_build=false
is_debug=false
is_official_build=true

儲存後,報錯了:

根據提示,在 .gclient 檔案中新增設定項 "checkout_pgo_profiles": True

然後執行 gclient runhooks 拉取依賴,完成後,重新執行 gn args out\Release

最後,執行 autoninja -C out\Release mini_installer 編譯。

編譯完成後,可在 D:\src\chromium\src\out\Release\mini_installer.exe 得到安裝程式。

14、程式的斷點偵錯

以管理員身份執行開始選單 Visual Studio 2022 資料夾的 「x64 Native Tools Command Prompt for VS 2022」 程式:

執行:

devenv /DEBUGEXE D:\src\chromium\src\out\Default\chrome.exe --single-process

將會啟動 VS2022,按快捷鍵 Ctrl + O 開啟原始碼檔案,如 D:\src\chromium\src\net\url_request\url_request.cc,設定斷點,再按 F5 啟動偵錯: