使用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了。
时间: 2024-10-28 23:18:36