3

几天前,我开始玩 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所以我不认为它可能是包含路径的东西,但是我可能是错的。

4

2 回答 2

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;
     ...
 }
于 2013-05-05T01:05:05.737 回答
-3

这是明星

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

是不正确的

env->GetJavaVM(env, &g_VM);

是正确的并且

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

也是正确的。

于 2013-05-05T21:32:04.030 回答