在工作过程中,需要使用 java 程序调用 C/C++ 代码,此时,我们需要使用到JNI技术,以下为我初次使用JNI的案例过程。
首先,我们需要做一些准备工作,那么也就是电脑上的软件安装了,这里我工作上使用的电脑是windows的系统,Mac系统的使用,我将在后期进行更新。
1、软件准备:
windows系统
Visual Studio 2016
Eclipse
JDK8
2、开始我们的demo:
在开始demo前,我们先讲解下使用JNI的步骤,以下也将根据该步骤进行此demo。
步骤:
a) 编写java代码
b)生成C/C++语言的头文件
c) 编写C/C++代码
d)生成C/C++共享库(.dll文件)
e)编译java代码
f) 运行java程序
下面,我们来按照上面的步骤开始我们的demo。
2.a: 编写java代码
2.b: 生成C/C++语言的头文件
注意:此处需要注意,因为java类中有包名,所以我们在使用javah命令时需要注意其位置,并且在类名前需要添加上完整的包信息。
2.c: 编写C/C++代码
此时,我们打开在2.b步骤生成的com_flygrk_ishare_JniDemo.h文件,如下图:
此时,我们需要使用C/C++代码实现上图中红色的接口内容信息。具体内容如下:
我们在这里实现了该方法打印“Hello Jni”。
2.d: 生成C/C++共享库(.dll文件)
现在,我们来生成.dll库文件,此时,我们需要使用Visual Studio2016, 我们打开vs2016,新建一个Win32项目,其名称需命名成2.a的java代码引入的库名称。
然后,点击【确认】【下一步】,选择DLL和空项目,如下图所示:
之后,点击【完成】按钮。此时,我们需要将之前2.b步骤生成的.h头文件放置到vs工程中的头文件目录下,将2.c步骤的.cpp代码放置到vs工程中的源文件目录下。如下图:
注意:此时,如果你此处发现.h或者.cpp文件,编译器中显示有错误,此时有可能是因为你的vs中没有jni.h等头文件信息,你需要去jdk目录下将以下几个文件放置到你的vs目录下:
C:\Program Files\Java\jdk1.8.0_151\include 目录下的 jni.h文件;C:\Program Files\Java\jdk1.8.0_151\include\win32目录下的jawt_md.h和jni_md.h这三个文件放置到vs目录C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include下(此处为我本地的目录,vs中需要安装c++编译环境)。
下面,我们来生成.dll文件,我们在编译前需要更改下dll文件适配的系统,我的系统为win64位,所以,需要进行以下方式更改,如果是32位系统,选择x86即可。
在配置好上述dll位数之后,我们开始编译生成dll文件。步骤如下图:
编译生成结果为:
红色框标记的是生成的dll文件的位置。我们去这个目录下拿到这个dll文件,复制到java项目下:
2.e: 编译java代码
如果使用编译器,则此步骤可以忽略
2.f 运行java程序
以上,即为本人对第一次使用JNI的详细步骤,如有问题,请指教。谢谢