• cocos2dx 在android平台打开文件问题


        我们有一个项目是基于cocos2dx + lua,在网络部分用到了protobuf, 在初始化protobuf的时候需要读取本地文件,用lua的io.open读取文件在windows,ios上是没问题的,android下的app是apk文件,由于apk是压缩文件,所以io.open无能为力,因为整个app被压缩为一个文件。在网上查到资料可以通过调用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上关于这部分的源代码
  • 相关阅读:
    用java在mysql中随机插入9000 000条数据
    java连接mysql的一个小例子
    JDK环境变量配置
    JVM工作原理
    线程和进程的区别
    java实现链表
    内连接、外连接、左连接、右连接
    udp协议
    要看的东西
    eclipse快捷键
  • 原文地址:https://www.cnblogs.com/fengju/p/6174293.html
Copyright © 2020-2023  润新知