初试JNI
开发环境:Java 11; IntelliJ IDEA 2019.1.1; Visual Studio 2019
第一步:编写Java类
1 | public class LearnJNI { |
第二步:使用Java类生成C头文件
在Java的编译输出目录下执行如下指令:1
javac -h . com.github.mouse0w0.learnjni.LearnJNI
在Java 10之前,生成头文件主要通过
javah
:
1 javah -classpath . -jni com.github.mouse0w0.learnjni.LearnJNI
结果如下图所示:
第三步:使用Visual Studio创建C++项目
在Visual Studio中选择C++空项目:
配置好项目名称,任取即可:
得到这样一个文件结构的项目:
创建头文件与CPP文件,并将我们使用javah生成的头文件的内容复制到创建的头文件中:
我们可以看到有很多错误。不过接下来将配置我们的C++项目。
第四步:配置C++项目
右键解决方案,打开属性:
选中配置属性>配置
,设置配置为Release
,平台为x64
:
右键LearnJNI
项目,打开属性:
选中配置属性>常规
,设置项目默认值>配置类型
为动态库(.dll)
:
选中配置属性>VC++ 目录
,点击常规>包含目录
的<编辑...>
:
点击红框内按钮,添加JDK路径下的include
文件夹和include\win32
文件夹:
第五步:实现C++代码
在CPP文件中编写如下代码,输出Hello World
:
第六步:编译C++代码为DLL
点击Visual Studio上方的菜单栏中的生成>生成 LearnJNI
生成项目:
最终得到如下输出,输出DLL的路径在下图红框内:
第七步:配置Java运行
将输出的DLL置于Java项目下的适宜文件夹:
在IDEA的启动配置中增加JVM参数:
1 | -Djava.library.path=D:\Workspace\JavaProjects\LearnJNI\native |
运行启动配置,得到Hello World
的输出:
后记
本篇教程中所讲解的JNI和C/C++项目的开发和使用方法还很幼稚,读者可就情况进行进一步的学习和改进。如使用头文件自动生成工具,使用CMake配置跨平台的C/C++项目编译。