CEF是基于chromium的开源项目,让集成chrome的浏览器内核非常方便,而且紧跟升级的节奏,在客户端产品上广泛使用。官网其实已经打了二进制包,可以直接拿来集成。
不过有时候我们还需要自己来打包,最常见的几个原因:
- 需要集成音视频能力(默认打包的音视频能力很弱)
- 有安全漏洞,可以自己简单的集成patch,频繁升级版本不一定能带来稳定性
- 有crash,可能需要自己来解决并打包
Mac升级aef
编译环境: macOS10.12.6, xcode8.3
选定的版本:11/28/2017 - CEF 3.3202.1687.gcd93b44 / Chromium 62.0.3202.94
官方的二进制包:http://opensource.spotify.com/cefbuilds/cef_binary_3.3202.1687.gcd93b44_macosx64.tar.bz2
默认打包不支持mp4,flv等媒体类型,需要支持播放媒体,增加编译参数:proprietary_codecs=1 ffmpeg_branding=Chrome
cef官方打包的源码镜像
http://opensource.spotify.com/cefbuilds/index.html
这个页面里边可以下到对应版本的 cef 源码和响应的chrome源码
比如 CEF 3.3071.1649.g98725e6
对应的源码:
chromium: https://gsdview.appspot.com/chromium-browser-official/chromium-59.0.3071.109.tar.xz
cef: https://bitbucket.org/chromiumembedded/cef/get/3071.tar.bz2
编译的步骤:( 踩坑记 )
参考:https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
自己编译CEF需要基于chromium源码,然后打上cef的patch,然后再一起编译,cef官方文档也有详细的说明。
官方有推荐自动获取源码的方法python tools/automate/automate-git.py --download-dir=./src --branch=3071 --x64-build
,也可以尝试,不过我下面整理的方法是自己来拉代码的
总体上步骤如下:
- chromium主干切换成62的tag,然后执行
gclient sync
来拉取完整的代码 - 可能会出现历史的chromium版本,依赖的仓库的
不存在了,比如如果webrtc的分支不在了,使用cef打包时的chrome代码,下载好的webrtc目录(其他有些模块如果代码有缺失,也可以在下载的chrome版本代码中找)(https://gsdview.appspot.com/chromium-browser-official/chromium-62.0.3202.94.tar.xz) - cef拉取主干,切换到3071分支
- cef拷贝到chromium的src目录
- 建立
create.sh
,设置好参数,进行patch补丁和cef融入 - 编译
ninja -C out/Debug_GN_x64 cef
- 经常需要修改gn的warning选项
src/build/config/compiler/BUILD.gn
- 手动打包: 编译完成后,可以使用
make_distrib
工具打包,打包好的二进制文件在src/cef/binary_distrib
目录下
cd src/cef/tools
./make_distrib.sh --ninja-build --x64-build
create.sh
脚本:
#!/bin/bash
export CEF_USE_GN=1
export GN_DEFINES="proprietary_codecs=true ffmpeg_branding=Chrome is_official_build=true enable_stripping=true symbol_level=0 enable_nacl=false remove_webcore_debug_symbols=true clang_use_chrome_plugins=0"
./cef_create_projects.sh
注意事项
可能出现的错误:
错误: error: '../../build/util/LASTCHANGE.blink', needed by 'gen/webkit_version.h', missing and no known rule to make it
解决:src目录执行两个脚本
./build/util/lastchange.py build/util/LASTCHANGE
./build/util/lastchange.py -s third_party/WebKit/ -o build/util/LASTCHANGE.blink
配置:src/build/config/compiler/BUILD.gn 增加warning选项
# TODO(hans): Get this cleaned up, http://crbug.com/428099
"-Wno-inconsistent-missing-override",
"-Wno-tautological-unsigned-enum-zero-compare",
"-Wno-enum-compare",
"-Wno-null-pointer-arithmetic",
"-Wno-tautological-unsigned-zero-compare",
"-Wno-delete-non-virtual-dtor"