cocos2d-x android 直接加载下载到sd的zip里的资源文件(一)

最近公司要做的一个cocos-x项目,这个项目用的是2.2.6版的cocos-x c++ 版,cocos比较老的版本。由于打包出来的apk超过了300M,而且资源无法热更新。面临这两个问题。我们讨论了一下,如何尽快的把包改到50m以内和在线更新新主题,对此研究了一下cocos的底层。了解到cocos可以通过

这样的方法来加载sd 里的资源,然后我们做了第一版。资源的加载方式:

1.将资源下载到sd对应的目录中。结合xutils 下载到对应的sd目录中。

2.然后解压到对应的目录。

3.添加路径到 到 CCFileUtils->SearchPath。通过jni 调用一下 

经过时间的考验,这样的方式有不好毛病。1.解压到sd大的资源大大占用用户的sd卡。2.一些资源会被当做缓存被一些管理软件清理。3.解压过程会占用线程卡顿。

对此出了第二版 直接加载下载好的zip包里的资源。第二版的是在第一版的基础上 修改的。继续研究cocos的资源加载方式,翻阅一下cocos-x 源码,知道了cocos是如何通过一个简单的名字像xxxxbg.png 得到对应的图片资源的。

1.获得xxxxbg.png的fullpath。这个fullpath 有两种可能一种是apk中的assets中的绝对路径,一种是sd中的绝对路径。fullpath = searchpath + orderpath + filename

查阅CCFileUtils.cpp

->std::string CCFileUtils::fullPathForFilename(const char* pszFileName) 

->std::string CCFileUtils::getPathForFilename(const std::string& filename, const std::string& resolutionDirectory, const std::string& searchPath)

->std::string CCFileUtils::getFullPathForDirectoryAndFilename(const std::string& strDirectory, const std::string& strFilename)

->bool CCFileUtilsAndroid::isFileExist(const std::string& strFilePath)

当进入到isFileExit知道了这个方法时 跳转到了CCFileUtilsAndroid.cpp

大概知道了 fullPathForFilename这个方法如何工作的,大概意思是 searchpath数组 + orderpath数字 双层循环遍历一下 filename 的fullpath,如果存在这个文件就返回fullpath,进入下一步读取数据。 isFileExist是关键的方法我们来看看这方法。

来源:柏白

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年4月23日
下一篇 2016年4月23日

相关推荐