背景

去年年底接到的新需求,需要将原来用Swing做的桌面应用中的一个功能做成Web版的,并且要集成到原应用中,换言之就是要使用内嵌浏览器。最开始考虑的是JavaFx提供的WebView,优点是不需要其他第三方库,jdk1.7开始集成。但是开发完成之后发现两个比较严重的问题,一是界面有一个比较复杂的曲线图会严重卡顿,另一个是有几率会导致虚拟机崩溃,并且速度上也不是很让人满意。最后只能考虑换一个内嵌浏览器框架,然后就找到jcef,基于chrome,速度兼容性都很好。

关于jcef就不多作介绍,不了解的可以戳这里java-cef,本文主要讲解jcef的编译过程,由于产品只支持windows平台使用的是32位的jre,所以只编了win32的版本,64位编译过程基本相同,只需要改变下参数。

编译环境

CMake 2.8.12.2或者更新的版本(我用的免装版,bin目录要手动配置环境变量)

Git

Visual Studio 2015(官网推荐2015,原因是开发者使用的就是2015版本,实测VS2010和VS2013编译均会报错)

Java 1.8 32位 (官网写的是1.7或者1.8,实际上使用1.7编译java部分会有语法错误,可以修改源码规避,建议使用1.8,编译64位版本使用64位的jdk)

Python 2.6或者更新的版本(不支持Python3)

编译过程

1. 源码下载

使用Git将下载jcef源码,clone地址:https://bitbucket.org/chromiumembedded/java-cef.git,当然也可以直接下载Jcef源码。这里建议使用Git Clone,因为在使用CMake构建的时候需要用到.git目录下面的文件中当前节点的信息来构建jcef_version.h头文件,如果不是git clone的代码,没有git相关的文件编译会出错,这个应该是可以通过修改编译脚本规避,把通过git文件获取的信息写死,没有试过,不细表。

20180110230004195258.png

2. CMake构建VS工程

在源码目录下创建新目录jcef_build(不可随意命名),打开DOS进入到新目录中,输入命令cmake -G "Visual Studio 14 2015" ..,回车开始构建。此处有坑,我编的时候新装的VS2015这里报错,找不到编译器,研究了老半天最后找到一句话,VS2015默认安装不包含C++支持……当时整个人都不好了。如果要编64位的话命 令换成这样:cmake -G "Visual Studio 14 Win64" .. 。这里还有一个注意的地方是,这个过程会自动去下载当前Jcef对应的CEF的版本,若果下载不成功可以自己下载之后放到/java-cef/third_party/cef目录中。CEF版本号可以从源码目录下的CMakeLists.txt文件中找到。

20180110230004197211.png

CEF下载地址:http://opensource.spotify.com/cefbuilds/index.html  (经常打不开,我FQ才能稳定打开)

20180110230004199164.png

CMake构建后的C++项目:

20180110230004202094.png

3. VS构建

使用VS打开jcef_build中的jcef.sln文件,选择"生成-->配置管理器-->修改为Release和Win32",然后选择"生成-->生成解决方案",然后等待构建完成。

4. 编译java代码

使用dos进入到源码目录的tools目录里,执行命令compile.bat win32

5. 测试运行

同样是tools目录,执行run.bat win32 Release simple或者run.bat win32 Release detailed,浏览器正常运行,编译成功。

20180110230004204047.png

6. 打包

tools目录下执行 make_distrib.bat win32,源码目录下会自动创建打包目录binary_distrib,里面包含了api文档,浏览器Demo,使用到的jar和dll以及资源文件。

使用方法

需要用到的jar: \java-cef\binary_disrib\win32\bin里面的相关jar包

20180110230004205024.png

动态库以及资源文件等:\java-cef\binary_disrib\win32\bin\lib\win32里面的所以内容

20180110230004206977.png

编码时导入jcef即可编译成功,运行时classpath指定上述jar包,将上面的dll等文件win32目录下的所以内容放在一个目录中,然后将其指定为-Djava.library.path的值即可,可以参考\java-cef\binary_distrib\win32里面的run.bat。

一键编译脚本

build_jcef.bat win32一键编译,脚本是按照可编译64位写的,参数用win64就行了,不过笔者没试过......

@echo on@rem设置路径

set SRC_PATH=D:\java-cefset VS_PATH=C:\Develop\VS2015if "%1" == "" (

echoERROR: Please specify a target platform: win32 or win64set ERRORLEVEL=1

goto end

)

cd /d %SRC_PATH%mkdir %SRC_PATH%\jcef_buildcd /d %SRC_PATH%\jcef_build

@remCMake构建

cmake -G "Visual Studio 14 2015" ..@remVS编译

@echo VS Building Start%VS_PATH%\Common7\IDE\devenv.exe %SRC_PATH%\jcef_build\jcef.sln /rebuild "Release|%1"

@echo VS Building End@rem编译java部分

cd /d %SRC_PATH%\toolscall compile.bat %1@rem打包

call make_distrib.bat %1

:end

Exit /B

View Code

结语

从编译到开发,以及解决各种bug,jcef的资料太少,走过不少弯路。不过项目总算是顺利完成交付,这里做个笔记,也分享给需要的人,希望能有所帮助。

原文:http://www.cnblogs.com/muzipang/p/6582409.html

java内嵌html5浏览器_Jcef内嵌浏览器windows版本的编译及使用相关推荐

  1. 内嵌html5,显示:内嵌HTML5元素

    我正在寻找一个水平铺设的网站,但我遇到了显示问题:内嵌规则.显示:内嵌HTML5元素 它似乎是针对内联导航无序列表量身定制的,它完全覆盖了CSS中文章(和/或部分)的高度和宽度设置. 下面是HTML: ...

  2. 在浏览器中内嵌word_关于项目浏览器内核的选取解读

    故事的开始 那天我刚刚开发好的桌面壁纸发现webkit浏览器内核虽然小 但是网页支持非常差于是我走访了一圈 整理了一堆浏览器内核 Cef 全民Chromium Embedded Framework ( ...

  3. 一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法

    一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法 参考文章: (1)一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法 (2)https://www.cnbl ...

  4. vs2015c语言内嵌汇编,C#中内嵌资源的读取

    起因 作为一个从Cpper转到C#并且直接从事WPF开发的萌新来说,正式编码过程中碰到了不少问题,一路上磕磕碰碰的.因为软件设计需求上的要求,需要将一些配置文件(XML.INI等)内嵌到程序中,等需要 ...

  5. Selenium Webdriver 的使用java执行js代码 解决 ScriptEngine不支持浏览器内置对象window,document的问题

    问题场景: 使用java 掉用js代码,发现 ScriptEngine不支持浏览器内置对象window,document的问题: 问题一:为什么要 用java掉用js代码? 比如在 抓取(爬取)对方网 ...

  6. CSS基础 外部样式表 内嵌样式表 行内样式表

    CSS简述:css是Cascading Style Sheet的缩写,直译过来为层叠样式表或级联样式表,简称样式表.利用css样式表定义页面样式,将会大大减少设计工作量.一些好的css样式表的建立,可 ...

  7. java遇上html,JAVA遇见HTML——JSP篇:JSP内置对象(上)

    JSP九大内置对象 JSP内置对象是Web容器创建的一组对象,不使用new关键就可以使用的内置对象. int[] value={60,70,80}; for(int i:value){ out.pri ...

  8. IndexedDB:浏览器里内置的数据库

    IndexedDB是HTML5规范里新出现的浏览器里内置的数据库.对于在浏览器里存储数据,你可以使用cookies或local storage,但它们都是比较简单的技术,而IndexedDB提供了类似 ...

  9. H5游戏(二)给某html5游戏做内挂

    h5游戏的上一篇内容 H5游戏(一)登录某某首富H5游戏之WebSockets初涉 易语言wss 第二篇:给某html5游戏做内挂 上一期研究了易语言伪造wss,后来觉得每个发送请求都要分析有点麻烦, ...

  10. 五、JAVA调用海康威视SDK实现摄像头内网转外网并前端展示

    接上一章:四.JAVA调用海康威视SDK实现摄像头内网推流到阿里云 本章实现摄像头内网推流到阿里云服务器并再浏览器WEB前端展示. 环境准备 开发工具:eclipse Jdk版本:jdk1.8 开发语 ...

最新文章

  1. 微信公众号开发Django-网页授权
  2. c语言注释部分只能位于,福建省计算机等级考试二级C语言选择题复习资料
  3. 渗透知识-内网渗透(详细版本)
  4. 51Nod1079 中国剩余定理
  5. 线程同步synchronized理解
  6. SpringBoot启动出现java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required
  7. [刘阳Java]_CSS数字分页效果
  8. 解决aapt命令在Linux下无法运行的问题
  9. 代理服务器的四大作用
  10. 2021-06-13
  11. 使用曲面细分渲染毛发
  12. idea中的.iml和.idea能删除么——可以
  13. Alfresco/Activit 中文乱码问题的解决
  14. hive 常用正则表达式
  15. neumann级数_Neumann级数解,Neumann's series solution,音标,读音,翻译,英文例句,英语词典...
  16. 使用360优化修复系统后无法上网的解决方法
  17. msfvenom木马生成工具
  18. 论文解析:变分自编码器
  19. 4.STC15W408AS单片机点亮第一个LED
  20. 按照RFC3984协议实现H264视频RTP打包(附源代码)

热门文章

  1. PBRT v3看完了
  2. MATLAB—隐函数绘图
  3. 智能静止存在检测方案,5.8G雷达传感技术,人体存在感应雷达应用
  4. itextpdf 简介
  5. swift 第三方库SwiftyJSON
  6. 人口各省预测模型matlab_流体力学/医学学科交叉:感染人口预测模型
  7. 网上书店系统mysql设计_数据库设计--《网上书店系统》
  8. 洛达检测软件AB1562UT_1.4.4新版本下载,适用洛达全系列
  9. HIbernate二级缓存的缓存策略
  10. 计算机分区容量计算公式,硬盘整数分区计算方法(附NTFS整数分区数值表)