【问题标题】:Compiling with Flex4 SDK使用 Flex4 SDK 编译
【发布时间】:2010-06-20 11:49:57
【问题描述】:

我正在尝试使用 Flex4 SDK 编译现有的 Flex3 项目。我收到此错误:

Warning: This compilation unit did not have a factoryClass specified in Frame metadata to load the configured runtime shared libraries. To compile without runtime shared libraries either set the -static-link-runtime-shared-libraries option to true or remove the -runtime-shared-libraries option.

生成的文件与我旧的 Flex3 编译的 .swf 文件大致相同。在 Flash Player 中播放生成的 .swf 文件也会出现以下错误:

An Actionscript error ocurred: VerifyError: Error #1014: Class spark.core::SpriteVisualElement could not be found

如果我将编译器属性static-link-runtime-shared-libraries 设置为true,那么错误就会消失,一切都很好。但是,生成的 .SWF 的大小要大几倍。这不是我想要的。

我不完全理解运行时共享库​​的概念,但似乎将静态链接选项设置为 true,这些库包含在 .swf 中。但是,我喜欢将它们从 .swf 中排除,只在运行时加载所需的库,因为我的项目似乎与 Flex3 相关(顺便说一下,我不知道)。

如果我理解正确,playerglobal.swc 应该包含我的 .swf 必须加载的外部库的所有必要代码。 Flex4 编译文件是否需要更多库?我应该对 Frame 元数据标签中的 factoryClass 做些什么吗?

我想我的问题归结为:如何编译与我之前的 Flex3 编译的 .swf 大小相同的 Flex4 .swf?

【问题讨论】:

  • 我不清楚您是否只想编译 flex3 项目,或者您实际上想要包含一些新的/更新的 flex4 功能。另外:你是在命令行编译还是使用 flex builder / fdt?
  • 我需要先重新编译 Flex3 项目,然后可能会添加一些 Flex4 功能。但是编译 Flex3 项目是我的首要任务。我在命令行上使用 mxmlc 进行编译。我的项目包含多个 .as 文件。
  • 我假设“path.to.your.preloader”标识了某个类,对吧? Adobe 是否已经为在找到主 .swf 的同一位置找到共享库的常见情况编写了任何类?

标签: apache-flex flash flex4 actionscript-3 mxmlc


【解决方案1】:

您必须将[Frame(factoryClass="path.to.your.preloader")] 添加到主类(您在编译器选项中设置的那个)。

【讨论】:

  • 我不知道你为什么没有被选为答案,这完全正确:)
【解决方案2】:

Flex3 默认不使用 rsls,但您可以启用它们。 Flex4 rsls 默认开启,见:http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7add.html

运行时共享库​​的概念是:将您的应用程序的一部分(也被其他应用程序(重)使用)拆分,从而只要求用户下载一次。这不会在第一次下载时保存任何内容,但会在以后的下载中保存。您可以制作自己的 rsl,但主要是 adobe 提供的那些会有所作为:由于“每个人”都会使用它们,因此您需要的库有可能已经存在于用户的系统上,因此加快应用的下载时间。

playerglobal.swc 从未包含任何 flex 框架类,它们中的大多数都在 flex.swc 和 framework.swc 中(标准的 flex 3 项目还包括 rpc.swc 和 utility.swc - 我没有检查,但这些可能包含一些弹性部件)

【讨论】:

  • 谢谢,这有助于理解这一切。但是如果我在 Flex4 中启用 RSL,我怎么还会得到那些 VerifyErrors?如果我理解正确,RLS 应该在我的 .swf 启动之前加载,并且不会有任何 VerifyErrors。
  • 警告告诉你为什么你会得到验证错误:你没有工厂类来加载正确的 rsls - 我猜是有一些命令行选项来指定你想要的 rsls使用,该选项将负责生成将在运行时加载它们的正确工厂类。
  • 感谢您的思考。 RSLS 在 flex-config.xml 中指定。我只使用 Adob​​e 的那些。如果我在 app-config.xml 中启用 static-link-runtime-shared-libraries,那么我的应用程序编译得很好。所以这可能意味着正确引用了 RSLS。仅当我将 static-link-runtime-shared-libraries 设置为 false 进行编译时才会发生错误。这给出了 factoryClass 错误 + VerifyError。我还是不明白。我想我已经阅读了有关编译器选项的所有内容,但仍然没有找到解决方案。
  • 只是检查一下:您的主类是 .as 文件还是 .mxml 文件?
  • 这是一个纯 AS3 项目。仅 .as 文件。看起来我不需要额外的 Flex 功能和 Flex RSLS,但这是否意味着我无法使用 Flex4 编译我的项目?我应该回到3.5吗?我还注意到编译器注入了我不需要的东西(例如 UIObject)。
【解决方案3】:

看起来您可能遇到了项目迁移问题。您可能想了解以下流程:

http://www.adobe.com/devnet/flex/articles/flexbuilder3_to_flashbuilder4.html

这是一篇非常好的文章,概述了迁移的不同可能性,具体取决于您要使用的 Flex4 内容的数量。

【讨论】:

  • 感谢您的链接。但是,我没有使用 Flash Builder,而是通过 MXMLC 从命令行编译。
猜你喜欢
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 2013-06-10
  • 2013-02-18
  • 2018-10-31
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多