• 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接口类名


    万里长城十亿兵, 
    国耻岂待儿孙平. 
    愿提十万虎狼族,
    越马扬刀入东京!
  • 相关阅读:
    神盾局第4季
    PAT 1053. Path of Equal Weight (30)
    PAT 1052. Linked List Sorting (25)
    PAT 1051. Pop Sequence (25)
    PAT-1049. Counting Ones (30)
    PAT-1047. Student List for Course (25)
    PAT 1045. Favorite Color Stripe (30)
    每日编程-20170308
    技术博客的第一篇文章
    《C语言》while语句和dowhie语句(7)
  • 原文地址:https://www.cnblogs.com/dellinger/p/3456348.html
Copyright © 2020-2023  润新知