導航:首頁 > 源碼編譯 > cef指標源碼

cef指標源碼

發布時間:2023-12-14 21:03:32

① 請問linux中這個源碼包如何安裝

先sudo apt update更新源,然後sudo apt install libqcef-dev
如果還是找不到,去google一下libqcef-dev這個包在哪些repo中有提供,將相應的repo用apt-add-repository添加到源中,或者直接下源碼編譯

② 如何編譯JCEF以及內嵌到桌面應用程序中

前言
在項目中需要在桌面應用程序中內嵌瀏覽器, 嘗試了幾種解決方案,有:javafx, DJNativeSwing,CEF等。覺得CEF效果最好。本文目的是介紹如何編譯和使用jCEF。
主要參考和翻譯了這篇文章java-cef
背景說明
什麼是CEF?
CEF是Chromium Embedded Framework的縮寫,是個基於Google Chromium項目的開源Web browser控制項,支持Windows, Linux, Max平台。除了提供C/C++介面外,也有其他語言的移植版。比如JCEF。
因為基於Chromium,所以CEF支持Webkit & Chrome中實現的HTML5的特性,並且在性能上面,也比較接近Chrome。
誰在用CEF?
各種瀏覽器
早期的雙核瀏覽器(IE + Webkit),有些使用了CEF來作為Webkit內核瀏覽器控制項。
不過對於瀏覽器來說,直接在Chrome上面擴展,其實才是王道,大家現在都這么做了(各種極速瀏覽器)。
Evernote Client (on Windows)
Evernote允許用戶將網頁粘貼到筆記中,還提供了插件用來將網頁保存為筆記。
那肯定是需要在Client上面可以正確的渲染頁面咯,這個任務就交給了CEF。
GitHub Client (on Windows)
GitHub也打包了libCEF.dll,從表現上面看,用來展示項目的ReadMe頁面的,肯定是CEF,其他地方的UI,可能部分也是用頁面來實現的。
QQ
QQ很早之前就通過內嵌IE來實現一些功能和界面。從2013年開始,QQ引入了CEF,對一些之前用IE的地方進行了替換,這樣就可以使用一些基於Webkit的新特性,同時也獲得了速度、穩定性、兼容性方面的優勢。
什麼是JCEF?
簡單來說,JCEF是對CEF進行了一層Java封裝。使用JNI調用CEF的功能。目標是讓java開發者能夠使用CEF框架來開發web browser控制項。
如編譯和使用JCEF?
目前JCEF保持了一個開發分支對CEF進行跟進,在不斷的develop中。我們可以下載JCEF源碼按照下面的步驟手動編譯。
1. 准備環境
需要編譯JCEF需要你的電腦上有如下的開發環境:
CMake version 2.8.12.2 or newer.
Git.
Java version 1.7 or newer.
Python version 2.6 or newer.
對於linux系統,下面幾個發行版是支持的:
Debian Wheezy, Ubuntu Precise, and related.
對於windows系統:
因為JCEF的開發者用Visual Studio 2013 作為開發工具,所以你得准備一個VS2013 來編譯JCEF,否則用其他的編譯器可能會出問題。
對於MAC系統:
需要Apache Ant
2. 下載JCEF源碼
使用git下載JCEF源碼:
#The JCEF source code will exist at `/path/to/java-cef/src`

cd /path/to/java-cef

git clone https://bitbucket.org/chromiumembedded/java-cef.git src

下載CEF源碼:
訪問cef, 根據目標平台(windows or linux or mac)去下載cef最近穩定的分支下載完成後,按照README.jcef描述的文件結構,將下載的內容解壓,並重命名文件夾
比如,對於win64的版本,文件夾目錄會是如下的結構/path/to/java-cef/src/third_party/cef/win64/cefclient.gyp
其中third_party文件夾包含的是JCEF引用的第三方庫文件。
對於linux系統,需要創建symlinks。執行如下指令:
$ sudo ln -s /path/to/java-cef/src/third_party/cef/linux64/Resources/icudtl.dat /usr/lib/jvm/java-7-oracle/jre/bin/icudtl.dat

$ sudo ln -s /path/to/java-cef/src/third_party/cef/linux64/Debug/natives_blob.bin /usr/lib/jvm/java-7-oracle/jre/bin/natives_blob.bin

$ sudo ln -s /path/to/java-cef/src/third_party/cef/linux64/Debug/snapshot_blob.bin /usr/lib/jvm/java-7-oracle/jre/bin/snapshot_blob.bin

3. 手動編譯
運行cmake生成目標平台的項目文件,然後編譯這些項目文件去生成本地的代碼,比如生成jcef和jcef_helper兩個項目的本地代碼。
# Enter the JCEF source code directory.

cd /path/to/java-cef/src

# Create and enter the `jcef_build` directory.

# The `jcef_build` directory name is required by other JCEF tooling

# and should not be changed.

mkdir jcef_build && cd jcef_build

# Linux: Generate 64-bit Unix Makefiles.

# Set the JAVA_HOME environment variable if necessary.

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug ..

# Build using Make.

make -j4

# Mac OS X: Generate 64-bit Xcode project files.

cmake -G "Xcode" -DPROJECT_ARCH="x86_64" ..

# Open jcef.xcodeproj in Xcode and select Proct > Build.

# Windows: Generate 64-bit VS2013 project files.

cmake -G "Visual Studio 12 Win64" ..

# Open jcef.sln in Visual Studio and select Build > Build Solution.

在windows或者linux上,使用compile.[bat|sh]工具來build JCEF的JAVA classes,在MAC上不需要如下步驟,因為java classes已經被cmake生成。
cd /path/to/java-cef/src/tools

compile.bat win64

測試結果是否正確。
使用 run.[bat|sh] 工具來測試JCEF是否工作。
cd /path/to/java-cef/src/tools

run.bat win64 Release detailed

正確結果會得到一個java窗口程序

③ 如何利用CEF3創建一個簡單的應用程序

開始
首先,根據自身所使用的開發平台,可以去 這里 下載對應的發布版本。針對這個教程,我們需要下載1750或者更新的版本。當前支持的平台有Windows, Linux和Mac OS X。每一個版本都包含了當在特定平台上編譯特定版本CEF3時所需要的所有文件和資源。您可以通過包含在里邊的 REDME.txt 文件或者在Wiki上GeneralUsage 中的 Getting Started,了解每個發布版本的具體內容和細節。
編譯發布版本中的項目
以CEF發布版本為基礎開發的應用程序可以使用標準的平台編譯工具進行編譯執行。包括 Windows 平台下的 Visual Studio, Mac OS X 平台下的 Xcode, 以及 Linux 平台下的 gcc/make。針對平台的不同,項目的編譯過程也有些許的不同和要求。
Windows
Windows 平台下編譯 Cefsimple 步驟:
1. 用對應的 Visual Studio 版本打開項目解決方案。舉個例子,如果你安裝的是 Visual Studio 2010, 那麼,打開的就是 cesimple2010.sln。
2. 如果你下載的是 x64版本,請確保你選擇的是 x64的開發平台。
3. 開始編譯。
4. 如果編譯通過,那麼,在當前解決方案的目錄下,將出現「out/Debug」(或者 「out/Release」)文件夾。
5. 執行文件夾下 cefsimple.exe, 確保能正確運行。
載入一個自定義URL
cefsimple項目中默認載入的URL是 google.com,當然,你也可以用自定義的 URL 去替代它,最方便的就是通過命令行搞定。
# Load the local file 「c:\example\example.html」
cefsimple.exe --url=file://c:/example/example.html

除了命令行的方法,也可以通過直接修改在 cefsimple/simple.cpp 文件中的代碼,達到你的目的。
# Load the local file 「c:\example\example.html」

if (url.empty())
url = file://c:/example/example.html;

應用程序組成
所有的 CEF 應用程序都有一下主要組成部分:
1. CEF 的動態鏈接庫 。(在 Windows 平台下就是 libcef.dll)
2. 支持庫。(ICU, FFMPEG等)
3. 資源。(html/js/css, strings等)
4. 客戶端執行文件。(本教程中就是 cefsimple.exe.)
要點(必看)
1. CEF 使用的是多進程。應用程序主進程是瀏覽器進程,而其他子進程是由 renderer, plugins, GPU等創建。
2. 在 Windows 和 Linux 平台下的執行文件可以被主進程和子進程使用。
3. CEF 中所有進程都可以是多線程的。CEF提供了許多功能和介面在不同的線程中傳遞任務。
4. 一些回調方法和函數只能在特定的進程或者線程中使用。在你第一次使用新的回調方法或者函數之前,請確保你已經閱讀了 API 頭文件中源碼,看使用要求。
流程分析
cefsimple 應用程序首先初始化CEF,然後創建了一個簡單的彈出瀏覽器窗口。當關閉了所有的瀏覽器窗口,應用程序就會結束。程序執行流程如下:
1. 系統執行入口點函數(main or wWinMain),並創建瀏覽器進程。
2. 入口點函數:
1. 創建能夠處理進程級別的回調方法的 SimpleApp 實例。
2. 初始化 CEF,進入 CEF 消息循環。
3. 初始化 CEF 之後,調用 SimpleApp::OnContextInitialized() 。這個方法中:
1. 創建單例的 SimpleHandler 。
2. 由 CefBrowserHost::CreateBrowsersync() 方法創建一個瀏覽器窗口。
4. 所有的瀏覽器共享 SimpleHandler 實例, 此實例能定製瀏覽器行為、處理瀏覽器相關回調方法(life span, loading state, title display等)。
5. 當一個瀏覽器窗口關閉的時候,調用 SimpleHandler::OnBeforeClose() 。當所有的瀏覽器窗口全部關閉時,OnBeforeClose() 函數就會執行跳出 CEF 消息循環的行為,退出應用程序。
入口點函數
程序的運行開始於瀏覽器進程中的入口點函數。這個函數會初始化 CEF 以及所有跟操作系統有關的對象。
Windows

#include <windows.h>

#include "cefsimple/simple_app.h"
#include "include/cef_sandbox_win.h"

// Set to 0 to disable sandbox support.
#define CEF_ENABLE_SANDBOX 1

#if CEF_ENABLE_SANDBOX
// The cef_sandbox.lib static library is currently built with VS2010. It may not
// link successfully with other VS versions.
#pragma comment(lib, "cef_sandbox.lib")
#endif

// Entry point function for all processes.
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow) {
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

void* sandbox_info = NULL;

#if CEF_ENABLE_SANDBOX
// Manage the life span of the sandbox information object. This is necessary
// for sandbox support on Windows. See cef_sandbox_win.h for complete details.
CefScopedSandboxInfo scoped_sandbox;
sandbox_info = scoped_sandbox.sandbox_info();
#endif

// Provide CEF with command-line arguments.
CefMainArgs main_args(hInstance);

// SimpleApp implements application-level callbacks. It will create the first
// browser instance in OnContextInitialized() after CEF has initialized.
CefRefPtr<SimpleApp> app(new SimpleApp);

// CEF applications have multiple sub-processes (render, plugin, GPU, etc)
// that share the same executable. This function checks the command-line and,
// if this is a sub-process, executes the appropriate logic.
int exit_code = CefExecuteProcess(main_args, app.get(), sandbox_info);
if (exit_code >= 0) {
// The sub-process has completed so return here.
return exit_code;
}

// Specify CEF global settings here.
CefSettings settings;

#if !CEF_ENABLE_SANDBOX
settings.no_sandbox = true;
#endif

// Initialize CEF.
CefInitialize(main_args, settings, app.get(), sandbox_info);

// Run the CEF message loop. This will block until CefQuitMessageLoop() is
// called.
CefRunMessageLoop();

// Shut down CEF.
CefShutdown();

return 0;
}

SimpleApp
SimpleApp 負責處理進程級別的回調方法。它會曝露出一些在多進程中共享或者被特定進程使用的介面和方法。CefBrowserProcessHandler 介面,在瀏覽器進程中調用。還有一個被分離出 CefBrowserProcessHandler 介面(例子項目沒有展示)只會在渲染進程中被調用。由於 CefBrowserProcessHandler 不光實現了 CefApp, 同時還有 CefBrowserProcessHandler,所以它的返回值必須是[this]。

// simple_app.h
#include "include/cef_app.h"

class SimpleApp : public CefApp,
public CefBrowserProcessHandler {
public:
SimpleApp();

// CefApp methods:
virtual CefRefPtr<CefBrowserProcessHandler> GetBrowserProcessHandler()
OVERRIDE { return this; }

// CefBrowserProcessHandler methods:
virtual void OnContextInitialized() OVERRIDE;

private:
// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleApp);
};

// simple_app.cpp
#include "cefsimple/simple_app.h"

#include <string>

#include "cefsimple/simple_handler.h"
#include "cefsimple/util.h"
#include "include/cef_browser.h"
#include "include/cef_command_line.h"

SimpleApp::SimpleApp() {
}

void SimpleApp::OnContextInitialized() {
REQUIRE_UI_THREAD();

// Information used when creating the native window.
CefWindowInfo window_info;

#if defined(OS_WIN)
// On Windows we need to specify certain flags that will be passed to
// CreateWindowEx().
window_info.SetAsPopup(NULL, "cefsimple");
#endif

// SimpleHandler implements browser-level callbacks.
CefRefPtr<SimpleHandler> handler(new SimpleHandler());

// Specify CEF browser settings here.
CefBrowserSettings browser_settings;

std::string url;

// Check if a "--url=" value was provided via the command-line. If so, use
// that instead of the default URL.
CefRefPtr<CefCommandLine> command_line =
CefCommandLine::GetGlobalCommandLine();
url = command_line->GetSwitchValue("url");
if (url.empty())
url = "http://www.google.com";

// Create the first browser window.
CefBrowserHost::CreateBrowserSync(window_info, handler.get(), url,
browser_settings, NULL);
}

SimpleHandler
SimpleHandler 負責處理瀏覽器級別的回調方法。這些回調方法會在瀏覽器進程中執行。在這個項目中,針對所有的瀏覽器使用相同的 CefClient 實例,但是如果你願意,可以在自己的應用程序中使用不同的 CefClient實例的。

// simple_handler.h
#include "include/cef_client.h"

#include <list>

class SimpleHandler : public CefClient,
public CefDisplayHandler,
public CefLifeSpanHandler,
public CefLoadHandler {
public:
SimpleHandler();
~SimpleHandler();

// Provide access to the single global instance of this object.
static SimpleHandler* GetInstance();

// CefClient methods:
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() OVERRIDE {
return this;
}
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE {
return this;
}
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE {
return this;
}

// CefDisplayHandler methods:
virtual void OnTitleChange(CefRefPtr<CefBrowser> browser,
const CefString& title) OVERRIDE;

// CefLifeSpanHandler methods:
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE;

// CefLoadHandler methods:
virtual void OnLoadError(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
ErrorCode errorCode,
const CefString& errorText,
const CefString& failedUrl) OVERRIDE;

// Request that all existing browser windows close.
void CloseAllBrowsers(bool force_close);

private:
// List of existing browser windows. Only accessed on the CEF UI thread.
typedef std::list<CefRefPtr<CefBrowser> > BrowserList;
BrowserList browser_list_;

// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleHandler);
};

// simple_handler.cpp
#include "cefsimple/simple_handler.h"

#include <sstream>
#include <string>

#include "cefsimple/util.h"
#include "include/cef_app.h"
#include "include/cef_runnable.h"

namespace {

SimpleHandler* g_instance = NULL;

閱讀全文

與cef指標源碼相關的資料

熱點內容
程序員技術交流研究 瀏覽:812
javaresponse文件 瀏覽:732
linuxrar壓縮文件夾 瀏覽:216
魅藍手機連接不上伺服器怎麼回事 瀏覽:377
工行app怎麼改已綁定銀行卡 瀏覽:531
oppo晶元程序員 瀏覽:600
oppok3應用怎麼加密 瀏覽:325
電腦軟盤怎麼加密碼 瀏覽:813
伺服器光交換機有什麼用 瀏覽:706
app上怎麼拍蛙小俠 瀏覽:215
志高聊天app怎麼下載 瀏覽:633
郵政app怎麼不能掃付款碼 瀏覽:557
筆記本電腦雙理由配置命令 瀏覽:63
拿著文件夾怎麼畫 瀏覽:875
博瑞發動機壓縮比 瀏覽:730
linux開源郵件伺服器 瀏覽:777
ios打地鼠源碼 瀏覽:472
伺服器換主機需要什麼系統 瀏覽:749
linux監控jvm內存 瀏覽:79
空調壓縮機自製工具 瀏覽:518