Google Chrome 的開發團隊是怎麼開發不同平台版本的?
個人猜測應該是同一批開發人員, 每個版本號開發完成後,再導出針對不同平台的最終版本.
很好奇是如何高效的完成開發,跨平台兼容的.1.主要的開發環境是什麼 vs, xcode, eclipse.....?
2.技術上如何兼容不同平台 ?確實是牛逼的產品, 關於如何開發的, 越詳細越好.....
Sundar Pichai 當年的成名作, 帶領10幾個頂級程序員, 秘密研發的項目
謝邀。
Chromium是一個開源的代碼庫,chrome是chromium加上一些不方便開源的東西(例如adobe flash,word插件)。
開發的時候把代碼git pull到本地,然後隨便用什麼IDE編輯(我用的是sublime,組裡大部分是vim粉)。編譯是用一個叫ninja的build system,每個directory下都有個叫BUILD.gn的config用來設置參數和dependency,用commandline flag設置編譯的類型(debug,release等)和平台(Android,OSX,Win等)。ninja的doc如下
https://chromium.googlesource.com/chromium/src/+/master/docs/ninja_build.md重頭編譯一遍chrome需要半個小時,但實際改動的時候只會花幾分鐘編譯修改過的component。每次sync完都需要重新編譯一遍,我一般就趁這時間去打會乒乓球什麼。。。
關於不同平台,chromium大部分庫都是公用的,小部分platform-specific的庫用宏/變數來控制。看chromium代碼經常會看見類似
if defined(OS_WIN),if platform == "linux" 之類的代碼,例如https://cs.chromium.org/chromium/src/PRESUBMIT.py?dr=CSsq=ALWAYS_DEFINED_MACROSsq=package:chromiuml=1986
https://cs.chromium.org/search/?q=if+defined+OS_WINsq=package:chromiumtype=cs本質上來說還是在代碼中寫好各種平台,然後不同平台下用不同的flag控制。
push之前先要跑下測試,新加的代碼必須有unit test覆蓋。提交完以後server上會再run一遍測試,看結果沒什麼問題就能commit了。改動會在最近的一個release中出現。
還想深入了解或者加入Chromium project的可以參考這個鏈接
https://www.chromium.org/getting-involvedchromium代碼庫
https://cs.chromium.org/PS: 所有鏈接都需要翻牆1. 開發環境: chrome用的自己的構建工具鏈。詳情看chromium的編譯。就是一些編譯腳本,編譯的話,可以在三個平台上簡單的執行構建腳本就ok了。至於開發者用什麼編輯器,那就不固定了,大到IDE vs或xcode,小到sublime或vim都可以,看程序員個人喜歡。
2. 跨平台: 比較基礎的跨平台架構設計就可以理解。將系統相關的函數部分通過宏定義來各自實現。封裝底層,上層代碼通用就可以了。各平台都應該有各自的開發人員,但互不影響,上層代碼也可通用,這主要歸功於優秀的軟體架構設計與管理。有兩個程序架構,我覺得好厲害,一個是Netscape,一個是Eclipse,而且他們都是大約二十年前就開始設計了,如果時間退到那時候,能設計出一個架構來現在還在跑,太了不起。
所有瀏覽器程序都大量參考了Netscape,很多類和類的關係都很類似。我記得有文章說google曾經在Mozilla開源項目參與很多,後來獨自發展了chrome,好像選用的內核也變了,但是,我看到一些類都很相似。
我感覺跨平台不是最大的難處,我大部分時間是在搞Mozilla,代碼裡面有很多宏,很多都是為了跨平台的。然後就是有很多編譯選項。按照他既定的路線和編程習慣,要維護跨平台版本比較容易。Chromium一直也想搞,可惜沒有時間,國內好多瀏覽器都是基於Chromium做的可以看下chrome的官方日誌https://chrome.googleblog.com/
推薦閱讀:
※既然.NET平台如此優秀,為什麼微軟不推廣到Linux、Mac等平台上?
TAG:GoogleChrome | 谷歌Google | 開發團隊 | 跨平台 |