与NDK的Andr​​oid应用程序整合乱舞 [英] android Flurry integration with NDK app

查看:192
本文介绍了与NDK的Andr​​oid应用程序整合乱舞的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Andr​​oid应用程序由两部分组成:前端用Java编写的游戏用C ++编写使用NativeActivity的NDK的东西。我已经整合到乱舞我的应用程序有问题。乱舞工作正常,从Java中的一部分,但在C ++中崩溃。
更具体地说,通话

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

结果的ClassNotFoundException

jni_env 变量不破,因为我能得到一些意图 PARAMS使用它。

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

FlurryAgent.jar被添加到 DIR和成的.classpath 。我甚至已经检查排序和导出复选框FlurryAgent.jar(虽然我不知道这是什么意思)。没有什么帮助。

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.

一个细节:我的应用程序分为图书馆和App部分。我已经加入到FlurryAgent.jar两部分,并在两部分检查订单和出口,但它仍然没有帮助。清洁和放大器;重建并没有帮助。我错过了什么?

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?

推荐答案

答案就在这里: http://archive.is / QzA8

在换句话说, NativeActivity的找不到第三方类,而不是

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

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

这篇关于与NDK的Andr​​oid应用程序整合乱舞的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆