0

我正在使用从 NativeActivity 派生的 Java 类编写本机应用程序。我需要在我的 C++ 代码中获取对该类的引用,但是当我尝试在从 ANativeActivity_onCreate 调用的代码中执行此操作时,找不到该类。我的代码看起来像:

void ANativeActivity_onCreate(ANativeActivity *activity,
        void *savedState, size_t savedStateSize)
{
    ...
    JNIEnv *jenv = activity->env;
    dsActivityClass = jenv->FindClass("uk/co/realh/hgame/HGameActivity");
    if (!dsActivityClass)
    {
        // Log error and return to Java
    }
    ...
}

我的 logcat 显示了 if 子句打印的错误,然后是 java.lang.NoClassDefFoundError 的报告。

我已经仔细检查了类名,我确定它是正确的。并且在调用上述代码时必须实例化该类,因为它包含一个静态代码块来加载 gnustl_shared,没有它,Android 无法加载包含ANativeActivity_onCreate. 什么可能导致找不到类?它是这样定义的:

package uk.co.realh.hgame;

import android.app.NativeActivity;
...

public class HGameActivity extends NativeActivity {
...
}
4

1 回答 1

0

根据 fadden 发布的链接(1),创建本机线程可能会导致类加载器无法找到您的类。因此,与从单独的线程调用有关的事情ANativeActivity_onCreate似乎是这个问题最有可能的解释。

在这种情况下,有一个简单的方法可以解决这个问题:

dsActivityClass = jenv->GetObjectClass(activity->clazz);
于 2013-08-21T17:17:51.123 回答