JNI学习(0)——关于JNI

简介: JNI学习(0)——关于JNI

JNI是什么

JNI(Java Native Language)提供了一种Java语言与C/C++通信的规范,使得Java程序能够调用C/C++语言实现的方法,从而使得方法得到复用,多用于图像、视频处理处理,在 C/C++ 中写的程序可以避开 JVM 的内存开销过大的限制、处理高性能的计算、调用系统服务等功能。提高了Java处理丰富业务的能力。当然,本地的 C/C++ 的代码也可以调用 Java 代码。


JNI用在哪里


JNI使用的场景多见于Android,NDK是谷歌专门为JNI开发者提供的SDK,通过NDK,开发者能够快速地完成动态链链接库多版本的发行。


数据类型对应表


JNI与C/C++有专门数据类型对应表。

下图所示是基本类型对应表。

1666147869450.jpg

引用类型对应表如下图所示。

1666147880325.jpg


JNI开发流程


  • 编写声明了 native 方法的 Java 类
  • 将 Java 源代码编译成 class 字节码文件
  • 用 javah -jni 命令生成.h头文件(javah 是 jdk 自带的一个命令,-jni 参数表示将 class 中用native 声明的函数生成 JNI
  • 规则的函数)
  • 用本地代码实现.h头文件中的函数
  • 将本地代码编译成动态库(Windows:*.dll,linux/unix:*.so,mac os x:*.jnilib)
  • 拷贝动态库至 java.library.path 本地库搜索目录下,并运行 Java 程序


整个开发流程如下图所示。

1666147906343.jpg


相关文章
|
6月前
|
存储 Java C++
[NDK/JNI系列02] JNI的设计原理与数据类型
[NDK/JNI系列02] JNI的设计原理与数据类型
46 0
[NDK/JNI系列02] JNI的设计原理与数据类型
|
6月前
|
Java API Android开发
[NDK/JNI系列01] NDK与JNI的基本概念与使用场景
[NDK/JNI系列01] NDK与JNI的基本概念与使用场景
68 0
|
6月前
|
缓存 Java API
[NDK/JNI系列05] JNI引用API
[NDK/JNI系列05] JNI引用API
53 0
|
Java 编译器 API
Android使用NDK(从java调用本地函数'JNI')
Android使用NDK(从java调用本地函数'JNI')
230 0
Android使用NDK(从java调用本地函数'JNI')
|
Java
JNI学习(3)——运行基于JNI的java程序
JNI学习(3)——运行基于JNI的java程序
96 0
JNI学习(3)——运行基于JNI的java程序
|
Java
JNI学习(1)——生成对应的头文件
JNI学习(1)——生成对应的头文件
337 0
JNI学习(1)——生成对应的头文件
Java中使用JNI调用本地动态库的方法
在Java中,要使用动态库,就要使用到 JNI。首先来看看百度百科对JNI的描述:从Java1.1开始,Java Native Interface(JNI)标准成为Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。
1361 0
|
Java C++
Java调用C/C++实现的DLL动态库——JNI
由于项目的需要,最近研究了java 调用DLL的方法,将如何调用的写于此,便于日后查阅: 采用的方法是JNI:Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码进行交互。
1308 0
|
Java C语言 Windows