3

我正在使用 Cocos2d-x 构建 Win32 和 Android 应用程序。但是,当我尝试从 Win32 移植到 Android 时遇到了一个致命的问题。我在 Android 中编写了以下代码,尝试从资产中读取文件。但是,每次 Android 应用程序在CCFileUtils::sharedFileUtils()->getFileData. 我不知道为什么。我在其他地方使用此代码,它们都工作正常。

#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
    unsigned long size = 0;
    CCLog("filepath name %s",filename);
    unsigned char* filebuff = CCFileUtils::sharedFileUtils()->getFileData(filename,"rb",&size);
    CCLog("filebuff");
    CCString* ccStr = CCString::createWithData(filebuff,size);
    CCLog("ccstr end");
    RunScriptBuffer(ccStr->getCString(),ret_string,name);
#endif

这是整个函数实现:

bool CLuaScriptReader::RunScriptFile(const char *filename,char* ret_string,char *name){
    if( m_plua == NULL || ret_string == NULL || filename == NULL ) return false;
#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
    char filebuff[MAX_LUA_FILE_LEN] = "";
    char line[1024] = "";
    FILE* fpFile = fopen(filename,"r");
    if( fpFile == NULL ) {
        printf("can not find file %s\n",filename);
        return false;
    }
    while( fgets(line, 1024, fpFile) != NULL) {
        strcat(filebuff,line);
    }
    fclose(fpFile);
    RunScriptBuffer(filebuff,ret_string,name);
#endif
#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
    unsigned long size = 0;
    CCLog("filepath name %s",filename);
    unsigned char* filebuff = CCFileUtils::sharedFileUtils()->getFileData(filename,"rb",&size);
    CCLog("filebuff %l",size);
    CCString* ccStr = CCString::createWithData(filebuff,size);
    CCLog("ccstr end");
    RunScriptBuffer(ccStr->getCString(),ret_string,name);
#endif
    return true;
}

以下是我使用 ndk-stack 工具得到的错误日志。

********** Crash dump: **********
Build fingerprint: 'google/yakju/maguro:4.3/JWR66Y/776638:user/release-keys'
pid: 20518, tid: 20541, name: Thread-61225  >>> com.einverne.test_py <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr e72d2d24
Stack frame #00  pc 00010354  /system/lib/libc.so (dlmalloc+1207): Unable to ope
n symbol file d:\graduation_project\cocos2d-x-2.1.5\projects\Test_py\proj.androi
d\obj\local\armeabi\/libc.so. Error (9): Bad file descriptor
Stack frame #01  pc 0000dcc7  /system/lib/libc.so (malloc+10): Unable to open sy
mbol file d:\graduation_project\cocos2d-x-2.1.5\projects\Test_py\proj.android\ob
j\local\armeabi\/libc.so. Error (9): Bad file descriptor
Stack frame #02  pc 0000aa98  /system/lib/libz.so (inflateInit2_+100)
Stack frame #03  pc 00523044  /data/app-lib/com.einverne.test_py-2/libcocos2dcpp
.so (cocos2d::unzOpenCurrentFile3(void*, int*, int*, int, char const*)+836): Rou
tine unzOpenCurrentFile3 in D:\graduation_project\cocos2d-x-2.1.5/cocos2dx/suppo
rt/zip_support/unzip.cpp:1618
Stack frame #04  pc 00523138  /data/app-lib/com.einverne.test_py-2/libcocos2dcpp
.so (cocos2d::unzOpenCurrentFile(void*)+40): Routine unzOpenCurrentFile in D:\gr
aduation_project\cocos2d-x-2.1.5/cocos2dx/support/zip_support/unzip.cpp:1677
Stack frame #05  pc 0051d318  /data/app-lib/com.einverne.test_py-2/libcocos2dcpp
.so (cocos2d::ZipFile::getFileData(std::string const&, unsigned long*)+360): Rou
tine getFileData in D:\graduation_project\cocos2d-x-2.1.5/cocos2dx/support/zip_s
upport/ZipUtils.cpp:561
Stack frame #06  pc 004ef98c  /data/app-lib/com.einverne.test_py-2/libcocos2dcpp
.so (cocos2d::CCFileUtilsAndroid::getFileData(char const*, char const*, unsigned
 long*)+252): Routine getFileData in D:\graduation_project\cocos2d-x-2.1.5/cocos
2dx/platform/android/CCFileUtilsAndroid.cpp:134
Stack frame #07  pc 00243ab4  /data/app-lib/com.einverne.test_py-2/libcocos2dcpp
.so (CLuaScriptReader::RunScriptFile(char const*, char*, char*)+152): Routine Ru
nScriptFile in jni/../../Classes/LuaScriptReader.cpp:330
Stack frame #08  pc 0023e704  /data/app-lib/com.einverne.test_py-2/libcocos2dcpp
.so (JudgeManager::getResult(std::string, std::string, std::string, CharacterExt
end*, std::string)+1004): Routine getResult in jni/../../Classes/JudgeManager.cp
p:87

编辑:在 Android Logcat 中出现Fatal signal 11 (SIGSEGV) at 0xe72d2d24 (code=1), thread 26592 (Thread-61675)错误。

4

0 回答 0