【问题标题】:How to monkey patch or override a swc class in Flex?如何在 Flex 中修改或覆盖 swc 类?
【发布时间】:2011-07-03 01:54:22
【问题描述】:

我正在使用 Axiis 项目中的 swc 在我正在处理的项目中显示可视化。我遇到了一个错误,重新编译库 swc 将是一个简单的解决方案,但我只能使用错误版本的 swc。

我有 Axiis 源并编译了一个修复了错误的版本,但由于客户端版本限制,我不允许使用它。

有谁知道我如何在我的代码中使用更新的 Actionscript 类/文件,以便它覆盖 swc 类?

【问题讨论】:

  • “客户端”限制是指 Flash Player 中的限制吗?还是来自支付您开发费用的实体的限制?如果后者我很震惊重新编译代码是错误的,但是猴子补丁很好。它们只是使用相同代码的两种不同方式。一个是“正确的”,一个是hack。
  • 是的,一个人付钱给我做这个应用程序的客户,一个新版本的审查过程本身需要几个月的时间。在新库获得批准之前,我正在寻找破解方法。
  • 嗨@Flextras,我和Wa-jiw一起工作,同意这是一个hack,但有时swc会根据我们的测试获得批准,我们不允许修改swc,但可以使用已经测试过的(即使它有错误)。我们已经尝试过 Christophe 的建议,但问题是被覆盖的代码在一个没有直接从应用程序引用的类中(问题本质上是 3/4 兼容性,原始 swc 是为 3 编写的,现在在 4 中使用, axiis),即使引用修改后的类并重新编译,swc 类似乎使用旧的类。谢谢

标签: flash apache-flex actionscript-3 swc monkeypatching


【解决方案1】:

我不确定是否允许您执行以下操作:将带有您的修复程序的类放在主应用程序的源路径中。如果您确保包名和类名与原始类完全匹配,编译器将选择这个类而不是库中的类。当我们想要修补 Flex 框架而不需要自己编译库时,我们经常这样做。

另一个想法可能是使用AS3Commons-Bytecode 创建您要修复的类的代理,然后让您的代码在代理上运行,而不是在原始实例上运行。这是一个纯粹的运行时修复。它更高级一点,只有当您能以某种方式让代理替换您需要修复的类的原始实例时,它才会起作用。

【讨论】:

  • 您的第一个建议是我们尝试的第一件事,但未能使其发挥作用。你必须做些什么才能让它工作的属性有什么特别的吗?不确定字节码是否值得让它工作......
  • 我们没有做任何特别的事情来实现这一点。我们所做的只是将类放在主源路径中,并在包含我们要修补的类的库上建立库依赖关系。
  • @wajiw 如果您的意思是不工作是因为类创建向导不允许您创建现有类,您可以转到包文件夹并手动创建,编译器将采取没有任何问题。
  • @wajiw 这仅在库合并到代码中时才有效。你指定了吗? i.imgur.com/jQTxFhs.png
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2021-12-13
相关资源
最近更新 更多