NDK(16)Jni中GetStaticFieldID和GetMethodID 中的类型标识串
env在GetStaticFieldID和GetMethodID 时,函数参数和返回值的类型要指定类型标识串,如:
jmethodID init = env->GetMethodID(clz,"<init>","([B)V"); jfieldID field = env->GetFieldID(clz,"mName","Ljava/lang/String;");
1)基本类型对应关系
| 标识串 | Jni 类型 | C 类型 |
| V | void | void |
| Z | jboolean | boolean |
| I | jint | int |
| J | jlong | long |
| D | jdouble | double |
| F | jfloat | float |
| B | jbyte | byte |
| C | jchar | char |
| S | jshort | short |
2)基本类型数组
(以 [ 开始,用两个字符表示)
| 标识串 | Jni 类型 | C 类型 |
| [Z | jbooleanArray | bool [] |
| [I | jintArray | int[] |
| [J | jlongArray | long[] |
| [D | jdoubleArray | double[] |
| [F | jfloatArray | float[] |
| [B | jbyteArray | byte[] |
| [C | jcharArray | char[] |
| [S | jshortArray | short[] |
3)类(class)
(以 L 开头,以 ; 结尾,中间是用 / 隔开的 包 及 类名)
| 标识串 | Java 类型 | Jni 类型 |
| L包1/包n/类名; | 类名 | jobject |
| Ljava/net/Socket; | Socket | jobject |
4)例外(String 类)
| 标识串 | Java 类型 | Jni 类型 |
| L包1/包n/类名; | 类名 | jobject |
| Ljava/lang/String; | String | jstring |
5)嵌套类
(类位于另一个类之中,则用$作为类名间的分隔符)
| 标识串 | Java 类型 | Jni 类型 |
| L包1/包n/类名$嵌套类名; | 类名 | jobject |
| Landroid/os/FileUtils$FileStatus; | FileStatus | jobject |
注意:
本文说的函数参数和返回值的类型,而在env->FindClass(xxx);时不写Ljava/lang/String; 而是java/lang/String
如:
jclass clz = env->FindClass("java/lang/String");

浙公网安备 33010602011771号