cocos2dx3.0以下版本打的apk包在android5.0机上运行崩溃

前端之家收集整理的这篇文章主要介绍了cocos2dx3.0以下版本打的apk包在android5.0机上运行崩溃前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近发现公司项目在android5.0上跑时会出现崩溃情况,网络上也有相关资料,具体原因可参考此贴 http://blog.k-res.net/archives/1525.html
总体来说解决方案有两种:
1.升级cocos2dx版本(高版本已经修复了该问题)
2.参考此贴 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=564427 下面就说说第2种解决方案,这里以cocos2dx 2.2.6 lua版本为例子: 首先下个ndk r10d,这个不要问我怎么下; 然后查找cocos2dx框架文件修改,如下所示: 修改CCHTTPRequestAndroid.cpp如下: static jclass getClassID_(const char *className,JNIEnv *env) { ....... if (NULL == s_classHttp) { ret = pEnv->FindClass(className); // s_classHttp = ret; //---->这是修改前的,去掉,替换成下面这句 s_classHttp = (jclass)pEnv->NewGlobalRef(ret); //----->这是修改后的 } else { ret = (jclass)pEnv->NewLocalRef(s_classHttp); } ...... } 修改CCLuaJavaBridge.cpp如下 inline map<string,string> jHashMap2StdMap(JNIEnv* env,jobject jhashmap) { ...... if (env == NULL) { break; } // static jclass mapClass = env->FindClass("java/util/HashMap"); //--->修改前 //修改后 jclass tmp = env->FindClass("java/util/HashMap"); static jclass mapClass = (jclass)env->NewGlobalRef(tmp); ...... if (keyset == NULL) { break; } // static jclass setClass =env->FindClass("java/util/Set"); //---->修改前 //修改后 jclass tmp2 = env->FindClass("java/util/Set"); static jclass setClass = (jclass)env->NewGlobalRef(tmp2); ...... } inline vector<string> jVector2stdVector(JNIEnv* env,jobject jVector) { ...... if (env == NULL) { break; } // static jclass vectorClass = env->FindClass("java/util/Vector");//--->修改前 //修改后 jclass tmp = env->FindClass("java/util/Vector"); static jclass vectorClass = (jclass)env->NewGlobalRef(tmp); ...... } inline vector<string> jArray2stdVector(JNIEnv* env,jobject jArray) { ...... if (env == NULL) { break; } // static jclass arrayClass = env->FindClass("java/util/ArrayList");//--->修改前 //修改后 jclass tmp = env->FindClass("java/util/ArrayList"); static jclass arrayClass = (jclass)env->NewGlobalRef(tmp); ...... } 上面工作完成后进行编译,重新打包。

猜你在找的Cocos2d-x相关文章