美文网首页音视频
Android NDK开发:JNIEnv的原理

Android NDK开发:JNIEnv的原理

作者: itfitness | 来源:发表于2021-01-27 21:21 被阅读0次

    目录

    JNIEnv的原理

    我们通过查看源码发现JNIEnv其实是结构体JNINativeInterface_的一级指针。



    然后我们继续查看结构体JNINativeInterface_的源码发现其中有好多的函数指针,也就是我们平时用来与Java互调的那些函数


    模拟JNIEnv的实现

    接下来我们就通过简单的代码来模拟JNIEnv的实现:

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef const struct JNINativeInterface_* JNIEnv;
    typedef char* jstring;//模拟定义jstring
    
    struct JNINativeInterface_
    {
        char* (* NewStringUTF)
            (JNIEnv* env, const char* utf);
    };
    
    
    char* NewStringUTF(JNIEnv* env, const char* utf) {
        return utf;
    }
    
    //模拟Java的Native方法
    jstring Java_JniDemo_getString(JNIEnv* env) {
        return (*env)->NewStringUTF(env,"模拟JNIEnv");
    }
    
    void main() {
        struct JNINativeInterface_ jni_interface;
        jni_interface.NewStringUTF = NewStringUTF;
    
    
        JNIEnv jni_env = &jni_interface;
    
        JNIEnv* env = &jni_env;
    
        jstring j_string = Java_JniDemo_getString(env);
    
        printf("%s\n",j_string);
    
        system("pause");
    }
    

    运行结果如下:


    相关文章

      网友评论

        本文标题:Android NDK开发:JNIEnv的原理

        本文链接:https://www.haomeiwen.com/subject/prczzktx.html