美文网首页
介绍一下 JNI

介绍一下 JNI

作者: LiChengZe_Blog | 来源:发表于2019-05-27 20:02 被阅读0次

    一 JNI

    定义:java Native Interface,即java本地接口,本地接口就是指用C和C++开发的接口。由于JNI是JVM规范中的一部分,因此可以将我们写的JNI程序在任何实现了JNI规范的Java虚拟机中运行。同时,这个特性使我们可以复用以前用C/C++写的大量代码。

    开发JNI程序会受到系统环境的限制,因为用C/C++语言写出来的代码或模块,编译过程当中要依赖当前操作系统环境所提供的一些库函数,并和本地库链接在一起。而且编译后生成的二进制代码只能在本地操作系统的环境下运行,因为不同的操作系统环境,有自己的本地库和CPU指令集,而且各个平台对标准C/C++的规范和标准库函数实现方式也有所区别。这就造成使用了JNI接口的JAVA程序,不再像以前那样自由的跨平台。如果要实现跨平台,就必须将本地代码在不同的操作平台下编译出相应的动态库。

    作用:使得java与本地其他类型语言(如c、c++)交互

    即在java代码里调用c、c++等语言的代码或c、c++代码调用java代码。

    JNI开发流程主要分为以下6步:

    1.编写声明了native方法的Java类

    2.将Java源代码编译成class字节码文件

    3.用javah -jni命令生成.h头文件(javah是jdk自带的一个命令,-jni参数表示将class中用native声明的函数生成JNI规则的函数)

    4.用本地代码实现.h文件中的函数

    5.将本地代码编译成动态库(Windows:\*.dll,linux/unix:\*.so,mac os x:\*.jnilib)

    6.拷贝动态库至java.library.path本地库搜索目录下,并运行Java程序。

    特别注意:

    1、JNI是java调用Native语言的一种特性

    2、JNI是属于java的,与Android无直接关系

    为什么要有JNI?

    实际使用中,java需要与本地代码进行交互,因为java具备跨平台的特点,所以java与本地代码交互能力非常弱,所以采用JNI特性增强java与本地代码交互的能力。

    实现步骤

    1、在java中声明Native方法(即需要调用的本地方法)

    2、编译上述java源文件javac(得到.class文件)

    3、通过javah命令导出JNI的头文件(.h文件)

    4、使用java需要交互的本地代码 实现在java中声明的Native方法

    如java需要与c++交互,那么就用c++实现java的Native方法

    5、编译.so库文件

    6、通过java命令执行java程序,最终实现Java调用本地代码

    相关文章

      网友评论

          本文标题:介绍一下 JNI

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