1. 程式人生 > >菜鳥與 cef 的邂逅之旅(一):cef 原始碼獲取與編譯

菜鳥與 cef 的邂逅之旅(一):cef 原始碼獲取與編譯

一、引言

最近工作中涉及到了有關嵌入瀏覽器控制元件的任務,並且要求支援 H5。之前使用了 wke,但是發現其對於 H5 的支援不夠好,因此只能選擇“聞名已久”的 cef。

cef 是什麼呢:

CEF 全稱 Chromium Embedded Framework, 是一個基於 Google Chromium 的開源專案。 Google Chromium 專案主要是為 Google Chrome 應用開發的,而 CEF 的目標則是為第三方應用提供可嵌入瀏覽器支援。 CEF 隔離底層 Chromium 和 Blink 的複雜程式碼,並提供一套產品級穩定的 API,釋出跟蹤具體 Chromium 版本的分支,以及二進位制包。 CEF 的大部分特性都提供了豐富的預設實現,讓使用者做盡量少的定製即可滿足需求。

如果你是一個小白,在網上林林總總中的 cef 部落格、資源中迷茫惘然,迫切希望找一個靠譜的道路獲取到 cef 的原始碼並且能夠編譯執行,那麼恭喜你,這篇部落格適合你(畢竟我也是一個菜鳥,折騰了好久好久才成功編譯運行了 cef 的原始碼 T_T)。

在此之前,我希望你能夠看一看 cef 的有關資料,大體瞭解下 cef 的有關資訊。網上的資料太過於繁雜,這裡我只推薦一個網址,這個網址蒐集了一些 cef 相關的資源網址,只需要訪問這個網址即可瞭解 cef 的重要資料:

官方文件是英文版的,當然也有中文版翻譯,你可以點開上述連結之後點選 CEF General Usage中文版,歡迎查閱

進行訪問。

說了這麼多,接下來讓我們開始吧!

二、cef 原始碼獲取

cef 的原始碼因為某種眾所周知的原因,國內很難成功下載下來,需要非常高超的姿勢才能夠成功獲取。

不過,幸而我加入了一個大神群,裡面有位仁兄提供了 cef 的原始碼,這裡貼出我的百度雲連結方便大家獲取:

大家點選上述連結,下載即可,大概 100 多 MB。

三、CMake 下載安裝

這裡想要編譯我們的 cef 原始碼,還需要一個給力的工具:CMake。

CMake 又是什麼呢:

CMake 是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程)。他能夠輸出各種各樣的 makefile 或者 project 檔案,能測試編譯器所支援的 C++ 特性,類似 UNIX 下的 automake。

這裡,我們可以使用 CMake 直接編譯生成我們 Windows 平臺下的 Visual Studio 解決方案檔案,之後就可以使用我們熟悉的 Visual Studio 來開啟解決方案進行編譯了。

CMake 下載地址:

其中,選擇如圖連結進行下載即可(CMake 的安裝檔案,如果有興趣可以點選上面的連結檢視 CMake 的原始碼)

Get CMake

下載完成之後,預設安裝即可。

四、使用 CMake 編譯 cef

此時,萬事俱備只欠東風,我們可以開始幹活了!

解壓我們的 cef 原始碼,可以看到如下的目錄結構:

cef diretory

此時,我們看到了 CMakeLists.txt 檔案,這個檔案就是 CMake 用來編譯 cef 的配置檔案。

想要具體瞭解 CMake 的原理的同學可以點選這個連結進行學習:

這個教程裡面會手把手教你寫一個專案並且使用 CMake 編譯出一個 Visual Studio 的解決方案檔案。這個例子走一遍之後,你或許會對 CMake 有更加深刻的瞭解。

這裡扯遠了,其實這裡你不瞭解 CMake 的工作原理也沒事,因為我們有 CMake 的 GUI 工具幫助我們:

CMake

開啟我們的 CMake 的 GUI 工具,注意這裡有兩個目錄,接下來分別對這兩個目錄進行解釋:

  1. Where is the source code: 這一個目錄中填入我們解壓出來的 cef 原始碼的本地路徑

  2. Where to build the binaries: 這一個目錄填入我們想要建立的 cef 專案的本地路徑(這裡我新建了一個資料夾 cef,用來裝載編譯好的 cef 專案)

然後我們點選 Configure 按鈕:

configure

這裡,點選了 configure 之後會讓你配置編譯器,這裡我本機安裝的是 Visual Studio 2017,自然就選擇了該項(最後也就生成 Visual Studio 2017 的解決方案)。

這裡我們會看到 configure done 字樣:

configure done

紅色的框不用理會,之後我們再點選 Generate 按鈕:

generate

此時,我們看到了 generate done 的字樣,證明我們的專案已經編譯好了。

此時,我們可以開啟我們剛才新建的資料夾 cef 中,點選 cef.sln 開啟解決方案了。

五、編譯執行 cef

這裡,我們點選 生成解決方案,編譯過程中可能會出現防毒軟體的提示資訊,一定要及時選擇通過。

順利的話,這裡應該是成功編譯不出任何差錯的。

在這個專案中,有兩個專案可以執行,一個是 cefclient,這是官方文件中推薦學習和使用的專案,是使用 cef 生成一個新的專案最需要借鑑的專案;另一個是 cefsimple,這個專案僅僅彈出一個網頁,並且寫死了訪問地址,如果想要執行它,必須修改一下里面的預設網址(預設為 www.google.com 國內無法訪問):

// simple_app.cc
...
if (url.empty())
    url = "http://www.baidu.com";
...

看看執行的效果吧:

cefsimple:
cefsimple

cefclient:
cefclient

大功告成!

完結!撒花! ^_^

六、總結

cef 的學習主要還是要看官方文件的,這一點上,我也在路上。

剛開始想要找 cef 原始碼時,花了不少的時間,找了不少 demo 基本沒有直接到手就可以成功編譯執行的。於是我就悉心下來看官方文件,之後再在幾篇部落格的幫助下,接觸並且學習了 CMake,再之後在一個群裡方便的獲得了 cef 的原始碼,最後成功編譯執行也就是順利成章的事了。

這段時間會一直研究 cef:

To be Stronger!