8

我的 Android 应用程序包括两部分:用 Java 编写的前端和使用 NativeActivity NDK 东西用 C++ 编写的游戏。我在将 Flurry 集成到我的应用程序时遇到问题。Flurry 在 Java 部分中运行良好,但在 C++ 中崩溃。更具体地说,调用

jni_env->FindClass("com/flurry/android/FlurryAgent");

结果ClassNotFoundException

jni_env变量没有被破坏,因为我能够Intent使用它获得一些参数。

FlurryAgent.jar 被添加到libsdir 和.classpath. 我什至检查了 FlurryAgent.jar 的“订购和导出”复选框(尽管我不知道这是什么意思)。没有什么帮助。

更多细节:我的应用程序分为库和应用程序部分。我已将 FlurryAgent.jar 添加到这两个部分并检查了两个部分的“订购和导出”,但它仍然没有帮助。清洁和重建也无济于事。我错过了什么?

4

1 回答 1

9

答案在这里: 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);
于 2013-01-30T14:02:00.530 回答