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

Posted 长空小鹰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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*的方法的主要内容,如果未能解决你的问题,请参考以下文章

eclipse android ndk 提示Type 'JNIEnv' could not be resolved 等信息解决办法

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

NDK:动态注册方法

NDK:动态注册方法

Android Studio NDK 入门教程--Java对象的传递与修改

Android Studio NDK 新手教程--Java对象的传递与改动