ccui的代码中,很多地方都直接使用了绝对路径,正常情况下没有问题,但是在某些情况下可能会工作不正常。
以我们的一个项目为例,游戏启动时会下载资源,并保存到sd卡上。
由于操作系统会自动扫描sd卡上的所有图片文件,所以下载的图片资源会出现在手机相册里。因此我们对图片文件名做了混淆,比如"a.png",实际上存储的名字是"a.xxx".
FileUtils的setFilenameLookupDictionary()方法可以实现这个功能。
假设某个界面 a.json,用到了图片a.png。
apk中包含
/res/a.json
/res/a.xxx
如果某次更细资源后,a.png做了修改,那么
apk中包含
/res/a.json
/res/a.xxx
/sdcard/xxx/res/a.xxx
如果通过a.json的绝对路径/res/a.json,来计算a.png的绝对路径,得到
pngPath = “a.png”
pngFullPath = “/res/a.png”
有3个问题
- 计算出的绝对路径是 /res, 而不是/sdcard/xxx/res
- 文件名是a.png,而不是a.xxx
3.有的地方要根据扩展名判断类型, 用pngFullPath不正确。
结论:
代码中尽量不使用绝对路径,把路径问题交给FileUtils处理。
