RegisterNatives的使用方法
在Android中通过jni调用本地方法(c/c++),通常使用javah生成规范的头文件,定义一个函数实现本地方法,函数名必须使用本地方法的全类名的规范来写。
Java_ + 包名 + 类名+ 接口名
注意名字之间用下划线,下面是示例:
JNIEXPORT jstring Java_com_example_test_MainActivity_helloworld(JNIEnv *, jclass );
有没有觉得这种写法太反人类了,其实jni还提供了RegisterNative函数手动的注册native方法,该方法可以自由命名函数,不必像上述方法那样拘泥特定烦杂的命名方式。
RegisterNatives使用示例:
static int registerNativeMethods(JNIEnv* env)
{
jclass clazz;
clazz = env->FindClass("com/example/test/MainActivity");
if (clazz == NULL) {
return JNI_FALSE;
}
if (env->RegisterNatives(clazz, gMethods, sizeof(gMethods) / sizeof(gMethods[0])) < 0) {
return JNI_FALSE;
}
return JNI_TRUE;
}
RegisterNatives中第二个参数gMethods是一个二维数组