前言

最近好几个项目使用到cef,所以将jcef 的编译过程记录一下

如果要兼容很老的机器如winxp,maven中央库有现成的,直接引用即可

https://mvnrepository.com/artifact/org.bitbucket.johness/java-cef

这个是49版本,有32和64可选,最后一个支持xp系统的,更高的版本最低要求win7.

49版本不支持 es6以上语法,前端打包构建需要转换为es5才可以执行

如果目标平台在win7以上,最好下载最新的jcef进行编译

环境

  1. VMWARE 虚拟机 win7 64

  2. visual studio 2015 c++ 开发环境

  3. CMAKE
    下载地址

    https://github-releases.githubusercontent.com/537699/b8220600-7c1f-11eb-9ccb-1898af20e7b4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20210306%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210306T114224Z&X-Amz-Expires=300&X-Amz-Signature=a0152802c59a68aac9d597797a9acaf1d083754ab579ddde32e2faf4602e5d70&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=537699&response-content-disposition=attachment%3B%20filename%3Dcmake-3.20.0-rc3-windows-x86_64.msi&response-content-type=application%2Foctet-stream
  4. GIT 下载地址

    https://github-releases.githubusercontent.com/23216272/9d5ae680-6ae4-11eb-949c-9a5528f8df81?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20210306%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210306T114253Z&X-Amz-Expires=300&X-Amz-Signature=7857ab73bb80b7090c16c36912563525bba8b981a02df515e042c739ad8e9458&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=23216272&response-content-disposition=attachment%3B%20filename%3DGit-2.30.1-64-bit.exe&response-content-type=application%2Foctet-stream
  5. PYTHON 下载地址

    https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi

    官方推荐2.6+ ,下载2.6.2 结果出错,换成2.7.16没问题

  6. JAVA

本次编译版本为64位,故许准备 64位jdk,版本jdk8以上,设置 JAVA_HOME环境变量,将java bin 目录 添加到path

编译64位库

生成VS 工程

mkdir java-cef && cd java-cef
git clone https://bitbucket.org/chromiumembedded/java-cef.git src
cd src
mkdir jcef_build && cd jcef_build (jcef_build是强制项,必须用此名称)
cmake -G "Visual Studio 14 Win64" ..

生成工程文件的过程中 ,会有两个文件下载比较困难,需要挂代理下载对应的文件

注意点

cef bin 文件下载

https://cef-builds.spotifycdn.com/cef_binary_88.2.6%2Bgd717f0e%2Bchromium-88.0.4324.150_windows64.tar.bz2

文件下载地址会在控制台打印出来,可以复制出来通过代理下载后放入文件夹

C:\Users\Administrator\java-cef\src\third_party\cef

重新跑下生成工程的命令

clang-format.exe 下载

下载地址

https://storage.googleapis.com/chromium-clang-format/b5f5d8d5f8a8fcd2edb5b6cae37c0dc3e129c945

其中md5 是 文件
C:\Users\Administrator\java-cef\src\tools\buildtools\win\clang-format.exe.sha1 的文件内容
该文件在 cmake -G “Visual Studio 14 Win64” .. 生成,但下载的时候回卡住,此时终止脚本运行,去挂代理下载此文件重命名为 clang-format.exe 放入文件夹 C:\Users\Administrator\java-cef\src\tools\buildtools\win\

工程生成成功

C:\Users\Administrator\java-cef\src\jcef_build>cmake -G "Visual Studio 14 Win64" ..
-- The C compiler identification is MSVC 19.0.23026.0
-- The CXX compiler identification is MSVC 19.0.23026.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Warning (dev) at CMakeLists.txt:164 (find_package):
  Policy CMP0074 is not set: find_package uses <PackageName>_ROOT variables.
  Run "cmake --help-policy CMP0074" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.

  CMake variable CEF_ROOT is set to:

    C:/Users/Administrator/java-cef/src/third_party/cef/cef_binary_88.2.6+gd717f0e+chromium-88.0.4324.150_windows64

  For compatibility, CMake is ignoring the variable.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Found PythonInterp: C:/Python27/python.exe (found version "2.7.16")
-- Using Python: C:/Python27/python.exe
-- Found JNI: C:/Program Files/jdk8_64/lib/jawt.lib (Required is at least version "1.7")
-- Generating native/jcef_version.h file...
File native/jcef_version.h is already up to date.
-- Downloading clang-format from Google Storage...
-- *** CEF CONFIGURATION SETTINGS ***
-- Generator:                    Visual Studio 14 2015 Win64
-- Platform:                     Windows
-- Project architecture:         x86_64
-- Binary distribution root:     C:/Users/Administrator/java-cef/src/third_party/cef/cef_binary_88.2.6+gd717f0e+chromium-88.0.4324.150_windows64
-- Visual Studio ATL support:    ON
-- CEF sandbox:                  ON
-- Standard libraries:           comctl32.lib;rpcrt4.lib;shlwapi.lib;ws2_32.lib;Advapi32.lib;dbghelp.lib;Delayimp.lib;OleAut32.lib;PowrProf.lib;Propsys.lib;psapi.lib;SetupAPI.lib;Shell32.lib;version.lib;wbemuuid.lib;winmm.lib
-- Compile defines:              __STDC_CONSTANT_MACROS;__STDC_FORMAT_MACROS;WIN32;_WIN32;_WINDOWS;UNICODE;_UNICODE;WINVER=0x0601;_WIN32_WINNT=0x601;NOMINMAX;WIN32_LEAN_AND_MEAN;_HAS_EXCEPTIONS=0;PSAPI_VERSION=1;CEF_USE_SANDBOX;CEF_USE_ATL
-- Compile defines (Debug):
-- Compile defines (Release):    NDEBUG;_NDEBUG
-- C compile flags:              /MP;/Gy;/GR-;/W4;/WX;/wd4100;/wd4127;/wd4244;/wd4481;/wd4512;/wd4701;/wd4702;/wd4996;/Zi
-- C compile flags (Debug):      /MTd;/RTC1;/Od
-- C compile flags (Release):    /MT;/O2;/Ob2;/GF
-- C++ compile flags:            /MP;/Gy;/GR-;/W4;/WX;/wd4100;/wd4127;/wd4244;/wd4481;/wd4512;/wd4701;/wd4702;/wd4996;/Zi
-- C++ compile flags (Debug):    /MTd;/RTC1;/Od
-- C++ compile flags (Release):  /MT;/O2;/Ob2;/GF
-- Exe link flags:                /MANIFEST:NO;/LARGEADDRESSAWARE
-- Exe link flags (Debug):       /DEBUG
-- Exe link flags (Release):
-- Shared link flags:
-- Shared link flags (Debug):    /DEBUG
-- Shared link flags (Release):
-- CEF Binary files:             chrome_elf.dll;libcef.dll;libEGL.dll;libGLESv2.dll;snapshot_blob.bin;v8_context_snapshot.bin;swiftshader;d3dcompiler_47.dll
-- CEF Resource files:           cef.pak;cef_100_percent.pak;cef_200_percent.pak;cef_extensions.pak;devtools_resources.pak;icudtl.dat;locales
-- *** JCEF CONFIGURATION SETTINGS ***
-- Python executable:            C:/Python27/python.exe
-- Java directory:               C:/Program Files/jdk8_64
-- JNI libraries:                C:/Program Files/jdk8_64/lib/jawt.lib;C:/Program Files/jdk8_64/lib/jvm.lib
-- JNI include directories:      C:/Program Files/jdk8_64/include;C:/Program Files/jdk8_64/include/win32;C:/Program Files/jdk8_64/include
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/Administrator/java-cef/src/jcef_build

C:\Users\Administrator\java-cef\src\jcef_build>


打开vs工程,编译本地库

打开 C:\Users\Administrator\java-cef\src\jcef_build\jcef.sln

选择 release,build solution

upload successful

编译 java 库

C:\Users\Administrator\java-cef\src\tools>compile.bat win64
注: java\org\cef\browser\CefDropTargetListener.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
C:\Users\Administrator\java-cef\src\java\tests\detailed\handler\binding_test.html -> C:\Users\Administrator\java-cef\src\out\win64\tests\detailed\handler\binding_test.html
C:\Users\Administrator\java-cef\src\java\tests\detailed\handler\binding_test2.html -> C:\Users\Administrator\java-cef\src\out\win64\tests\detailed\handler\binding_test2.html
C:\Users\Administrator\java-cef\src\java\tests\detailed\handler\localstorage.html -> C:\Users\Administrator\java-cef\src\out\win64\tests\detailed\handler\localstorage.html
C:\Users\Administrator\java-cef\src\java\tests\detailed\handler\spellcheck.html -> C:\Users\Administrator\java-cef\src\out\win64\tests\detailed\handler\spellcheck.html
C:\Users\Administrator\java-cef\src\java\tests\detailed\handler\transparency.html -> C:\Users\Administrator\java-cef\src\out\win64\tests\detailed\handler\transparency.html
复制了 5 个文件
C:\Users\Administrator\java-cef\src\java\tests\detailed\handler\logo.png -> C:\Users\Administrator\java-cef\src\out\win64\tests\detailed\handler\logo.png
复制了 1 个文件

执行测试

C:\Users\Administrator\java-cef\src\tools>run.bat win64 Release detailed
Offscreen rendering disabled
Using:
JCEF Version = 88.2.6.281
CEF Version = 88.2.6
Chromium Version = 88.0.4324.150
AppHandler.stateHasChanged: INITIALIZING
initialize on Thread[AWT-EventQueue-0,6,main] with library path .\jcef_build\native\Release
Added scheme search://
Added scheme client://
AppHandler.stateHasChanged: INITIALIZED
BrowserFrame.onAfterCreated id=1

upload successful

打包

cd C:\Users\Administrator\java-cef\src\tools
make_distrib.bat win64

最终生成目录

C:\Users\Administrator\java-cef\src\binary_distrib

后记

可参考64位编译过程生成32位的库。

cmake -G "Visual Studio 14" ..

一般情况使用32位的库,这样在32和64位平台都通用

如果项目集成了第三方的库,而且第三方只提供了64位的dll,这时就只能使用64位的jcef了

32和64位编译好的库文件共享地址,版本是88 。zip包是7z打的lzma格式的zip包

https://cloud.189.cn/t/iMr6J3RzqEvm


JCEF      JCEF 编译

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!