3

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

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

例如,

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

并使用 mxmlc 生成 .swf :

mxmlc Test.as

结果大小从 461 到 465 字节不等。

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

4

3 回答 3

2

最后,我发现元数据标签(标签类型 = 77)和未记录的“产品信息”标签(标签类型 = 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-上找到产品信息标签由 mxmlc 编写/

于 2011-04-13T08:47:00.697 回答
1

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

用法:

mxmlc -raw-metadata <XML_String> Test.as

例子:

mxmlc -raw-metadata '' Test.as

(生成的 swf 始终为 190 字节)。

于 2011-04-12T09:58:40.060 回答
0

1:元数据中的日期:

xmlc:

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

2 : ProductInfo 中的时间戳

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

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

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

于 2013-12-27T07:41:16.337 回答