一般情况下,将开发过程的图片资源放置在drawable中,打包成apk后是可以被获取到资源图片等。
但是许多游戏中的图片是获取不到的,当然肯定有方式可以保护这些资源的
图片加密,用的时候读出来恢复
剩下的就是加密算法的问题了
可以直接用XOR,这个最简单,或在特定的地方加入垃圾数据。。。。
最简单的一个办法就是,先将图片资源都放在assets目录下,程序第一次启动时,通过流方式将这些图片资源都转移到程序的私有目录下(./data/data/<package name>/files/)路径下,该路径是私有的
然后再把assets目录下的所有文件都删掉
这样以后直接从私有目录中读文件就行了
以上做法在技术上稍微有点复杂,而且不能防止已经Root的机器访问,只不过它做起来稍微简单点,对已赶时间的人来说
还是做图片文件加密吧,最简单的一个办法,将文件名扩展名改名,然后在这些图片文件里面的前面加上几个字节,使文件无法被正常,你在代码中处理的时候,读这个图片文件的时候,读出来后要去掉前面的几个多余的字节。
具体是说,将你程序中所用到的外部文件,同意存放至一个目录中或其子目录中
然后通过I/O为每个文件的头和尾添加额外的字节数,使其文件被加密
之后,文件的命名可以不按照常理,比如正常的图片应该是:xxx.jpg OR xxx.png等,带着后缀的命名,你可以为每个被加密后的文件计算其MD5,然后就用这个MD5命名该文件,没有后缀,没有标示,它就是一个文件存在那
这样的文件放到那,估计它谁也不可能打开,即使它拿到文件流,也无用,因为你加密过了;
至于你的程序怎么打开这些文件,我就不用多说了吧
1.在pc上,将图片文件进行处理,比如加密
2.把处理后的资源放入 res\raw 目录里
3.需要加载图片时,从 raw 里读取资源,进行加密的反向处理,转换成图片