JNI使用方法

Posted minchensmile

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JNI使用方法相关的知识,希望对你有一定的参考价值。

JNI可以让我们在java代码中调用本地库的功能。

下面记录一下JNI简单的使用方法

  1. 创建java端接口
 1 public class JNIIterface {
 2 
 3     // 导入最终生成的dll文件
 4     static {
 5         System.loadLibrary("JNIDemo");
 6     }
 7 
 8     // 声明dll文件中实现的接口
 9     public native int MyMethod();
10     
11     public native int add(int x, int y);
12 }

  2. 生成接口对应的C的头文件

    上面创建的JNIIterface类,JNIIterface .class文件的路径:JNIDemoinaseJNIIterface .class

    在工程目录下的bin目录下执行命令:javah -classpath . -jni base.JNIIterface

    然后会在JNIDemoin目录下生成base_JNIIterface.h文件

  3. 使用visual studio编写接口的实现

    创建C工程,具体步骤如下:

      第一步:

      技术分享图片

      第二步:

      技术分享图片

      第三部:

      技术分享图片

    导入需要的头文件

      将上面第二步生成的头文件,以及jdk根目录下include目录下的jni.h和

    include的win32目录下的jni_md.h文件拷贝到工程目录下的头文件目录下

    创建功能实现文件

      在工程目录下源文件上右键,并点击添加-》类

      技术分享图片

    并编写如下代码:

 1 #include "base_JNIIterface.h"
 2 #include "jni.h"
 3 #include <stdio.h>
 4 
 5 JNIEXPORT jint JNICALL Java_base_JNIIterface_MyMethod
 6   (JNIEnv *, jobject){
 7       printf("成功实现JNI测试DEMO");
 8       return 0;
 9 }
10 
11 JNIEXPORT jint JNICALL Java_base_JNIIterface_add
12   (JNIEnv *, jobject, jint a, jint b){
13       return a + b;
14 }

  4. 生成dll文件

    在工程目录中的「解决方案」上右键,选择属性,然后如下图所示构成项目

      技术分享图片

    然后编译工程后,会在工程目录下的Release目录下成成dll文件

      技术分享图片

      5. 将dll文件配置到java工程

      首先向dll文件放在java工程根目录下的lib目录下

      然后按照如下步骤将dll文件作为Native Library添加进工程

        技术分享图片

    编辑上图所示的Native Library Location,然后在弹出的界面选择Native Library所在的文件夹:

        技术分享图片

    6. 编写测试类,检证JNI是否成功应用

 1 public class HelloJNI {
 2 
 3     public static void main(String[] args) {
 4         JNIIterface hw = new JNIIterface();
 5         int t = hw.add(3, 7);
 6         int s = hw.MyMethod();
 7         System.out.println(t);
 8         System.out.println(s);
 9     }
10 }

        运行后的测试结果如下:

10
0
成功??JNI??DEMO

 

上面就是记录了使用JNI的最基本步骤。

对于如何使用已经写好的第三方dll文件的功能,比如系统的dll文件,还需要进行深入探索。

 

参考文章:http://www.runoob.com/w3cnote/jni-getting-started-tutorials.html

以上是关于JNI使用方法的主要内容,如果未能解决你的问题,请参考以下文章

01_JNI是什么,为什么使用,怎么用JNI,Cygwin环境变量配置,NDK案例(使用Java调用C代码),javah命令使用

Java程序通过JNI调用C++程序的方法

简单地迁移你的android jni代码逻辑到iOS - 编写iOS下jni.h的替代 - ocni.h

JNI学习笔记

混合编程jni 第九篇之Jni总结

JNI技术