android Flurry integration with NDK app

匿名 (未验证) 提交于 2019-12-03 08:48:34

问题:

My Android application comprises two parts: frontend written in Java and game written in C++ using NativeActivity NDK stuff. I have a problem integrating Flurry into my application. Flurry works fine from within Java part, but crashes from within C++. More specifically, call

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

results in ClassNotFoundException.

jni_env variable is not broken because I am able to get some Intent params using it.

FlurryAgent.jar is added to libs dir and into .classpath. I've even checked 'Order and Export' checkbox for FlurryAgent.jar (though I have no idea what does it mean). Nothing helps.

One more detail: my application is divided into Library and App parts. I have added FlurryAgent.jar to both parts and checked 'Order and Export' in both parts, but it still does not help. Clean & rebuild does does not help either. Did I miss something?

回答1:

The answer is here: http://archive.is/QzA8

In other words, NativeActivity cannot find a third-party class and instead of

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

one should use

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); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!