JNI类型对应

一个数组int[],就须要表示为这样"[I"。若是多个数组double[][][]就须要表示为这样 "[[[D"。也就是说每个方括号开始,就表示一个数组维数。多个方框后面,就是数组 的类型。java

Java 类型android

符号c++

Boolean数组

Z函数

Bytespa

B指针

Char对象

Cci

Shorttable

S

Int

I

Long

J

Float

F

Double

D

Void

V

objects对象

以"L"开头,以";"结尾,中间是用"/" 隔开的包及类名。好比:Ljava/lang/String;若是是嵌套类,则用$来表示嵌套。例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z"

 

例如:

java                                  c/c++

int[]                               [I

boolean[][]                    [[Z

void fun()                      (;)V

void fun(int)                  (I;)V

long fun(int, String)       (ILjava/lang/String;)J

int[] fun(int[])                 ([I;)I

依次类推

 

C和C++函数时的JNI使用区别

Java调用C和C++函数时的JNI使用区别:
注意:jni.h头文件中对于*.c & *.cpp采用不一样的定义
在C的定义中,env是一个两级指针,而在C++的定义中,env是个一级指针
C形式须要对env指针进行双重deferencing,并且须将env做为第一个参数传给jni函数

对于.c
1.jclass test_class = (
env)->GetObjectClass(env, obj);
2.jfieldID id_num = (env)->GetFieldID(env, test_class, "num", "I");
对于 .cpp 1.jclass test_class = env->GetObjectClass(obj); 2.jfieldID id_num = env->GetFieldID(test_class, "num", "I"); 在 C 中, JNI 函数调用由“(env)->”做前缀,目的是为了取出函数指针所引用的值。 在 C++ 中, JNIEnv 类拥有处理函数指针查找的内联成员函数。 下面将说明这个细微的差别,其中,这两行代码访问同一函数,但每种语言都有各自的语法。 C 语法:jsize len = (
env)->GetArrayLength(env,array); C++ 语法:jsize len =env->GetArrayLength(array);

相关文章
相关标签/搜索