00003 不思议迷宫.0010.2:project.manifest自动生成器
每次修改完代码,在安装到手机之前,老是手动执行如下操作:
l 在VS中以二进制方式打开luac文件,去除BOM头
l 找到修改的luac文件,将之拖动到MD5工具
l 从md5工具中,复制md5的值
l 将md5值拷贝到文本文件中进行比较,然后拷贝第x位到第y位的值
l 打开project.manifest,找到luac文件对应的项目,复制第x位到第y位的值
l 回到md5工具,查看luac文件的size
l 再回到project.manifest,修改size。
每次更新,修改的往往不仅一个文件,这就痛苦了。作为一个懒惰的人,我只想点个鼠标就统统搞定一切。这次,让我来一劳永逸地解决这个问题。
project.manifest是个ANSI编码的文本文件,里面有固定的内容和需要动态生成的md5内容。随着游戏版本的不同,固定内容可能会有所不同;所以,固定内容不能在生成器程序中写死,我们用模版文件,比如:
固定内容1;动态md5内容;固定内容2。
生成器读取到模版内容,自动生成md5内容后,将“动态md5内容;”替换为真实的内容,然后写回到project.manifest。
自动生成md5内容也没什么难的,就是枚举目录和文件,获得相对路径,然后计算md5值,取其中的一个特定子串,并获得大小,一起组合为一个json字符串。
计算文件md5值的代码,网上有现成的。我找的这个是C写的,虽然看得不大懂,但好在能用。
运行,发现非常慢。这也就算了,关键是计算出来的值和其他工具计算出来的不一样,真是蛋疼。又从网上找了一个,这回对了:
//Magicinitialization constants
#defineMD5_INIT_STATE_0 0x67452301
#defineMD5_INIT_STATE_1 0xefcdab89
#defineMD5_INIT_STATE_2 0x98badcfe
#defineMD5_INIT_STATE_3 0x10325476
//Constants forTransform routine.
#defineMD5_S11 7
#define MD5_S1212
#define MD5_S1317
#define MD5_S1422
#defineMD5_S21 5
#defineMD5_S22 9
#define MD5_S2314
#define MD5_S2420
#defineMD5_S31 4
#define MD5_S3211
#define MD5_S3316
#define MD5_S3423
#defineMD5_S41 6
#define MD5_S4210
#define MD5_S4315
#define MD5_S4421
//TransformationConstants - Round 1
#defineMD5_T01 0xd76aa478 //TransformationConstant 1
#defineMD5_T02 0xe8c7b756 //Transformation Constant 2
#defineMD5_T03 0x242070db //TransformationConstant 3
#defineMD5_T04 0xc1bdceee //TransformationConstant 4
#defineMD5_T05 0xf57c0faf //Transformation Constant 5
#defineMD5_T06 0x4787c62a//Transformation Constant 6
#defineMD5_T07 0xa8304613 //TransformationConstant 7
#defineMD5_T08 0xfd469501 //TransformationConstant 8
#defineMD5_T09 0x698098d8 //TransformationConstant 9
#defineMD5_T10 0x8b44f7af //Transformation Constant 10
#defineMD5_T11 0xffff5bb1 //TransformationConstant 11
#defineMD5_T12 0x895cd7be //TransformationConstant 12
#defineMD5_T13 0x6b901122 //TransformationConstant 13
#defineMD5_T14 0xfd987193 //TransformationConstant 14
#defineMD5_T15 0xa679438e //TransformationConstant 15
#defineMD5_T16 0x49b40821 //TransformationConstant 16
//TransformationConstants - Round 2
#defineMD5_T17 0xf61e2562 //TransformationConstant 17
#defineMD5_T18 0xc040b340 //TransformationConstant 18
#defineMD5_T19 0x265e5a51 //Transformation Constant 19
#defineMD5_T20 0xe9b6c7aa //Transformation Constant 20
#defineMD5_T21 0xd62f105d //Transformation Constant 21
#defineMD5_T22 0x02441453 //TransformationConstant 22
#defineMD5_T23 0xd8a1e681 //Transformation Constant 23
#defineMD5_T24 0xe7d3fbc8 //TransformationConstant 24
#defineMD5_T25 0x21e1cde6 //TransformationConstant 25
#defineMD5_T26 0xc33707d6 //TransformationConstant 26
#defineMD5_T27 0xf4d50d87 //TransformationConstant 27
#defineMD5_T28 0x455a14ed //Transformation Constant 28
#defineMD5_T29 0xa9e3e905 //TransformationConstant 29
#defineMD5_T30 0xfcefa3f8 //Transformation Constant 30
#defineMD5_T31 0x676f02d9 //Transformation Constant 31
#defineMD5_T32 0x8d2a4c8a //Transformation Constant 32
//TransformationConstants - Round 3
#defineMD5_T33 0xfffa3942 //TransformationConstant 33
#defineMD5_T34 0x8771f681 //Transformation Constant 34
#defineMD5_T35 0x6d9d6122 //TransformationConstant 35
#defineMD5_T36 0xfde5380c //Transformation Constant 36
#defineMD5_T37 0xa4beea44 //TransformationConstant 37
#defineMD5_T38 0x4bdecfa9 //Transformation Constant38
#defineMD5_T39 0xf6bb4b60 //TransformationConstant 39
#defineMD5_T40 0xbebfbc70 //TransformationConstant 40
#defineMD5_T41 0x289b7ec6 //TransformationConstant 41
#defineMD5_T42 0xeaa127fa //TransformationConstant 42
#defineMD5_T43 0xd4ef3085 //TransformationConstant 43
#defineMD5_T44 0x04881d05 //TransformationConstant 44
#defineMD5_T45 0xd9d4d039 //TransformationConstant 45
#defineMD5_T46 0xe6db99e5 //TransformationConstant 46
#defineMD5_T47 0x1fa27cf8 //TransformationConstant 47
#defineMD5_T48 0xc4ac5665 //Transformation Constant 48
//TransformationConstants - Round 4
#defineMD5_T49 0xf4292244 //TransformationConstant 49
#defineMD5_T50 0x432aff97 //TransformationConstant 50
#defineMD5_T51 0xab9423a7 //Transformation Constant 51
#defineMD5_T52 0xfc93a039 //Transformation Constant 52
#defineMD5_T53 0x655b59c3 //Transformation Constant 53