美文网首页
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基础篇(一)[转]

    JNI,即Java Native Interface。它其实就是一套java与本地代码交互的接口或者说是一个协议。...

  • JNI 基础知识

    JNI 基础知识 什么是 JNI ? JNI (Java Native Interface) 是 Java 沟通 ...

  • Android JNI学习手册

    一、JNI基础学习-JNI调用java原生方法 JNI调用java原生方法有四个重要的东西 一、class 类信息...

  • 每次吃一点AndroidのNDK&JNI

    1. 初识NDK&JNI 1.1. 基础概念 JNI(Java Native Interface):java本地接...

  • Android系统JNI使用(JAVA调用C语言接口)一

    目录 第一篇:Android系统JNI使用(JAVA调用C语言接口)一 什么是JNI JNI是Java Nativ...

  • JNI 入门

    基础知识 1 什么是JNI?JNI全称为:Java Native Interface。JNI 是本地编程接口,它使...

  • Android Review

    java相关 java基础面试题 四种引用对比 List,Set,Map 详解 反射 JNI JNI 各版本特性 ...

  • 重学NDK之乱谈开篇

    JNI 定义 JNI 实现步骤-------很基础 NDK(C/C++) SDK(Java) 性质是一样的 特点...

  • java多线程相关

    (一) 基础篇 01.Java多线程系列--“基础篇”01之 基本概念 02.Java多线程系列--“基础篇”02...

  • JNI开发系列②.h头文件分析

    接续上篇JNI开发系列①JNI概念及开发流程 前情提要 JNI技术 , 是java世界与C/C++世界的通信基础 ...

网友评论

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

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