Android ndk 无法从C+;获取对NativeActivity子类的引用+;

Android ndk 无法从C+;获取对NativeActivity子类的引用+;,android-ndk,java-native-interface,native-activity,Android Ndk,Java Native Interface,Native Activity,我正在用从NativeActivity派生的Java类编写一个本机应用程序。我需要在C++代码中获得对该类的引用,但是当我试图从AnTiVeVistyySyOngEngEnter中调用代码时,无法找到该类。我的代码看起来像: void ANativeActivity_onCreate(ANativeActivity *activity, void *savedState, size_t savedStateSize) { ... JNIEnv *jenv = ac

我正在用从NativeActivity派生的Java类编写一个本机应用程序。我需要在C++代码中获得对该类的引用,但是当我试图从AnTiVeVistyySyOngEngEnter中调用代码时,无法找到该类。我的代码看起来像:

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 {
...
}

根据链接fadden posted(),创建本机线程可能会导致类装入器无法找到您的类。因此,从单独的线程调用
ANativeActivity\u onCreate
似乎是这个问题最可能的解释

在这种情况下,有一种简单的解决方法:

dsActivityClass = jenv->GetObjectClass(activity->clazz);
看见