Hi,大家好,歡迎大家觀看由IT貓之家打造的【網絡爬蟲教學】蟲師終極武器之Chromium定制開發(fā)系列教學文章的第三篇,如果您是第一次觀看本系列教程,請先移步到這里看完前兩篇后再回來哦!大家在學習的過程中,有任何疑問可以留言或加入我們的QQ技術交流群進行探討: 544185435
概述
在前面的文章中我們有提及過,本系列教學文章,主要圍繞著如何打造一款隨機化指紋的高匿瀏覽器而寫,但其實想要二次開發(fā)瀏覽器還是需要掌握一些必要的知識的,其中我們還必須要懂CPP語言、因為在開發(fā)過程中,所有功能都將通過它來實現(xiàn),同時我們還需熟悉chromium的目錄結構,以便于可以快速的定位文件所在目錄以及解決開發(fā)過程中遇到的各種難題,如果您只為了編譯瀏覽器而編譯,那么上一篇文章就已經可以滿足您的需求,否則您可以繼續(xù)往下觀看我后續(xù)的文章!
關于Chromium
Chromium 是谷歌為發(fā)展自家瀏覽器Chrome而開啟的開源項目,核心分為兩個部分(不包含其它庫),它們分別是browser與renderer(包括Blink渲染器和Web引擎);其中browser主要負責所有的UI和I/O操作,而renderer是由browser驅動的(通常)泛指每個選項卡的子進程。它被嵌入到Blink中用于渲染與布局。

Chromium頂級項目
當我們拉取完整個chromium的源碼后,我們可以看到目錄中有許許多多的頂級目錄,我們需要理解它們的關系以及相互的作用,因為Chromium 是一個代碼量高達百萬級別的大型項目,而面對這一龐然大物,我們只有理解了它的構造以及每個項目之間的對應關系后才能有效的提供我們的開發(fā)效率。

其中主要的頂級項目目錄以及其相應的作用如下:
android_webview?:在src/content 中提供適合集成到安卓平臺的外觀展示,值得注意的是,它不能單獨作為APK程序開發(fā)。
apps:參考如何構建Chrome應用程序。
base: 提供所有子項目之間共享的通用代碼,包含字符串操作、通用的應用程序等,只有當項目必須要在項目之間共享時才會在此添加內容。
breakpad:提供Google開源項目的崩潰報告(僅供參考),如果大家按照我前面文章的方式拉取的Chromium,則不會出現(xiàn)該目錄。
build: 存放所有工程共用的編譯配置。
cc: Chromium 的渲染合成層,是整個Chromium最復雜的部分。
chrome: Chromium瀏覽器。
chrome/test/data:?該目錄存放一些可用于測試性的數(shù)據文件。
components: 該目錄用于存放瀏覽器相關依賴的組件。
content:提供多進程沙盒瀏覽器實現(xiàn)所需的核心代碼,詳情可參考:Content模塊的實現(xiàn)。
device:提供跨平臺底層硬件API抽象層。
net: Chromium開發(fā)的網絡庫,在使用webkit下的 test_shell 時可以單獨使用。
sandbox: 沙盒項目,阻止黑客通過渲染器修改系統(tǒng)。
skia + third_party/skia: Google的Skia圖形庫,在ui/gfx目錄中附加類包裝Skia。
sql:提供sqlite相關的模塊。
testing:該目錄包含了谷歌開源的GTest項目,僅用于單元測試。
third_party: 該目錄提供包含200多個小型或大型的第三方庫,如圖像解碼庫、壓縮算法庫、Web引擎Blink(Blink是基于Webkit開源協(xié)議的繼承)為取代webkit將HTML,CSS和腳本轉換為繪畫命令和其他狀態(tài)而開發(fā)的內核渲染器。詳情可以參閱:第三方軟件包。
ui/gfx:共享的圖形庫,提供用于構建Chromium UI的基礎。
ui/views: 一個簡單的開發(fā)框架,用于UI開發(fā)、渲染并提供布局與處理機制,大多數(shù)瀏覽器的UI都是基于該框架實現(xiàn),該框架中僅包含了一些基礎的對象,還有些特定的對象位于: chrome/browser/ui/views 之中。
url: Google開源的URL解析和規(guī)范庫。
v8: 谷歌開發(fā)的一款基于Javascript的解釋引擎。
由于Chromium更新是非常頻繁的從官網我們可以看到它基本每日一更,在這當中可能有些庫或接口已經遭到廢棄,或已被別的組件取締,但就目前而言,以上羅列的所有項目目前均可有效或正在處于應用階段,展望未來,新版本的指南也將會更詳細的描述其它相關的項目及作用。

上圖為Chromium稍微有些過時的依賴關系圖,當中的webkit已被Blink/renderer所取代,較為底層的模塊不可直接引用頂層的代碼(即不可引用包含來自chrome的頭文件)而是通過嵌入API接口與其通信。
快速理解content目錄結構

browser:瀏覽器后端應用程序,負責處理所有I/O與子進程相關通信、與renderer進行通信并且管理網頁的繪制。
common:多進程之間共享的文件(如:瀏覽器與renderer之間、renderer與插件之間等),該代碼專用于Chromium,并不適合安放在base目錄下。
gpu:負責處理GPU進程的代碼,用于處理3D合成,以及包括一些3D相關的API接口。
plugin:在其它進程中運行瀏覽器插件相關的代碼。
ppapi_plugin:可參考peper插件的實現(xiàn)。
renderer: 每個選項卡中渲染的獨立子進程,這將被嵌入到webkit中并與browser進行I/O通信。
utility:在沙盒進程中運行隨機操作的代碼,當瀏覽器進程要對不受信任的數(shù)據運行操作時,將會使用它。
worker:?用于運行HTML5 Web Worker的代碼。
快速理解chrome目錄結構

app: app是最頂級的應用,它在啟動時被加載,并根據當前進程相應的功能分發(fā)到瀏覽器或渲染器,它包含了chrome.exe和chrome.dll兩個項目,除圖像與字符串之類的資源外,您通常不需要修改這些內容。
locales: 用于構建本地DLL項目。
resources:? 存儲圖片與光標資源。
theme: 存放窗口與主題的圖像。
browser:前端包括主窗口、用戶界面和處理所有I/O和存儲的應用程序的后端,處理與rederer渲染器相關的問題。
處理ui特性和功能的ui模型、視圖與控制代碼。
common:存放瀏覽器和渲染器之間共享的Chrome專用模塊。
net:一些chromium專用的頂級網絡模塊,它們應與browser/net合并。
installer: 用于制作安裝包(MSI程序)的源文件及目錄。
renderer:在渲染器進程中執(zhí)行特定的chrome代碼,這會將Chrome的功能(如:自動填充、翻譯等功能)添加到?content?模塊中。
test:
automation:通過使用test來驅動瀏覽器,例如:test/ui、test/startup等等,這常用于瀏覽器自動化通信開發(fā)之中。
page_cycler:在運行頁面中做循環(huán)壓力測試的代碼。
reliability:頁面可靠性測試,用于對頁面加載進行分布式測試,以便于獲取可靠的測試指標以及崩潰情況。
selenium:用于執(zhí)行selenium的測試代碼,它是基于Ajaxy和JavaScript開發(fā)的第三方測試組件。
startup:用于啟動性能的測試。
ui:UI測試用于展示瀏覽器UI、打卡的選項卡等,它通過: test/automation 可以執(zhí)行大多數(shù)操作。
unit:單元測試的基本代碼,單個測試的代碼通常與*_unittest.cc文件放在一起測試。
third_party:專用于Chromium的第三方庫,還有一些第三方庫位于頂級的third_party庫之中。
tools:
build:與構建相關的工具與隨機內容。
buildbot: Buildbot配置。Buildbot管理我們的自動化構建系統(tǒng)。
win: Windows構建相關的東西,包括一些.vsprops用于項目屬性和腳本的文件。
memory:內存工具,包括當前用于設置堆棧選項的gflags。
perf/dashboard:將性能日志(例如:test/startup_test)轉換為數(shù)據和圖形的代碼。
profiles:隨機歷史數(shù)據生成器。用于生成測試配置文件。
總結
以上為本期給大家分享的所有內容,原本打算直接開始著手開發(fā)的,但考慮到許多童鞋可能還沒接觸過Chromium,所以還是很有必要花一篇文章的時間來給大家科普一些相關知識的,總的來說呢,想要二次開發(fā)Chromium,我們必須要理解上述的目錄與結構,這對我們開發(fā)非常有幫助的,那么接下來我將會講解:third_party/blink 這個目錄下與之相關的文件,因為我們自動化的功能全部都在此實現(xiàn)。歡迎大家繼續(xù)參閱!