安卓打包的apk文件只是做了简单的压缩,通过解压缩可以获取资源文件,如果不想图片资源被别人看到,那么可以对图片进行加密。
cocos2d-x提供了xxtea加密和解密算法,先将图片进行加密,这样就打不开图片了,然后在CCImage解析图片的时候进行解密即可。
一、下载quick-cocos2d-x
quick-cocos2d-x封装了一套加密的工具,先下载quick-cocos2d-x,git地址https://github.com/dualface/v3quick。
解压之后把bin目录拷贝到我们的cocos2d-x工程根目录。
二、加密
quick-cocos2d-x提供了pack_files命令,可以将图片进行加密,加密算法用的是xxtea,你可以到cocos2d-x\external\xxtea目录下查看。
到bin目录打开命令行窗口,执行pack_files.bat -h 可以查看pack_files的使用方法。
编写打包资源脚本
- ::res_pack.bat
- setDSRC=E:\Cocos2d\Cocos2d-x\Projects\Game_Lua\res
- setESRC=E:\Cocos2d\Cocos2d-x\Projects\Game_Lua\assets
- cdbin
- pack_files.bat-i%DSRC%-o%ESRC%-ek123456-estest
打开游戏则会报错,unsupport image format,因为每种图片的前面一些字节是这种图片类型的标记,比如png的前面8个字节固定是0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a。因为已经被加密了,所以识别不了图片格式。
二、解密
所有图片的加载都封装在CCImage类的initWithImageFile和initWithImageFileThreadSafe方法。
[cpp]
copy
- //initWithImageFile
- Datadata=FileUtils::getInstance()->getDataFromFile(_filePath);
- if(!data.isNull())
- {
- ret=initWithImageData(data.getBytes(),data.getSize());
- }