不使用Java_com_xxx方式调用ndk的方式,这种方法的优点是灵活,可配置,不必限制在Java_com_xxx命名依赖中。
步骤如下:
第1步,在JNI初始化方法中调用自定义注册方法,并判断成功与否通知Java端。
jint JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env = NULL; sVm = vm; if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) == JNI_OK) return JNI_ERR; if (注册方法(env) == JNI_OK) return JNI_VERSION_1_4; return JNI_ERR; }
第2步,在cpp或c文件(位置任意)中声明JNINativeMethod 方法数组
static JNINativeMethod methods[] = { "nativeInit", "()V", (void*) xxx_init, //这样就可以映射到java的nativeInit方法了 "", "", (void *) xxx };
其中 JNINativeMethod 的定义在 jni.h 中,结构如下:
typedef struct { const char * name; const char * signature; void * fnptr; }JNINativeMethod;
第3步,最后通过方法注入到java的jni接口中
jint custom_register_all_jni_methods(JNIEnv *env) { return jniRegisterNativeMethods(env, "com/xxx/xxx", methods, sizeof(methods) / sizeof(methods[0])); }
com/xxx/xxx为所对应的java接口类名