Android NDK开发笔记一:JNI的基本概念和类型
JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以调用C/C++代码,从Java1.1开始,JNI标准成为java平台的一部分。
最简单的来说,JNI就是一套可以和C/C++相互调用的API,jvm就是通过大量的jni技术使得java能够在不同平台上运行。
使用了JNI的一个标志就是native,如果一个方法被native修饰,那就说明这个方法是jni来实现的,它是通过本地系统api里的方法来实现的。当然这个本地方法可能是c或者C++,当然也可能是别的语言。jni是java跨平台的基础,jvm通过在不同系统上调用不同的本地方法使得jvm可以在不同平台间移植。
如下图所示
1.1 Java和C/C++ 中的基本类型的映射关系:
JNI是接口语言,因而,会有一个中间的转型过程,在这个过程中,有一个非常重要的也是非常关键的类型对接方
式,数据类型的转变,下表给出了相关的java和jni的数据格式对照。
下表中的数据为JNI基本数据类型及对应的长度java类型 jni类型 描述符
java类型 |
jni类型 |
描述符 |
---|---|---|
boolean | jboolean | Z |
byte | jbyte | B |
char | jchar | C |
short | jshort | S |
int | jint | I |
long | jlong | J |
float | jfloat | F |
double | jdouble | D |
Class | jclass | Ljava/lang/Class; |
String | jstring | Ljava/lang/String; |
Object | jobject | Ljava/lang/Object; |
byte[] | jbyteArray | [B |
需要注意的是:
boolean型的描述符不是B,而是Z,因为B已经被byte使用
long型的描述符不是L,而是J
引用类型的描述符是 L + 全类名 + 分号