前言:2017年2月6號谷歌宣布iOS版的Chrome瀏覽器的代碼并歸到Chromium項(xiàng)目開源出來了,正好自己最近做的項(xiàng)目瀏覽器相關(guān),心想去扒一扒Chrome的代碼找一些好東西出來。
源代碼編譯
由于源代碼中大部分都是C++的代碼,并且沒有工程文件,也是無法使用IDE打開的,代碼閱讀起來還是非常吃力了,想著還是編譯一下代碼用Xcode來閱讀。筆者參考了一篇大神的博客來一步步的開始編譯源代碼,這里主要是對自己遇到的一些問題進(jìn)行記錄,防備以后忘記了。
工具準(zhǔn)備
由于Chromium的源碼都是基于Google自己的depot_tools進(jìn)行構(gòu)建的,所以第一步就是安裝depot_tools工具包,首先我是使用Mac電腦來編譯的,depot_tools的安裝很簡單,直接從Chromium開源地址找到depot_tools對應(yīng)的項(xiàng)目文件夾并下載對應(yīng)的壓縮包到本地,解壓到任意目錄并添加到環(huán)境變量(注意bash和zsh),如下:
CHROME_DEPOT_TOOLS=/xxx/xxx/depot_tools
export PATH=$PATH:$CHROME_DEPOT_TOOLS:
工具包安裝好之后,就可以使用里面的很多的命令了,其中fetch、ninja和gn就是我們后面要用到的命令。
源碼下載
由于Chromium的源碼有幾十萬個(gè)文件,項(xiàng)目非常大,我這邊下載下來解壓好有10個(gè)G的大小。根據(jù)我參考的博客主要有兩種下載源碼的方式:
使用工具包中fetch命令下載源代碼
fetch chromium --no-history
使用git clone下載源代碼
git clone https://chromium.googlesource.com/chromium/src
//如果上面下載失敗了并報(bào)了下面的錯(cuò)則使用下面命令繼續(xù)下載,節(jié)省時(shí)間
//fatal: The remote end hung up unexpectedly
//fatal: early EOF
//fatal: index-pack failed
git config --global core.compression 0
git clone --depth 1 https://chromium.googlesource.com/chromium/src
可能大家和我一樣都是先用git clone先進(jìn)行了嘗試,并且下載好了源代碼,這里我很想哭一會。。。我在走投無路的時(shí)候選擇fetch命令重新下載了才發(fā)現(xiàn)git clone下載下來的源代碼是不全的,少了好多的文件。
開始編譯
工具安裝好了源代碼也下載好了,現(xiàn)在可以執(zhí)行下面命令生產(chǎn)build的文件:
gn gen out/gn --ide=xcode //–ide=xcode是為了能夠使用蘋果的XCode進(jìn)行可視化進(jìn)行調(diào)試
這個(gè)命令卡了好一會兒,從gn.py的源代碼中才發(fā)現(xiàn)需要配置一個(gè)全局變量CHROMIUM_BUILDTOOLS_PATH,這個(gè)全局變量是要配置build_tools的路徑的,如下圖所示:

CHROMIUM_BUILDTOOLS_PATH=/xxx/xxx/src/buildtools
export CHROMIUM_BUILDTOOLS_PATH
上面這個(gè)文件夾就是我說git clone不靠譜的原因,因?yàn)?code>git clone下來的源碼里面沒有這個(gè)文件夾。
最后一步就是編譯了,執(zhí)行下面命令:
ninja -C out/gn chrome
上面這個(gè)命令我執(zhí)行了5個(gè)小時(shí),可能是我的Mac配置太低了吧。運(yùn)行完之后就可以在目錄out/gn找到了對應(yīng)的.xcodeproj文件,點(diǎn)擊out/gn/Chromium.app/Contents/MacOS/Chromium文件,就可以直接打開Chrome瀏覽器了,并且用Xode的attach process可以進(jìn)行debug了。
總結(jié):Chrome源碼閱讀這條路上我只是一個(gè)小白,學(xué)一步記一步,有問題的地方請不吝賜教。