JNI(Java Native Interface)使Java拥有了和其他语言进行通信的能力。Java中声明为native的方法会被编译为本地代码,例如C/C++、Object C等待,以提高代码执行的效率。
手工编译具有native类的方法如下:
public final class Array {
private Array() {}
public static native int getLength(Object array);
public static native Object get(Object array, int index);
}
- 将.java源文件编译为.class文件。
- 在此目录下,使用命令行 javah -jni Array 将.class文件编译为.h文件,例如:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Array */
#ifndef _Included_Array
#define _Included_Array
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Array
* Method: getLength
* Signature: (Ljava/lang/Object;)I
*/
JNIEXPORT jint JNICALL Java_Array_getLength
(JNIEnv *, jclass, jobject);
/*
* Class: Array
* Method: get
* Signature: (Ljava/lang/Object;I)Ljava/lang/Object;
*/
JNIEXPORT jobject JNICALL Java_Array_get
(JNIEnv *, jclass, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif
- .h文件编译为.dll动态库文件。
- java中可以使用System.loadLibrary方法对.dll加载。
参考:
http://en.wikipedia.org/wiki/Java_Native_Interface
http://www.ibm.com/developerworks/cn/java/j-jni/
分享到:
相关推荐
通过在Java中定义native方法,然后使用`javah`工具生成对应的C/C++头文件,开发者可以在C/C++中实现这些方法,最后在Android.mk和Application.mk文件中配置编译规则,使编译系统能够生成.so动态链接库,供Java层加载...
这篇博客文章“Java中JNI的使用(一)——native”很可能是对Java程序员如何首次接触和使用JNI的一个入门教程。 首先,我们来理解“native”关键字。在Java中,`native`是用来标记一个方法的,表示这个方法的实现是在...
9. **JNI(Java Native Interface)**:当JAVA代码需要调用本地(C/C++)代码时,JNI提供了桥梁,学习笔记会介绍如何使用JNI进行跨语言交互。 10. **JAVA标准库**:包括JDBC(数据库连接)、Swing(GUI开发)、JAXP...
在传统的JNI开发中,我们通常在Java类中声明`native`方法,然后在对应的`.c`或`.cpp`文件中使用`JNIEXPORT`和`JNICALL`宏定义来实现这些方法。然而,当有大量类需要添加本地方法时,这种静态注册方式会变得繁琐且...
- Java类中声明的native方法与C/C++的JNI函数相对应。 - 使用`javah` 工具生成头文件。 - C/C++项目中实现JNI方法并调用实际功能函数。 - 编译C/C++项目生成DLL动态库。 - 将DLL库放置于Java可访问的位置,运行Java...
使用`javah`命令(在Android Studio中,可以通过右键点击`HelloJNI`类,选择`GenerateJNI`)生成JNI头文件`HelloJNI.h`,它定义了Java的native方法在C/C++中的原型。 4. **编写C/C++代码** 在`src/main/cpp`目录...
- **内存管理**:在JNI中,需要手动管理内存,避免内存泄漏。使用`malloc()`和`free()`等函数进行分配和释放。 - **异常处理**:Java中的异常不能直接传递到C++,需要在JNI层进行捕获并处理。 - **线程安全**:...
- Java中的数组在JNI中需要特殊处理。JNI提供了一种机制,可以将Java数组转换为本地数组,反之亦然。 - 对于`int`数组,我们可以使用`GetIntArrayElements()`函数获取Java数组的元素副本,`...
Java JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多情况下被用来调用本地库,比如C、C++编写的库,这在处理特定硬件设备或者高性能计算时非常有用。在...
JNI提供了一套接口,这些接口定义了如何在Java虚拟机(JVM)中加载本地方法(即C/C++函数),以及如何与Java对象进行交互。在Java端,我们需要定义一个带有`native`关键字的方法,这告诉编译器这个方法将在本地代码...
在回调函数中,字节流可能以`jbyteArray`的形式传递,这是JNI中用于表示Java字节数组的数据类型。回调函数需要将接收到的字节流转换为C的数据结构,例如`char*`,以便处理图像数据。 当回调函数执行完毕,它需要将...
NDK允许开发者在Android应用中混用Java和原生代码,通过JNI(Java Native Interface)来实现两者之间的交互。本篇文章将详细介绍如何在Android NDK开发中实现C回调Java中的方法。 首先,了解NDK和JNI的基础概念是...
JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。由于JNI...
标题与描述均指向了一个具体的技术主题——通过JNI(Java Native Interface)在C语言环境中启动Java虚拟机并调用Java类。这一技术应用广泛,尤其是在需要跨语言编程或利用Java的特性(如垃圾回收、多线程)而底层...
- **角色**:JNI作为Java与本地代码之间的桥梁,允许Java程序调用C/C++编写的本地方法,同时也支持将JVM嵌入到C/C++应用程序中。 - **副作用**:使用JNI会使Java程序失去跨平台性和安全性。因此,应谨慎使用本地...
1. **编写本地方法**:在Java类中声明native方法,并使用`native`关键字。 2. **生成JNI头文件**:使用`javah`工具,根据Java源代码生成对应的C/C++头文件,这个文件会包含`jni.h`中的函数声明,方便本地代码实现。 ...
1. **创建JNI接口**:定义Java类并声明native方法,这些方法将在C++中实现,用于串口的打开、关闭、读写等操作。 2. **生成JNI头文件**:使用javah工具从Java源代码生成包含JNI函数原型的头文件。 3. **编写C++...