我的安卓应用程序由两部分组成:前端是用Java语言编写的,游戏是用C++编写的,使用NativeActivity NDK之类的东西。我有一个问题集成到我的应用程序中。Flurry在Java part中运行良好,但在C++中崩溃。更具体地说,调用
jni_env->FindClass("com/flurry/android/FlurryAgent");
结果为ClassNotFoundException
。
jni_env
变量没有损坏,因为我可以使用它来获取一些Intent
参数。
FlurryAgent.jar被添加到libs
目录和.classpath
中。我甚至选中了FlurryAgent.jar的“订购和出口”复选框(尽管我不知道它是什么意思)。什么都没有用。
还有一个细节:我的应用程序分为库和应用程序部件。我已经将FlurryAgent.jar添加到两个部分中,并检查了两个部分中的“订购和导出”,但它仍然没有帮助。清理和重建也没有帮助。我错过了什么吗?
发布于 2013-01-30 14:02:01
答案就在这里:http://archive.is/QzA8
换句话说,NativeActivity
找不到第三方类,而不是
jni_env->FindClass("com/flurry/android/FlurryAgent");
一个人应该使用
jobject nativeActivity = state->activity->clazz;
jclass acl = jni_env->GetObjectClass(nativeActivity);
jmethodID getClassLoader = jni_env->GetMethodID(acl, "getClassLoader", "()Ljava/lang/ClassLoader;");
jobject cls = jni_env->CallObjectMethod(nativeActivity, getClassLoader);
jclass classLoader = jni_env->FindClass("java/lang/ClassLoader");
jmethodID findClass = jni_env->GetMethodID(classLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
jstring strClassName = jni_env->NewStringUTF("com.flurry.android.FlurryAgent");
jclass flurryClass = (jclass)(jni_env->CallObjectMethod(cls, findClass, strClassName));
jni_env->DeleteLocalRef(strClassName);
https://stackoverflow.com/questions/14586821
复制相似问题