cocos2dx 在android平台打开文件问题
Posted blfbuaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos2dx 在android平台打开文件问题相关的知识,希望对你有一定的参考价值。
我们有一个项目是基于cocos2dx + lua,在网络部分用到了protobuf, 在初始化protobuf的时候须要读取本地文件,用lua的io.open读取文件在windows,ios上是没问题的。android下的app是apk文件。由于apk是压缩文件,所以io.open无能为力,由于整个app被压缩为一个文件。
当时大家也不知道为啥这样能解决。当时想可能是linux不支持这种路径。回家后在linux实验,就算我加几个”./“都不影响打开文件夹。查看了cocos2d-x 底层,发现android部分是调用的ndk里的AAssetManager_open方法,仅仅能看到头文件看不到源码。然后在google上搜索了关于这个函数的相关信息,也没啥收获,就在stackoverflow提问。
1、开源的优点。在遇到问题的时候仅仅须要看下源码就能够了,相对闭源的东西,遇到问题仅仅能去查看文档。假设文档写得不清楚。我觉得这种库最好不要用。一旦遇到问题欲哭无泪。
2、有时在解决这个问题的时候不要太逞强,技术人员都觉得没有解决不了的问题,但有时确实会发生:“不识庐山真面目,仅仅缘身在此山中”,自己把自己绕进去,找个局外人或许一下子就发现了。
3、在学习计算机过程。一点一滴慢慢积累,打好基础,不要求快和新。在真正遇到问题的时候,还的看经验和基础。
4、不管是书上还是名人说的不一定对。仅仅有通过计算机检验的东西。才是正确的。
參考:
1、github上关于这部分的源码
在网上查到资料能够通过调用cocos2dx里的getFileData() 这个函数来读取文件内容,getFileData通过检測不同的平台。调用不同的接口的来打开和读取文件,在ios和windows上依旧没问题,可在android上调用读取文件时还是打不开文件。试了非常多方法都不能够。找公司还有一同事来帮忙查看。将路径改动后问题解决。
string relativePath = "scripts/test.pb"; // this is ok string relativePath = "./scripts/test.pb"; // this can not open the file"
当时大家也不知道为啥这样能解决。当时想可能是linux不支持这种路径。回家后在linux实验,就算我加几个”./“都不影响打开文件夹。查看了cocos2d-x 底层,发现android部分是调用的ndk里的AAssetManager_open方法,仅仅能看到头文件看不到源码。然后在google上搜索了关于这个函数的相关信息,也没啥收获,就在stackoverflow提问。
果然有大神回答,而且引用了github上关于这部分的源码。看了源码才想明确。原来不是去通过这个路径打开文件。而是去一个文件管理器查找,我的文件路径里有“./“,和原路径去比較。自然是找不到,到此这个疑问消除了。
这次事情启演示样例如以下:
1、开源的优点。在遇到问题的时候仅仅须要看下源码就能够了,相对闭源的东西,遇到问题仅仅能去查看文档。假设文档写得不清楚。我觉得这种库最好不要用。一旦遇到问题欲哭无泪。
2、有时在解决这个问题的时候不要太逞强,技术人员都觉得没有解决不了的问题,但有时确实会发生:“不识庐山真面目,仅仅缘身在此山中”,自己把自己绕进去,找个局外人或许一下子就发现了。
3、在学习计算机过程。一点一滴慢慢积累,打好基础,不要求快和新。在真正遇到问题的时候,还的看经验和基础。
4、不管是书上还是名人说的不一定对。仅仅有通过计算机检验的东西。才是正确的。
參考:
1、github上关于这部分的源码
以上是关于cocos2dx 在android平台打开文件问题的主要内容,如果未能解决你的问题,请参考以下文章
使用cocos2dx移植 android平台,怎么收集崩溃日志
Cocos2d-x 3.1.1 学习日志12--一Cocos2dx3.1.1移植到Android平台的方法(最实用最有效的!!)
使用cocos2dx移植 android平台,怎么收集崩溃日志
cocos2dx android mk 2.0.2编译文件目录以及导入库问题