cocos2dx CCFileUtils::sharedFileUtils() 静态调用
发布时间:2020-12-14 17:10:46 所属栏目:百科 来源:网络整理
导读:如题 CCFileUtils :: sharedFileUtils () 静态调用,也就是在cpp文件的函数外面调用 Android平台会无故崩溃,跟踪调试发现在CCFileUtilsAndroid.cpp的42行过不去即 CCFileUtils* CCFileUtils::sharedFileUtils(){ if (s_sharedFileUtils == NULL) { s_sharedF
如题
CCFileUtils::sharedFileUtils() 静态调用,也就是在cpp文件的函数外面调用 Android平台会无故崩溃,跟踪调试发现在CCFileUtilsAndroid.cpp的42行过不去即
CCFileUtils* CCFileUtils::sharedFileUtils() { if (s_sharedFileUtils == NULL) { s_sharedFileUtils = new CCFileUtilsAndroid(); s_sharedFileUtils->init(); std::string resourcePath = getApkPath(); s_pZipFile = new ZipFile(resourcePath,"assets/"); } return s_sharedFileUtils; } std::string resourcePath = getApkPath(); 这行 然后查看getApkPath()函数,里面也就返回string g_apkPath的c_str() 最后没查出别的有用信息,不过此时g_apkPath应该是null,因为g_apkPath是依靠java那边回调才设置的值
JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxHelper_nativeSetApkPath(JNIEnv* env,jobject thiz,jstring apkPath) { g_apkPath = JniHelper::jstring2string(apkPath); } 而静态调用了CCFileUtils::sharedFileUtils(),发生在静态区 而java加载libgame.so的方法如下 static { System.loadLibrary("game"); }可想而知getApkPath的调用就会在nativeSetApkPath之前 所以sharedFileUtils()就不要在全局区调用了(也就是静态调用)
但是ios平台,是没有问题
ps:遇到问题就先记录,以免以后再次遇到,耗费时间去找问题 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |