1.了解JNI中JAVA类型与C/C++的映射关系
JAVA类型 | 本地类型 | JNI中自定义类型 | 描述 |
int | long | jint/jsize | signed 32 bits |
long | _int64 | jlong | signed 64 bits |
byte | signed char | jbyte | signed 8 bits |
boolean | unsigned char | jboolean | unsigned 8 bits |
char | unsigned short | jchar | unsigned 16 bits |
short | short | jshort | signed 16 bits |
float | float | jfloat | 32 bits |
double | double | jdouble | 64 bits |
void | void | void | N/A |
2.引用类型对照表
JNI规范定义的函数签名信息格式如下:
(参数1类型标示参数2类型标示......参数n类型标示)返回值类型标示
实际上这些字符是与函数的参数类型一一对应的。
“()” 中的字符表示参数,后面的则代表返回值。例如”()V” 就表示 void Func();
“(II)V” 表示 void Func(int, int);
值得注意的一点是,当参数类型是引用数据类型时,
其格式是“L包名;”其中包名中的“.”换成“/”,
所以(Ljava/lang/String;Ljava/lang/String;)V 表示 void Func(String,String);
如果 JAVA 函数位于一个嵌入类,则用$作为类名间的分隔符。
例如 “(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z”
V | void | void | N/A |
Z | jboolean | boolean | 8 unsigned |
I | jint | int | 32 |
J | jlong | long | 64 |
D | jdouble | double | 64 |
F | jfloat | float | 32 |
B | jbyte | byte | 8 |
C | jchar | char | 16 unsigned |
S | jshort | short | 16 |
[I | jintArray | int[] | |
[F | jfloatArray | float[] | |
[B | jbyteArray | byte[] | |
[C | jcharArray | char[] | |
[S | jshortArray | short[] | |
[D | jdoubleArray | double[] | |
[J | jlongArray | long[] | |
[Z | jbooleanArray | Boolean[] |