resources_packer 资源包生成工具

resources_packer是一个简单实用的游戏资源更新包制作工具。

应用场景

玩游戏的时候经常遇到这样的一个场景,打开游戏,提示正在下载游戏资源更新包。

假设本地游戏版本1.0.0, 提示下载1.0.0-1.zip更新包,那么这个zip包当中,包含的是的1.0.0版本与1.0.1版本差异的文件;

假设本地游戏版本1.0.1, 很久没有玩游戏,提示正在更新1.0.1-10.zip更新包,这个zip包当中,包含了从1.0.1版本到1.0.10版本的所有差异文件。

那么,像1.0.1-10.zip这种差异包,是如何生成?人工挑出差异文件,制作zip包?有没有自动化的方法?

resources_packer就是一个生成版本差异资源包自动化工具。

Example

假设, 所需打包的目录testdir

  • testdir
    • test1.txt
    • test2.txt

执行命令, 操作行为check

resources_packer -paths testdir -package-name TestPackage -artifact-dir testdirOutput -action check

这时候,与testdir目录平级的testdirOutput目录下,将生成:

  • testdirOutput --> 输出目录
    • TestPackage.0.zip --> 生成的0号资源包,包含test1.txt, test2.txt两个文件
    • TestPackage.0.zip.md5 --> 0号资源包的md5文本
    • TestPackage.resource_version.txt --> TestPackage这个系列包的最新版本(比如当前内容为0)

这时候,我们已经拥有了0号资源包了。我们做一些差异文件:往testdir里新加文件test3.txt。 testdir目录的结构将变化成:

  • testdir
    • test1.txt
    • test2.txt
    • test3.txt

执行命令, 操作行为pack:

resources_packer -paths testdir -package-name TestPackage -artifact-dir testdirOutput -action pack

这时候,与testdir目录平级的testdirOutput目录下,将变成:

  • testdirOutput --> 输出目录
    • TestPackage.0.zip --> 生成的0号资源包全量包,包含test1.txt, test2.txt两个文件
    • TestPackage.0.zip.md5 --> 0号资源包的md5文本
    • TestPackage.0-1.zip --> 0号资源包与1号资源包的差异包
    • TestPackage.0-1.zip.md5
    • TestPackage.1.zip --> 1号资源包的全量包
    • TestPackage.1.zip.md5
    • TestPackage.resource_version.txt --> TestPackage这个系列包的最新版本(现在内容为1)

好了,一个差异资源包0-1就这样生成了。

为什么同时有全量包和差异包? 因为差异包的生成,是基于两个全量包之间进行比较的。

生成的zip包,有什么特别?

  • .manifest 记录全量的文件(不论差异与否,所有的目录文件)的大小、MD5等文件信息
  • OTHER1
  • OTHER2
  • OTHER3/OTHER4.txt

简而言之,生成的资源zip,只有根路径的.manifest文件是由resources_packer生成的,其余的所有文件,都是您所设置的资源文件。

命令行如何获取帮助?

你可以同通过命令行获取到详细帮助:

screenshot.png

Linux/Unix下:

resources_packer --help

Windows下,需要预先安装Python环境:

resources_packer.bat --help

python resources_packer --help

打包操作模式

resources_packer有几种不同的操作模式,来适应不同的实际情况。参数-action传入。

check检查或创建

常用。检查是否存在当前版本的资源包,不存在则init创建。存在则不做任何事。

假设,当前没有生成任何资源包,则生成0号zip包。 假设,当前已有0号zip包,则不做任何事。

pack差异打包

核心。生成差异资源包时,提升资源版本号。

假设当前已0号资源包, 执行pack行为,将会识别0号资源包的文件,与当前所有资源文件进行比较。差异的文件,生成1号资源包。

init初始化

强制重新生成当前版本的差异包。

假设当前资源版本10, 执行init后,重新生成10版本,覆盖之前的10号资源包。

init一般很少手动执行,一般在你不想修改当前资源包版本号,但又想重新添加差异文件的时候使用。

clean清理

清理旧版本的zip包。 假设当前最新版本3,那么其实只会用到1-3, 2-3, 0-3几个zip包。像0-2, 1-2这种旧版本的zip包,已经没有用处了。执行clean,它们将被归档到archives目录,考虑到稳健性,不做删除操作。

test测试

将会在脚本目录进行一系列的测试,并生成目录。可以快速验证resources_packer的效果; 测试包括跨文件版本回滚、跨版本删除文件; 如版本1新增文件,版本2删掉该文件,版本3恢复版本1的文件; 1-2包,将包含.deleted文件; 1-3包,包含.deleted文件; 2-3包,整个zip只有.manifest文件