JNI:Java Native Interface ,编译型语言。作用:Application层通过jni层来访问底层系统。说白了,JNI就是一座沟通的桥梁,这也就保证了Java语言在各种不同系统中能够访问本地方法。

在windows平台下编译的文件:

.dll:动态链接库,作为共享函数库的可执行文件

.obj:目标文件,相当于源代码对应的二进制文件,未经过重定义(类似java中的class文件,属于中间型文件)

.lib:静态链接库,可理解为多个obj的集合

在linux平台下编译的文件:

.so 动态链接库   与.dll类似

.o:类似.obj

  .a 静态链接库  类似多个.o的集合

 

通过CmakeList.txt来配置动态库和静态库(这里使用的工具是Clion)

SHARED:共享,动态库,优点:运行时加载,可执行文件体积小,动态函数库改变时不需要重新加载,方便动态库的升级。

STATIC:静态库,优点:由于是提前编译并整合进代码中,运行时不需要外部的函数库支持

 

初试JNI的使用

 

jni注册方式分为两种:

一、静态注册,分为几个步骤

     1.定义一个java类,类中声明native方法

      初试JNI的使用

     2.利用javac命令把对应的java文件生成class文件

     初试JNI的使用

     3.利用javah生成.h头文件

         注意:1.8版本之前的jdk需要回退到上级目录,然后使用全类名来生成(全类名=包名+类名)

         初试JNI的使用

       1.8之后的jdk可以直接在类的当前目录下使用 javac -h . XXX.java命令生成.class和.h文件

       初试JNI的使用

    4.打开Clion工具创建一个C++ Library工程  并把.h文件复制到当前工程中,配置CmakeLIst,并创建一个.c文件来实现头文件        中的方法,然后build工程,Clion配置的mingw环境必须要和当前eclipse使用的jdk版本相同(64位或32位),否则会报错。

    初试JNI的使用

   5.把生成出来的.dll文件的路径配置到java类中,然后可以调用

  初试JNI的使用

  初试JNI的使用

二、动态注册

   1.同样创建一个java类,声明native方法

    初试JNI的使用

    2.在C++的library工程里创建一个.c文件  里面实现2个方法  返回值对应java类的返回值,方法名不必对应

     初试JNI的使用

  3.实现jni.h头文件里的OnLoad方法

  初试JNI的使用

  并声明变量  mClassName(当前对应java类的全类名)

  初试JNI的使用

 以及结构体数组mMethods(用于绑定java类的方法以及c实现的方法),绑定格式  "java类名","(方法参数)返回值","指向C的方法的指针"

  初试JNI的使用

 

  4.CmakeList里面添加工程

  5.生成dll文件,java类中声明加载路径,调用即可。

 

相比较,动态注册的优点:方法名不必一一对应,灵活。。

相关文章:

  • 2021-05-01
  • 2021-10-26
  • 2021-09-27
  • 2021-10-03
  • 2021-11-12
  • 2021-07-06
  • 2021-12-18
  • 2021-05-29
猜你喜欢
  • 2022-12-23
  • 2021-08-12
  • 2022-02-03
  • 2021-06-07
  • 2021-05-24
  • 2022-01-07
  • 2022-01-13
相关资源
相似解决方案