Android ndk 无法从C+;获取对NativeActivity子类的引用+;
我正在用从NativeActivity派生的Java类编写一个本机应用程序。我需要在C++代码中获得对该类的引用,但是当我试图从AnTiVeVistyySyOngEngEnter中调用代码时,无法找到该类。我的代码看起来像: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
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);
看见