使用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了。