爲何搞WebKit
現在研究WebKit的人愈來愈多,俺不能免俗,也添�當中。WebKit的火爆也是得益於瀏覽器和WebOS的混戰,隨着Palm WebOS, Chrome OS, Firefox OS和Ubuntu Mobile相繼公佈,WebOS逐漸成爲Android和IOS以外的第三世界,而WebKit也隨之從瀏覽器內核晉升爲Mobile OS的內核,除了IE和Firefox以外,市面上叫得上名字的都是基於WebKit發展起來,Chrome, Safari, Opera, 360......。所以,無論你是從事瀏覽器仍是Mobile的開發,WebKit都是不二的選擇。而我眼下是因爲需要在WebOS上提供一個類似與Chrome for android那樣可以遠程debug的功能,而接觸到WebKit,隨着不斷深刻,也逐漸步入WebKit的開發正軌,也是想把近期的學習歷程記錄下來,也是幫助其它朋友進這個大門,WebKit的資料實在很少。linux
怎樣起步
我就假定你和我同樣,從沒接觸過WebKit,沒寫過c/c++,被Java/PHP等傻瓜式語言慣壞了,對設備底層技術不甚瞭解,在這種狀況下(不可能比這個更糟了),也是可以在一週左右入這個門檻的。正式開工以前先準備如下幾步:
- 學習文章:http://paulirish.com/2013/webkit-for-developers/,固然也有中文版本號:http://www.infoq.com/cn/articles/webkit-for-developers,弄清楚WebKit的幾個概念
- 準備一臺CPU和硬盤較好的電腦,CPU是爲了應付編譯,硬盤是爲了應付大規模代碼的訪問(去年7月份買的mac已不夠用,特意爲此換了SSD)
- 開發平臺最好是Xcode,Visual Studio也行,只是可能會遇到很是多坎、
- 準備一本C++ Primmer Plus放在手邊,研究WebKit同一時候順便把C++也給解決了
- 給予足夠的耐心,應付漫長的源代碼下載和編譯
好了,就這麼多,可以開工了。關於怎樣編譯和調試等問題,我會在興許文章中具體介紹。
開工以前的掃盲
WebKit port
WebKit已發展爲類似與Linux這樣平臺性的框架,已不是單一產品類型的開源項目。它是一個標準和變異的結合體。如下這張圖能很是好說明這點:
WebKit提供了像這張圖這種標準架構和WebCore這種核心庫,但灰色的其它部分都是要依據各自平臺的不一樣而進行替換和移植,也就是談及很是多的port,這裏談的平臺就是各自設備的執行環境,比方mac os x,Android和IOS,所以儘管咱是用WebKit,但可以作的事情還有很是多,WebKit僅僅是提供了流程和框架,裏面有很是多洞需要咱本身去填補的。比方,我現在作的遠程調試功能,在WebKit裏面已在流程上支持,但具體實現上是需要port的,也就致使了僅僅有chrome for android和safari for IOS支持遠程調試。開頭介紹的文章中已羅列出哪些點是標準已實現的,哪些點是差別化的,從這裏面大概就能估計到需要作哪些東西。
學習平臺的選擇
官方的WebKit是以Safari for Mac OSX爲基礎的,Chromium儘管也是基於WebKit,但基本上已經是另一套,還有QT和GTK平臺,有很是多瀏覽器,比方Opera和360都選擇了基於Chromium,那對於咱們這些剛開始學習的人來講該怎樣選擇學習的起點呢?個人感受是,標準的WebKit門檻低一點,文檔要豐富一些,但做爲未來project的方向,Chromium更受歡迎一些,因此,我推薦以官方的WebKit爲起點,而後再延伸到Chromium。後面我會談開發環境的搭建,基於官方的WebKit,再加上XCode,會感受手上很是順滑,不至於像大多數大型開源項目那樣在最開始就把你拒之門外。
開始動手
如下我介紹動手的幾個步驟,可以在你無需瞭解細節的狀況下,把環境搭起來,大多數包含我本身,都仍是習慣於代碼和環境搭建好狀況下,比較有心情和底氣去往下深刻,因此耐心地完畢如下幾步,你就可以在開發環境中啓動WebKit,這裏我介紹的是Mac下的狀況,但在windows和linux會困難一些,起碼我是受阻後就放棄了:
- 升級Mac OSX和Xcode至最新版本號,個人是Mountain Lion 10.8.3和Xcode 4.6。作這個是因爲個人一個哥們用的是lion,用的同樣的步驟,但啓動後一直報內存訪問錯誤,升級系統至最新後就解決了。固然,別忘記了xcode command line
- 取得最新代碼:svn checkout https://svn.webkit.org/repository/webkit/trunk 固然,這個過程是需要耐心的,特別是下載layout test時,爲了未來的一馬平川,忍忍吧
- Xcode的菜單File->Workspace Settings->Build->Derived Data Location一欄選擇Workspace-relative,並輸入WebKitBuild->Done
- Xcode的菜單Product->Scheme->Edit Scheme->選擇scheme: All Source(target WebProcess), Exceutable選擇WebProcess.app
假設你是下載的是最新代碼,環境搭建僅僅僅僅需要以上幾步,當你點擊Run後,就可以開始順利編譯,最後會彈出Safari,實際上它的run的是webkit內核,需要一個Safari來做UI層。WebKit也提供了一個MiniBrowser,這就和Safari不要緊了,啓動方法就是在第四步上的Exceutable選擇MiniBrowser.app就能夠。我當初基於的代碼會有些其它的問題,這裏就不干擾你們了,假設有遇雷的請把錯誤貼出來,我看看遇到過沒。
OK,瞭解基本概念,搭建好了開發和調試環境,我敢相信不論什麼級別菜鳥,都會有信心往下繼續深究了。個人理念就是這樣,無論後面有多難,千萬不要把開頭搞得太複雜,這樣會拒很是多人之門外,這也是我爲何推薦最開始用xcode的緣由,WebKit官方已把編譯中所有細節都隱藏在xcode的項目設置和腳本中了。後面,我會基於源代碼,逐步深刻,和你們一塊兒探究WebKit內核的奇妙和偉大。