直到你需要对比2个swf是否有改动时,才会发现尽管as代码不做任何修改,每次重新编译出来的swf的hash值都会变。

在编写一个自动化部署及脚本时,需要对本次发布的文件和已近发布的文件进行hash效验,以此确认文件是否有过修改。就遇到了这个恼火的问题。

一番折腾后发现,Flex SDK 编译器在swf文件尾加入了一个41的tag类型 (ProductInfo),里面包含了编译时间导致。

问题找到了,好在Flex SDK是开源的,通过搜索定位相关功能在swfutils的模块里面,顺利找到了对应的源码进行修改,编译出class。更新到jar包。

经过修改后,把编译时间固定到2011年11月11日11时11分11秒,这样每次编译出的swf文件hash是完全一致的。

已在3.6.0和4.5.0两个版本中测试有效,尚未发现副作用。

 

顺便也提供修改后编译出的class文件,可以自行更新到Flex SDK 中的\lib\swfutils.jar 中。

Download: ProductInfo.class  ProductInfo.class (3.1 KiB, 163 hits)
确保SWF文件Hash值相同(hack edition)

 

BTW:需要注意的是在默认的metaData信息里也包含了日期,这个比较好处理,本身提供了自定义的参数,如指定下列编译参数既可实现修改。