Mxmlc在相同的源上生成不同的二进制文件

时间:2011-04-12 08:21:32

标签: flex mxmlc

我正在使用mxmlc将单个.as文件编译为swf。

每当我运行mxmlc时,即使未更改源代码,结果也会有所不同。

例如,

// Test.as
package
{
    public class Test
    {
    }
}

使用mxmlc生成.swf:

mxmlc Test.as

,结果大小不同于461到465字节。

我想这是因为编译器中存在类似时间戳的东西,但是我找不到如何修复或禁用它。有关从同一来源生成“相同二进制”的任何想法吗?谢谢!

3 个答案:

答案 0 :(得分:2)

最后,我发现元数据标签(Tag Type = 77)和未记录的'product info'标签(Tag Type = 41)都包含补充时间。

我通过以下步骤成功删除了时间戳:

1. open swf and un-zlib
2. clear timestamps in metadata tag and product info tag
3. re-zlib and make new .SWF

但我对此并不满意,因此需要对SWF文件进行额外的工作。我想找到更简单的方法。在mxmlc上可能有“绕过产品信息”选项..

您可以在http://www.adobe.com/devnet/swf.html上找到有关SWF文件结构和元数据标记的更多信息,并在http://wahlers.com.br/claus/blog/undocumented-swf-tags-written-by-mxmlc/

上找到有关产品信息的更多信息

答案 1 :(得分:1)

您需要覆盖编译器写入生成的swf文件的元数据。您可以使用-raw-metadata编译器aguement来执行此操作。

用法:

mxmlc -raw-metadata <XML_String> Test.as

示例:

mxmlc -raw-metadata '' Test.as

(产生的swf总是190字节)。

答案 2 :(得分:0)

1:元数据中的日期:

mxmlc的:

 <metadata date=" " />
 <raw-metadata></raw-metadata>

2:ProductInfo中的时间戳

下载sdk源代码,修改ProductInfo.java,让时间戳保持不变。然后更新your_sdk_dir \ lib \ swfutils.jar中的ProductInfo.class

然而,当我完成后,Mxmlc也会在同一个源上生成不同的二进制文件。

我想我无法改变编译器链接顺序。