如何编译JCEF以及内嵌到桌面应用程序中
来源:互联网 发布:安徽中港数据 编辑:程序博客网 时间:2024/06/07 08:51
前言
在项目中需要在桌面应用程序中内嵌浏览器, 尝试了几种解决方案,有: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很早之前就通过内嵌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-cefgit 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-oraclecmake -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 Product > 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/toolscompile.bat win64
测试结果是否正确。
使用 run.[bat|sh] 工具来测试JCEF是否工作。
cd /path/to/java-cef/src/toolsrun.bat win64 Release detailed
正确结果会得到一个java窗口程序,如图:
到此为止,我们已经把jcef编译成为目标平台的本地代码了。
在eclipse里使用jcef
其实在jcef源码里,就有java代码的示例。
打开eclipse 新建一个工程,base目录选择
/path/to/java-cef/src/java
点击工程,邮件选择build path > configure build path
选择Librares页签,添加两个第三方jar。在上文提到的
third_party
中,分别如下:/path/to/java-cef/src/third_party/jogamp/jar/gluegen-rt.jar
和/path/to/java-cef/src/third_party/jogamp/jar/jogl-all.jar
在source页签下, 为Native library location 添加一个地址,如下:
/path/to/java-cef/src/jcef_build/native/Release
运行tests.simple或者是tests.detail里的mainFrame。
结果如下:
- 如何编译JCEF以及内嵌到桌面应用程序中
- JCEF的编译
- JCEF编译过程
- JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)
- jcef编译和demo运行
- jcef编译和demo运行
- 在android中如何使应用程序成为桌面
- Ubuntu下经典JAVA开发环境搭建 以及 Ubuntu中如何在桌面、启动面板以及应用程序菜单上添加图标
- 如何将自己的应用程序编译到uCLinux/Linux中
- 如何将Android应用程序编译至image/rom中
- 如何将Android应用程序编译至image/rom中
- 如何将Android应用程序编译至image/rom中
- 如何将Android应用程序编译至image/rom中
- 如何将Android应用程序编译至image/rom中
- 如何将Android应用程序编译至image/rom中
- Java中如何利用JDK编译和运行应用程序?
- .NET 应用程序中创建桌面快捷方式
- Qt中设置桌面应用程序图标
- combo 自动搜索
- mac下非常好用的free 解压rar的软件:unrarx for mac
- SpringMVC Controller 返回值的可选类型
- 《从零开始学Swift》学习笔记(Day 52)——Cocoa错误处理模式
- iOS 导入七牛SDK
- 如何编译JCEF以及内嵌到桌面应用程序中
- TP-Link 设置
- 全文检索引擎Solr系列—–全文检索基本原理
- oc关键字解读
- 自驾遇险——专家教你十分钟换备胎
- linux指令学习方法
- MAT复制
- utf-8 utf-16对比windows系统下wchar_t和char中文字符的二进制对比
- css控制Button 按钮的点击时候出现蓝色边框