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