【问题标题】:Is it possible to embed an existing SWF into an Air for iOS app?是否可以将现有的 SWF 嵌入到 Air for iOS 应用程序中?
【发布时间】:2012-02-29 22:17:49
【问题描述】:

我的一位客户有很多 SWF,他想将它们移植到 iPad。但是,他只有 SWF,没有 FLA。

我想知道这是否是一种在 Air for iOS 应用程序中运行 SWF 的方法。我读过你可以使用加载器导入,但它们只会作为动画运行,忽略其中的所有代码。

谢谢,欢迎任何帮助!

[更新] 我读过一些关于使用 SWC 的文章,但仍然不确定他们是否会运行代码。

【问题讨论】:

  • 没错,swf 文件中不允许有 ActionScript,因为 Apple 不允许第三方运行时在 iOS 中执行加载的代码。 swf 文件只包含时间轴动画,没有代码,可以加载和运行,但这是一个相当小的用例。
  • 您确实可以使用 swc 文件,但您不会使用加载器来加载它们。您可以将它们作为库包含到您的主应用程序中。不幸的是,如果没有 fla,您可能无法使用代码生成 swc。
  • 将 swf 文件打包为 swc 文件可能是一种选择。 swc 文件在运行时不加载,它们在编译时包含。通常,swc 文件不是从现有的 swf 文件构建的,但应该可以,因为 swc 文件实际上是带有 .swc 扩展名和指定内容的 zip 文件en.wikipedia.org/wiki/Adobe_SWC_file
  • 使用 Trillix 或类似工具反编译文件可能是一种选择。我宁愿拥有源代码来嵌入二进制文件。

标签: ios actionscript-3 flash


【解决方案1】:

2012 年 10 月更新:

在 Adob​​e AIR 3.5 中,adl 引入了一项称为“多 SWF 支持”的功能,该功能允许使用加载程序加载在 .ipa 中交付的 SWF(本地文件,而不是来自服务器),以便在其中包含代码。 adl 编译器 AOT 编译包含在 .ipa 中的 SWF,允许它们在 iOS 下加载和工作。

在撰写本文时,AIR 3.5 目前处于测试阶段,可在 adobe labs 网站上获得:

请注意,此功能需要 -swf-version=18 或更高版本的根 SWF(不一定是正在加载的资产)和应用程序 xml 文件中以 3.5 结尾的 AIR 命名空间。

旧答案:

带有代码的外部 SWF 不起作用的原因是 Air 的 ADT 编译器将您的根 SWF(并且只有您的根 swf)交叉编译为 iOS 设备可使用的 Objective-c 代码。 [嵌入式] SWF 和 .ipa(AIR 3.5 之前的版本)中包含的 SWF 都不会交叉编译。

我为嵌入式资产创建了解决此问题的方法:

[Embed(source="gameLevel.swf")]
  private var gameLevel:Class;

 ...

 addChild(new gameLevel());

在这种情况下,如果 gameLevel.swf 中有代码,它通常不会在 iOS 中工作,因为 new gameLevel() 会创建一个加载器并解释 SWF 字节码。但是,如果您首先通过我的名为 SWFMerge 的工具运行上述 SWF,它将获取您嵌入的 SWF 并将其合并到您的根 SWF 中。结果是 ADT 会将您的嵌入式代码编译成 Objective-C,它将在 iOS 上运行,并注意:new gameLevel() 现在会生成您的资产实例 - 而不是加载器。

SWFMerge 工具在这里:

http://www.onetacoshort.com/temp/SWFMerge_alpha.swf

LMK 如果此解决方法适合您或您遇到问题。干杯!

-杰夫

【讨论】:

    【解决方案2】:

    是的,你可以,

    Apple 不允许您的应用程序使用 Loader 从 Internet 下载 SWF,但您可以将它们嵌入并包含在您的 .ipa 中

    为此,您将使用嵌入标签

    [Embed("myswf.swf", mimeType="application/octet-stream")] private var mySwf:Class;
    

    然后你可以使用

    swf = new mySwf();
    swf.addEventListener(Event.COMPLETE, completeHandler);
    

    并与该完整处理程序中的 swf 进行交互

    我想补充一点,可以编译无法加载的 SWF

    【讨论】:

    猜你喜欢
    • 2012-07-18
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2016-02-14
    • 2019-08-01
    • 2011-06-09
    相关资源
    最近更新 更多