Android JNI 类型、方法签名规范
在 Android 开发中不免会使用到 JNI,JNI 编程中可以使用 javah 等工具自动生成 jni 的头文件,但是如果想自己手动注册,那么就需要了解 JNI 方法的签名规范,记录一下,以备以后查看。
Java 类型 | Native 类型 | 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 |
byte[] | jbyteArray | [B |
char[] | jcharArray | [C |
short[] | jshortArray | [S |
int[] | jintArray | [I |
long[] | jlongArray | [L |
float[] | jfloatArray | [F |
double[] | jdoubleArray | [D |
Java 类 (例: String) | jstring/jobject | L 全类名;(例: Ljava/lang/String; |
Java 方法 (例: start (String path, long pos, long duration)) | Native 方法 (例: start (jstring path, jlong pos, jlong duration)) | (参数签名…) 返回值签名 (例: (Ljava/lang/String;JJ) V) |
要注意的是 java 类的签名,最后的分号不要忘记。String 类比较特别,jni 提供了就 jstring 与之对应,java 方法签名中,括号里面是所有参数的类型签名,中间无间隔,括号外面是返回值类型签名。