JNI基础讲解
1. JNI基础
为了承接上层java并且转换到下层c++,java 定义了一套对应类型
-
基本类型
JNI类型 java类型 jint int jbyte byte jshort jlong jfloat float jdouble double jchar char jboolean boolean -
java的引用类型:
JNI引用类型 java类型 jobject java.lang.Object jclass java.lang.Class jstring java.lang.String jthrowable java.lang.Throwable 对于array,java的数组一共有八个基本类型数组和一个Object数组:
jintArray、jbyteArray、jshortArray、jlongArray、jfloatArray、jdoubleArray、jcharArray、jbooleanArray、jobjectArray
-
JNI的函数全都要使用JNI类型描述
所以,当使用c/c++类型后(例如string或者char*),对外的类型要转换为JNI类型(jstring)
-
一般来说的步骤
-
将函数参数和函数返回值换成对应的JNI类型
-
参数分为基本类型和引用类型,基本类型可以直接操作不需要转换
引用类型需要转换为 navive类型,比如 jstring转换为 char*
-
在native代码中执行具体的操作
-
当需要返回的时候,创建返回的类型,将结果拷贝到返回值中
-
-
JNI函数中
一般都加入
#ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif
确保JNI函数是用c方式被加载
2. 本质的JNI.h
这里面就定义了很多转换函数,比如JNI基本类型和native的typedef
typedef long jint;
typedef __int64 jlong;
typedef signed char jbyte;
// In "jni.h"
typedef unsigned char jboolean;
typedef unsigned short jchar;
typedef short jshort;
typedef float jfloat;
typedef double jdouble;
typedef jint jsize;
一个圆,圆内是你会的,圆外是你不知道的。而当圆越大,你知道的越多,不知道的也越多了