美文网首页
JNI的简单使用

JNI的简单使用

作者: coder4j | 来源:发表于2021-10-03 01:30 被阅读0次

JNI是Java Native Interface的缩写,即JAVA本地化接口,从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。
如果想要自定义一个本地方法,那么可以按照以下步骤操作:

  1. 类中声明native方法

    HelloNative.java

    package com.pg.test.jni;
    
    public class HelloNative {
     
        public static native void hello(String name);
     
    }
    
  2. 编译生成字节码文件(.class文件)

    javac .\HelloNative.java
    
  3. 生成头文件(.h文件)

    com_pg_test_jni_HelloNative.h

    javah -cp 项目路径\src\main\java com.pg.test.jni.HelloNative
    

    -cp 用于指定类文件的路径
    【项目路径】需要替换成自己的项目的磁盘路径
    注意:最后部分一定是全路径名

  4. 根据头文件.h用C或者C++编写实现方法

    HelloNative.c

    #include "com_pg_test_jni_HelloNative.h"
    #include <stdio.h>
    
    JNIEXPORT void JNICALL Java_com_pg_test_jni_HelloNative_hello(JNIEnv *env,jobject obj, jstring name)
    {
       const char *str; 
       str = (*env)->GetStringUTFChars(env, name, NULL); 
       if (str == NULL) { 
          return; 
       } 
       printf("Hello %s !\n", str );
       return;
    }
    

    注意:要保证和头文件定义的方法名及参数一致

  5. 生成动态链接库.DLL文件

    gcc -m64 -Wl,--add-stdcall-alias -I"C:\my\java\jdk1.8.0_202\include" -I"C:\my\java\jdk1.8.0_202\include\win32" -shared -o HelloNative.dll HelloNative.c
    

    -m64表示生成的dll是64位的

    注意,执行gcc命令需要安装gcc编译器,windows下需要使用MinGW,默认是没有的,需要手动下载安装,官网是 www.mingw.org,但需要翻墙,可以去sourceforge下载。

  6. dll库加载
    使用System.load("")或者System.loadLibrary("")加载dll库,前者需要填写全路径且带有扩展名,后者只需要文件名称即可
    如果使用后者,那么需要dll文件放置在项目根路径或者system32或者JDK或jre的bin路径下。

  7. 调用示例代码

    @SuppressWarnings("static-access")
    public static void main(String[] args) {
       System.loadLibrary("HelloNative");
       new HelloNative().hello("JNI");
    }
    

相关文章

网友评论

      本文标题:JNI的简单使用

      本文链接:https://www.haomeiwen.com/subject/cbkvnltx.html