Jcef內嵌瀏覽器windows版本的編譯及使用

来源:http://www.cnblogs.com/muzipang/archive/2017/04/17/6582409.html
-Advertisement-
Play Games

背景 去年年底接到的新需求,需要將原來用Swing做的桌面應用中的一個功能做成Web版的,並且要集成到原應用中,換言之就是要使用內嵌瀏覽器。最開始考慮的是JavaFx提供的WebView,優點是不需要其他第三方庫,jdk1.7開始集成。但是開發完成之後發現兩個比較嚴重的問題,一是界面有一個比較複雜的 ...


背景

  去年年底接到的新需求,需要將原來用Swing做的桌面應用中的一個功能做成Web版的,並且要集成到原應用中,換言之就是要使用內嵌瀏覽器。最開始考慮的是JavaFx提供的WebView,優點是不需要其他第三方庫,jdk1.7開始集成。但是開發完成之後發現兩個比較嚴重的問題,一是界面有一個比較複雜的曲線圖會嚴重卡頓,另一個是有幾率會導致虛擬機崩潰,並且速度上也不是很讓人滿意。最後只能考慮換一個內嵌瀏覽器框架,然後就找到jcef,基於chrome,速度相容性都很好。

  關於jcef就不多作介紹,不瞭解的可以戳這裡java-cef,本文主要講解jcef的編譯過程,由於產品只支持windows平臺使用的是32位的jre,所以只編了win32的版本,64位編譯過程基本相同,只需要改變下參數。

編譯環境

  • CMake 2.8.12.2或者更新的版本(我用的免裝版,bin目錄要手動配置環境變數)
  • Git
  • Visual Studio 2015(官網推薦2015,原因是開發者使用的就是2015版本,實測VS2010和VS2013編譯均會報錯)
  • Java 1.8 32位 (官網寫的是1.7或者1.8,實際上使用1.7編譯java部分會有語法錯誤,可以修改源碼規避,建議使用1.8,編譯64位版本使用64位的jdk)
  • Python 2.6或者更新的版本(不支持Python3)

編譯過程

  1. 源碼下載    

  使用Git將下載jcef源碼,clone地址:https://bitbucket.org/chromiumembedded/java-cef.git,當然也可以直接下載Jcef源碼。這裡建議使用Git Clone,因為在使用CMake構建的時候需要用到.git目錄下麵的文件中當前節點的信息來構建jcef_version.h頭文件,如果不是git clone的代碼,沒有git相關的文件編譯會出錯,這個應該是可以通過修改編譯腳本規避,把通過git文件獲取的信息寫死,沒有試過,不細表。    

    

  2. CMake構建VS工程

  在源碼目錄下創建新目錄jcef_build(不可隨意命名),打開DOS進入到新目錄中,輸入命令cmake -G "Visual Studio 14 2015" ..,回車開始構建。此處有坑,我編的時候新裝的VS2015這裡報錯,找不到編譯器,研究了老半天最後找到一句話,VS2015預設安裝不包含C++支持……當時整個人都不好了。如果要編64位的話命 令換成這樣:cmake -G "Visual Studio 14 Win64" .. 。這裡還有一個註意的地方是,這個過程會自動去下載當前Jcef對應的CEF的版本,若果下載不成功可以自己下載之後放到/java-cef/third_party/cef目錄中。CEF版本號可以從源碼目錄下的CMakeLists.txt文件中找到。

CEF下載地址:http://opensource.spotify.com/cefbuilds/index.html  (經常打不開,我FQ才能穩定打開)

 

CMake構建後的C++項目: 

  

  3. VS構建

  使用VS打開jcef_build中的jcef.sln文件,選擇"生成-->配置管理器-->修改為Release和Win32",然後選擇"生成-->生成解決方案",然後等待構建完成。

  4. 編譯java代碼

  使用dos進入到源碼目錄的tools目錄里,執行命令compile.bat win32

  5. 測試運行

  同樣是tools目錄,執行run.bat win32 Release simple或者run.bat win32 Release detailed,瀏覽器正常運行,編譯成功。

    

  6. 打包

  tools目錄下執行 make_distrib.bat win32,源碼目錄下會自動創建打包目錄binary_distrib,裡面包含了api文檔,瀏覽器Demo,使用到的jar和dll以及資源文件。

使用方法

  需要用到的jar: \java-cef\binary_disrib\win32\bin裡面的相關jar包

  

  動態庫以及資源文件等:\java-cef\binary_disrib\win32\bin\lib\win32裡面的所以內容

   

  編碼時導入jcef即可編譯成功,運行時classpath指定上述jar包,將上面的dll等文件win32目錄下的所以內容放在一個目錄中,然後將其指定為-Djava.library.path的值即可,可以參考\java-cef\binary_distrib\win32裡面的run.bat。

一鍵編譯腳本

  build_jcef.bat win32一鍵編譯,腳本是按照可編譯64位寫的,參數用win64就行了,不過筆者沒試過......  

@echo on
@rem 設置路徑
set SRC_PATH=D:\java-cef
set VS_PATH=C:\Develop\VS2015

if "%1" == "" (
echo ERROR: Please specify a target platform: win32 or win64
set ERRORLEVEL=1
goto end
)

cd /d %SRC_PATH%
mkdir %SRC_PATH%\jcef_build
cd /d %SRC_PATH%\jcef_build

@rem CMake構建
cmake -G "Visual Studio 14 2015" ..

@rem VS編譯
@echo VS Building Start
%VS_PATH%\Common7\IDE\devenv.exe %SRC_PATH%\jcef_build\jcef.sln /rebuild "Release|%1"
@echo VS Building End

@rem 編譯java部分
cd /d %SRC_PATH%\tools 
call compile.bat %1

@rem 打包
call make_distrib.bat %1

:end
Exit /B
View Code

 

 結語

  從編譯到開發,以及解決各種bug,jcef的資料太少,走過不少彎路。不過項目總算是順利完成交付,這裡做個筆記,也分享給需要的人,希望能有所幫助。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • jsp
    動態網站的優勢: 1.交互性:即網頁會根據用戶的要求和選擇而動態改變和顯示內容 2.自動更新:即無需改變頁面代碼,便會自動生成新的頁面內容,可以大大節省工作量 3.隨機性:即當不同的時間,不同的人訪問同一個網址時會產生不同的頁面效果 目錄 說明 /bin 存放各種平臺下用於啟動和停止Tomcat的腳 ...
  • 1.動態網頁的優勢? ①交互性:即網頁會根據用戶的要求和選擇而動態改變和顯示內容. ③自動更新:即無需改變頁面代碼,便會自動生成新的頁面內容. ④隨機性:即當不同的時間、不同的人訪問一網址時會產生不同的頁面效果. 4.什麼是動態網頁? 動態網頁是指在伺服器端運行的,使用程式語言設計的互動式網頁, 它 ...
  • 增加動態輸出 整個web應用平臺的關註點在於構建並顯示動態輸出內容。在MVC里,控制器負責構建一些數據並將其傳給視圖。視圖負責渲染成HTML。 從控制器向視圖傳遞數據的一種方式是使用ViewBag 對象,它是一個控制器基類的成員。ViewBag是一個動態對象,你可以給他賦值任意屬性給視圖來渲染用。代... ...
  • VIM一般分幾種模式,通過不同模式來區分輸入的到底是文字還是命令:1. Normal mode(common mode,以下簡稱 c-mode):一進入 VIM 就是處於 c-mode,只能輸入指令,不能輸入文字。這些指令可能是游標移動的指令,也可能是編輯指令或尋找替換指令。2. Insert mo ...
  • 支付基本上是很多產品都必須的一個模塊,大家最熟悉的應該就是微信和支付寶支付了,不過更多的可能還是停留在直接sdk的調用上,甚至和業務系統高度耦合,網上也存在各種解決方案,但大多形式各異,東拼西湊而成。所以這裡我介紹下OSS.PayCenter開源跨平臺支付組件 及其框架設計。並對常用支付模式進行一個 ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 目錄索引 【無私分享:ASP.NET COR ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 AppBox 是基於 FineUI 的通用權 ...
  • 小分享:我有幾張阿裡雲優惠券,用券購買或者升級阿裡雲相應產品最多可以優惠五折!領券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 前言 今天給大家介紹一下在 ASP.NET ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...