依赖软件参考

本文参考官方网站上的jcef编译过程
编译成功的环境如下:

  • windows 10 64 bit
  • JDK 1.8.0_121 64 bit
  • Python 2.7.13
  • git version 2.12.1.windows.1
  • cmake version 3.12.0-rc1
  • Visual Studio 2015 Enterprise Edition

以上的软件也是官网上要求安装的软件,不过版本稍有不同,官网上的版本要求如下:

  • CMake version 2.8.12.2 or newer.
  • Git.
  • Java version 1.7 or 1.8.
  • Python version 2.6 or newer in the 2.x series (3.x is not supported)

VS官方是建议使用2015版本。

另外在64位机器上编译,jdk最好装64位的,由于64位的机器默认编译64位的依赖,因此,32位jdk找到的依赖会报错,后面会提到出错后的处理

下载jcef源代码

h@DESKTOP-8K18HPL MINGW64 ~
$ cd /d/learn/jecf/

h@DESKTOP-8K18HPL MINGW64 /d/learn/jecf
$ git clone https://bitbucket.org/chromiumembedded/java-cef.git src
Cloning into 'src'…
remote: Counting objects: 3710, done.
remote: Compressing objects: 100% (1758/1758), done.
remote: Total 3710 (delta 2461), reused 2576 (delta 1682)
Receiving objects: 100% (3710/3710), 27.49 MiB | 68.00 KiB/s, done.
Resolving deltas: 100% (2461/2461), done.

h@DESKTOP-8K18HPL MINGW64 /d/learn/jecf
$

执行make

到了这一步就虽然可以执行make了,make过程有个问题make是需要从Google Storage 下载 clang-format,这个步骤执行一次即可;国内的用户需要设置代理才可以,不然会停留在 -- Downloading clang-format from Google Storage... 这一步 输出如下:

-- Found PythonInterp: D:/Python27/python.exe (found version "2.7.13")
-- Found JNI: C:/jdk1.8.0_121_x86/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…

执行make 前,设置cmd代理:

set http_proxy=http://{ip}:{port}
set https_proxy=http://{ip}:{port}

执行make,参考下面官网提供的make流程命令

# 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.
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
# 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
# - Select Scheme > Edit Scheme and change the "Build Configuration" to "Release"
# - Select Product > Build.

# Windows: Generate 64-bit VS2015 project files.
cmake -G "Visual Studio 14 Win64" ..
# 32 bit
# cmake -G "Visual Studio 14" ..
# Open jcef.sln in Visual Studio
# - Select Build > Configuration Manager and change the "Active solution configuration" to "Release"
# - Select Build > Build Solution.

若这个步骤出现JDK依赖错误,通常是使用64 bit 的机器上使用32 bit的JDK,make的时候,看最后的输出,

-- Java directory:               C:/jdk1.8.0_121_x86
-- JNI libraries: C:/jdk1.8.0_121_x86/lib/jawt.lib;C:/jdk1.8.0_121_x86/lib/jvm.lib
-- JNI include directories: C:/jdk1.8.0_121_x86/include;C:/jdk1.8.0_121_x86/include/win32;C:/jdk1.8.0_121_x86/include
-- Configuring done
-- Generating done

上面的输出可以看到,Java directory和JNI libraries 选择了32位的JDK的路径,重新安装JDK和配置了64 bit JDK到环境变量中,删除jcef build 中的所有文件,重新执行make 步骤即可。

执行完成后输入如下:

-- Configuring done
-- Generating done
-- Build files have been written to: D:/learn/jecf/src/jcef_build

编译cef 依赖的dll

由于JCEF是java对CEF的封装,因此还是需要依赖CEF的,CEF及相关的bridge编译使用VS来完成的。
进入jcef_build目录,打开jcef.sln
将解决方案的项目配置由 debug 改成release ,然后直接生成,生产成功后,输出如下:

5>------ 已跳过生成: 项目: ALL_BUILD, 配置: Debug x64 ------
5>没有为此解决方案配置选中要生成的项目
========== 生成: 成功 4 个,失败 0 个,最新 0 个,跳过 1 个 ==========

编译java 代码

执行compile.bat win64
32 bit 执行 compile.bat win32

D:\learn\jecf\src\tools>compile.bat win64
D:\learn\jecf\src\java\tests\detailed\handler\binding_test.html -> D:\learn\jecf\src\out\win64\tests\detailed\handler\binding_test.html
D:\learn\jecf\src\java\tests\detailed\handler\binding_test2.html -> D:\learn\jecf\src\out\win64\tests\detailed\handler\binding_test2.html
D:\learn\jecf\src\java\tests\detailed\handler\localstorage.html -> D:\learn\jecf\src\out\win64\tests\detailed\handler\localstorage.html
D:\learn\jecf\src\java\tests\detailed\handler\spellcheck.html -> D:\learn\jecf\src\out\win64\tests\detailed\handler\spellcheck.html
D:\learn\jecf\src\java\tests\detailed\handler\transparency.html -> D:\learn\jecf\src\out\win64\tests\detailed\handler\transparency.html
复制了 5 个文件
D:\learn\jecf\src\java\tests\detailed\handler\logo.png -> D:\learn\jecf\src\out\win64\tests\detailed\handler\logo.png
复制了 1 个文件

D:\learn\jecf\src\tools>run.bat win64 Release detailed
ERROR: Native build output path does not exist

D:\learn\jecf\src\tools>

编译后的测试

执行run.bat win64 Release detailed
32 bit 执行 run.bat win32 Release detailed
得到一个嵌入了浏览器的AWT界面的java应用,在地址栏输入https://html5test.com/,可以看到得到的分数基本与安装的Chrome一致

若VS没有修改项目配置为release,执行时候报Release 路径没有找到

编译后分发

执行 make_distrib.bat win64
32 bit 执行 make_distrib.bat win32

D:\learn\jecf\src\tools>make_distrib.bat win64
ERROR: Native Release build output path does not exist

若VS没有修改项目配置为release,同样执行时候报Release 路径没有找到

分发后测试

若执行成功,在src目录下会增加一个binary_distrib的文件夹,里面就是打包好的分发的文件了。

进入binary_distrib执行run.bat,运行得到与编译后的测试一致的应用;

至此,编译jcef的过程结束

Windows下编译jcef的更多相关文章

  1. [转] Windows下编译OpenSSL

    简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...

  2. Windows下编译objective-C

    Windows下编译objective-C 2011-08-31 14:32 630人阅读 评论(0) 收藏 举报 windowscocoa工具objective clibraryxcode   目录 ...

  3. 在Windows下编译FFmpeg详细说明

    MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...

  4. 如何在WINDOWS下编译BOOST C++库 .

    如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25   写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0.   1)下载boost ...

  5. 在Windows下编译OpenSSL(VS2005和VC6)

    需要说明的是请一定安装openssl-0.9.8a .  openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...

  6. windows下编译java源文件的编码错误

    import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...

  7. Windows下编译SDL

    Windows下编译SDL的理由我就不多说了,无论用VS来编译或调试SDL库都是很方便的.而且SDL源代码中也包含了VC工程,你所要做的只是解压VC工程,进行适当的配置,然后编译.调试. 编译SDL大 ...

  8. Windows下编译安装 FFmpeg

    在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...

  9. windows下编译php7图形库php_ui.dll

    CSDN博客 具有图形化编程才有意思,这几天看到了php ui 图形扩展,只是现在只能下载php 7.1的 本次教程编译php7.2.6的 php ui 要是linux下编译起来比较简单 但是 win ...

随机推荐

  1. hibernate原生sql获取list<T>异常解决

    /** * <p>Title: getbigestMinIntegral</p> * <p>Description: 获取最大的MinIntegral(原则上即最高 ...

  2. python 机器学习三剑客 之 Matplotlib

    Matplotlib介绍: Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 . 通过 Matplotlib,开发者可以仅需要几 ...

  3. Python简单试题

    1,相乘次数 题目要求描述: 一个整数每一位上的数字相乘,判断是否为个位数,若是则程序结束 ,不是则继续相乘,要求返回相乘次数. 例:39 > 3*9=27 > 2*7=14 > 1 ...

  4. [Kubernetes]浅谈容器网络

    Veth Pair 这部分内容主要介绍一个设备: Veth Pair . 作为一个容器,它可以声明直接使用宿主机的网络栈,即:不开启 Network Namespace .在这种情况下,这个容器启动后 ...

  5. 51nod1229 序列求和 V2

    这题...毒瘤吧,可能要写两份代码... 传送门 noteskey 我们考虑这里的复杂度肯定是与 k 相关的,而且平方也是没问题的,那么我们先看看 S(k) 能怎么得到: \[\begin{align ...

  6. go语言实现生产者-消费者

    前言: 之前在学习操作系统的时候,就知道生产者-消费者,但是概念是模模糊糊的,好像是一直没搞明白. 其实很简单嘛,生产者生产,消费者进行消费,就是如此简单.了解了一下go语言的goroute,感觉实现 ...

  7. tensorflow从入门到放弃-0

    刚接触tensorflow一周,感觉还是有点难度的.遇到这么个问题 failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable devic ...

  8. python正则表达式--flag修饰符、match对象属性

    正则表达式—修饰符 正则表达式可以包含一些标志修饰符来控制匹配模式,用在正则表达式处理函数中的flag参数中,为可选参数. (1) re.I 全写(re.IGNORECASE) 表示使匹配时,忽略大小 ...

  9. 2小程序canvas使用,及一些坑,以及自己的一些小总结

    自己做了一个小程序,主要用于给头像加图标的那种,和qq似的,主要用canvas做的, 第一回用,掉了很多坑,所以今天总结一下自己所做的,如果大家有不理解的地方,欢迎提问:如果帮到大家的话,帮忙点个啥的 ...

  10. python-常见数据类型及其方法

    常见数据类型及其方法 1.None: 表示空(无任何功能,专门用于提供空值) 2.整形(int) 3.布尔类型(bool) 只有两个结果:True/False: 0/''/[]/()/{}/set() ...