废话不多说,直接说怎么搞。
第一步在java里面添加方法:
public native void exampleMethod(int i, String s, int[] arr);
第二步在native文件中添加static const JNINativeMethod gMethods[]:
在JNI中,JNINativeMethod
结构体用于描述一个本地方法,它包含三个字段:name
,signature
和 fnPtr
。其中,signature
字段用于描述方法的参数和返回值。
这个 signature
字符串的格式遵循以下规则:
- 方法的参数类型放在括号
()
中,按照参数顺序排列。 - 返回值类型放在括号
()
之后。
每种类型都有一个对应的字符表示:
V
:voidZ
:booleanB
:byteC
:charS
:shortI
:intJ
:longF
:floatD
:doubleL fully-qualified-class ;
:fully-qualified-class 是类的全名,例如Ljava/lang/String;
表示java.lang.String
类型[ type
:type 类型的数组,例如[I
表示int[]
那么针对这个java方法对应的signature就是:
"(ILjava/lang/String;[I)V"
完整的添加:
static JNINativeMethod gMethods[] = {
{"exampleMethod", "(ILjava/lang/String;[I)V", (void*)native_exampleMethod}
};
最后去实现你的native就可以了:
void native_exampleMethod(JNIEnv *env, jobject obj, jint i, jstring s, jintArray arr) {
// 在这里实现你的方法
}