Android ndk另一种注册方式

不使用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接口类名

posted on 2013-12-03 18:54  老酒  阅读(340)  评论(2编辑  收藏  举报