Android ndk。无法获得对JVM的引用

时间:2013-05-04 16:57:42

标签: android c android-ndk

几天前,我开始玩android NDK。试图从书中编写一个示例程序,出现了一个小问题。

所以在这里我需要获得对JavaVM的引用。

// Global env ref (for callbacks)
static JavaVM *g_VM;

JNIEXPORT jint JNICALL Java_jni_Natives_LibMain
  (JNIEnv * env, jclass class, jobjectArray jargv)
{
    // obtain a global ref to the caller jclass
    (*env)->GetJavaVM(env, &g_VM); ...

Eclipse说“method 'GetJavaVM()' could not be resolved”就像包含(*env) object方法的每一行一样。

包含目录的路径:C:\programs\IDE\adt-bundle-windows-x86_64-20130219\android-ndk-r8e\platforms\android-14\arch-arm\usr\include所以我不认为它可能是包含路径的东西,但我可能是错的。

2 个答案:

答案 0 :(得分:5)

你在编译.cpp文件吗? < jni.h>有不同的C和C ++ JNIEnv实现,你正在使用C版本。在C ++中,您的代码如下所示:

 JNIEXPORT jint JNICALL Java_jni_Natives_LibMain
   (JNIEnv * env, jclass class, jobjectArray jargv)
 {
     // obtain a global ref to the caller jclass
     env->GetJavaVM(&g_VM); ...

获取JavaVM引用的常规方法是在JNI_OnLoad:

 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* aReserved)
 {
     // cache java VM
     g_VM = vm;
     ...
 }

答案 1 :(得分:-2)

这是明星

(*env)->GetJavaVM(env, &g_VM);

不正确

env->GetJavaVM(env, &g_VM);

是正确的

(*env).GetJavaVM(env, &g_VM);

也是正确的。