首页 > 代码库 > NDK中可靠的获取JNIEnv*的方法

NDK中可靠的获取JNIEnv*的方法

使用NDK时,几乎任何方法都需要一个JNIEnv来调用。这个类是和线程相关的,如何可靠的获取它?

首先,作为NDK的so,必然有一个地方是由android系统调用的,这个调用将带来一个JNIEnv参数,不要使用它,而是调用:

JNIEnv->GetJavaVM(&g_javaVM);

 获取一个JavaVM类型变量。

接着在需要使用JNIEnv的时候调用

    int status;
    JNIEnv* _jniEnv = NULL;
    status = g_javaVM->GetEnv((void **)&_jniEnv, JNI_VERSION_1_6);
    
    if(status < 0)
    {
        status = g_javaVM->AttachCurrentThread(&_jniEnv, NULL);
        if(status < 0)
        {
            _jniEnv = NULL;
        }
    }

 即可可靠的得到jnienv了。

NDK中可靠的获取JNIEnv*的方法