美文网首页
Java 之JNI基础篇(一)[转]

Java 之JNI基础篇(一)[转]

作者: 卖报的小二 | 来源:发表于2018-03-17 15:31 被阅读33次

    JNI,即Java Native Interface。它其实就是一套java与本地代码交互的接口或者说是一个协议。通俗的比喻,就是中国人讲中国话,日本人讲日本话,于是中国人碰到日本人,各说各话,无法交流。如果这个时候,中国人学会了英语,日本人也学会了英语,那么中国人日本人就可以用英语交流了,这就是要学习JNI的原因!Java语言无法直接调用C/C++代码,反之亦然,于是就有了JNI,帮助两者相互调用。当然,这一套机制并不是那么美好,总会有一些坑要踩,就像中国人跟日本人交流还需要借助英语,怎么看都有一些多余,我们直观的感觉就是,讲同一种语言更好。

    在Java的JNI参考手册中,明确指出了使用JNI的一些缺陷,因此,在真实项目中,如果要使用JNI,尽量三思而后行。既然JNI不被推荐使用,那么学习JNI的意义是什么呢?作为一个Android平台的开发者,最幸福的事情就是系统开源,这个开源的系统实际上就是一个巨大的宝库,从底层到上层,可以汲取无数的知识,而在Android系统中,JNI技术是被大量使用的,要想深入的研究学习源码,JNI是必须要掌握的一步,因此,就先从Java语言的JNI基础开始吧!

    工具的选择

     Linux平台就不说了,在windows平台,编写C代码,最被推荐的工具当然是visual studio,功能丰富,但我个人感觉,太过于笨重臃肿,毕竟咱们不是真正的WinC开发者,不同的需求,决定了不同的选择,Eclipse对我们来说才更加亲切吧,我这里主要推荐三种,注意排名分先后

     •Eclipse + MinGW GCC组合 咱们毕竟只需要玩玩标准C,而不是Windows平台上的开发者,不需要微软的SDK,这个组合很轻量级,还可以在Java代码与C代码之间轻松切换

     •Code::Blocks 这个轻量级IDE自带MinGW GCC编译器,写写JNI中的C确实是够了,如果你不喜欢Eclipse写C,可以考虑一下

     •Visual Studio 微软粉,并且想在Windows平台写写程序,那么vs是你唯一的选择

    JNI编写流程

    以上为官方文档中给出的编写流程,实际上我认为可以简化为四个步骤

    1.在Java类中编写native方法

    2.生成头文件

    这里稍微注意一点,生成头文件之前,将项目编译一下,通常Eclipse工程会自动编译,但最好还是手动Build,编译生成class之后,执行javah命令自动生成头文件, 进入java工程根目录,执行以下命令,其中-o命令主要用于指定头文件名称 javah -jni -classpath ./bin -o Hello.h com.test.JniUtil

     3.实现头文件中的方法

    这里有几个小坑说明一下,编写JNI的本地方法,首先要导入jni.h头文件,这个文件在jdk目录里面,另外在windows平台的JNI中,还需要导入jni_md.h头文件,否则无法编译,其他平台不需要,注意头文件的排列顺序,jni.h必须在前。最后将我们生成的头文件也拷过来包含一下,这是一个很好的C编程习惯,能检查一些因手滑导致的错误。

    4.编译成动态库,并在java中加载

    我们知道,windows平台上的动态库是一个.dll的文件,Linux以及Android上,则是.so文件。最后在Java中加载动态库,则同样可以使用两种方式,如JniUtil类中的static代码块中,分别为System.loadLibrary和System.load函数。

     通过如上四个大步骤,即完成了整个Java的jni编写流程,最后调用一下native方法,完成验证

    public class test {

             public static void main(String[] args) {

                    new JniUtil().sayHello();

               }

     }

    在这里,我想细化一下在Eclipse中编写以及编译C代码的过程。

     •成功配置MinGW GCC编译器环境 下载MinGW GCC编译器,并在Path环境变量中配置gcc命令,即将MinGW中的bin目录配置进去,这个过程就跟配置jdk是一样的,最后在命令行输入gcc --version命令检查是否配置成功

     •在eclipse中安装CDT插件 推荐直接在插件商店中搜索安装,无需到处去下载离线包 选择eclipse工具栏中的Help–>Eclipse Marketplace进入插件商店,在其中搜索cdt并安装,成功安装后重启

     •创建C语言工程

    New Project中选择C项目


    添加头文件路径


    配置生成dll动态库


    附上一个JNI的高清官方文档 http://download.csdn.net/download/yingshukun/10205404

    内容丰富的在线文档 https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/jniTOC.html

    原作者:血色--残阳-CSDN

    原文链接:http://blog.csdn.net/yingshukun http://blog.csdn.net/yingshukun/article/details/79053061

    有想听Java架构知识讲解视频的同学 →→                                       ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓        

    相关文章

      网友评论

          本文标题:Java 之JNI基础篇(一)[转]

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