文章目录
- 前言
- 龙芯-CEF用户使用手册
- Tutorial
- 源码
- 入口函数
- 编译步骤
- 最后
前言
Chromium Embedded Framework (CEF) 官方镜像。 一个简单的框架,用于将基于 Chromium 的浏览器嵌入到其他应用程序中。
CEF仓库:chromiumembedded/cef
二进制CEF: CEF Automated Builds
CEF文档: cef/GeneralUsage
CEF 文档中文: GitHub - fanfeilong/cefutil: cef util
注:本篇可以让我们对CEF有个基本概念。对于如何通过CEF实现功能,不谈(不会)。
龙芯-CEF用户使用手册
下面,我们按照龙芯-CEF-安装说明 · 文档,过一遍。
到(CEF) Automated Builds下载一个编译过的CEF。
# 高版本的需要3.19的cmake。搞版本低点
wget https://cef-builds.spotifycdn.com/cef_binary_92.0.27%2Bg274abcf%2Bchromium-92.0.4515.159_linux64.tar.bz2
tar -jxvf cef_binary_92.0.27+g274abcf+chromium-92.0.4515.159_linux64.tar.bz2
mv cef_binary_92.0.27+g274abcf+chromium-92.0.4515.159_linux64 cef_binary
目录结构如下
- include
目录是cef的头文件,使用cef开发时需引用这些头文件并调用里面的api函数接口。
- Release
该目录存放着libcef.so动态库,使用cef开发时需要链接该动态库
- tests
该目录放的是cef官方基于cef开发的一些示例和测试样例
- libcef_dll
该目录是cef的封装的接口
- Resource
该目录放的是一些资源文件
- cmake
该目录放着编译相关的文件
编译libcef_dll_wrapper和示例程序。
录放着编译相关的文件
cd cef_binary && mkdir build && cd build
cmake ..
make
运行我们编译好的cefsimple程序
./cefsimple --url=cn.bing.com

Tutorial
经过上面的操作,很神奇的看到程序打开了一个地址。但我们程序的结构是什么样子的。
下面,我们按照官方Tutorial | 对应翻译,过一遍。看一看程序所在目录下面都有哪些文件。这些文件是什么含义。
ls
cefsimple chrome_100_percent.pak chrome_200_percent.pak chrome-sandbox
debug.log GPUCache icudtl.dat libcef.so libEGL.so libGLESv2.so
locales resources.pak snapshot_blob.bin swiftshader
v8_context_snapshot.bin
应用的组成分成这几部分:
-
CEF的动态库(libcef.so等)
-
支持文件(.bin,.pak等)
-
资源文件(我们客户端程序提供,这里我们是打开的外部url。如果是客户端程序,需要提供html/js/css等)(客户端前端人员关注)
-
客户端可执行程序(这里的cefsimple。客户端后端的C++人员关注)
上面CEF的动态库和支持文件,来自之前的Release和Resource目录。下载的二进制包中的README有这部分的描述。
下面部分,复制自上面的翻译链接。
源码
cefsimple程序中初始化CEF以及创建了一个弹出式的浏览器窗口。所有的浏览器窗口关闭时, 程序终止。
程序流程如下:
- 操作系统首先执行主进程中的入口函数(main或者是wWinMain)
- 入口函数中
- 创建处理进程级别回调函数的SimpleAPP实例
- 初始化CEF并启动CEF消息处理循环
- CEF初始化完成后,调用SimpleApp::OnContextInitialized().该函数
- 创建SimpleHandler的单例
- 通过CefBrowserHost::CreateBrowser()创建一个浏览器窗口
- 所有的浏览器窗口共享SimpleHandler实例,该实例负责自定义浏览器窗口以及处理浏览器相关回调事件,包括浏览器生命周期、加载状态、标题显示等等
- 浏览器窗口关闭时,回调函数SimpleHandler::OnBeforeClose()会被调用。当所有浏览器窗口退出后,回调函数OnBeforeClose 接着被调用,然后退出CEF的消息循环,退出程序。
最新的CEF发布版本中,可能文件有更新,但是上面的这些概念是不会修改的。
入口函数
程序执行是从浏览器进程中的入口函数开始的。入口函数中负责初始化CEF以及操作系统相关的对象。
例如,在LINUX中,入口函数中初始化了X11相关的错误处理函数,而在OS X中则初始化了必须的cocoa对象。另外的OSX 中,浏览器进程和其他辅助进程都有独立的入口函数。
- Windows平台的入口函数文件cefsimple/cefsimple_win.cc
- LINUX平台下的入口函数文件cefsimple/cefsimple_linux.cc
- MAC OSX平台下
- 浏览器进程入口函数文件cefsimple/cefsimple_mac.mm
- 其他子进程cefsimple/process_helper_mac.cc
编译步骤
编译步骤在不同平台上略有不同。可以查看CMake文件详细了解不同平台下的编译流程。
所有平台下的编译步骤可以总结为以下几点:
- 编译libcef_dll_wrapper 静态库(这个库是需要在本地编译的)
- 编译程序源码,链接到libcef 动态库和libcef_dll_wrapper 静态库
- 拷贝资源和库文件到输出目录
更多内容,可结合阅读:cefutil/CEF General Usage.md at master · fanfeilong/cefutil · GitHub
最后
如何自己编写一个cefsimple?
这就要,花时间,看CEF的C/C++接口调用。














