初试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++项目编译。
