使用 Flex SDK 编译的 Flash 文件非常大

Posted

技术标签:

【中文标题】使用 Flex SDK 编译的 Flash 文件非常大【英文标题】:Flash compiled with Flex SDK very big file size 【发布时间】:2013-08-26 17:57:48 【问题描述】:

我有一个使用 Adob​​e Flash Builder 编译的简单 Flash 视频播放器,但现在我使用 Flex SDK 4.6 编译它。使用 FB 编译时,Flash 文件大小为 20KB。现在是 280KB 。我知道它向 swf build 添加了一些 swc 文件,我已禁用此处提供的调试等说明http://livedocs.adobe.com/flex/3/html/help.html?content=performance_06.html。是否可以在不使用 mxml 的情况下以某种方式转换 fla 组件?

这是我的 mxml 代码

<?xml version="1.0" encoding="utf-8"?>
<mx:Application backgroundColor="#000000" xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" minWidth="320" minHeight="240" creationComplete="initApp()">
    <fx:Script>
        public function initApp():void
            var p = new video_player(uic);                      
               
    </fx:Script>    
    <mx:UIComponent id="uic" />      
</mx:Application>

video_player.as

....Import statements
public class video_player      
        private var uic:UIComponent
        var fullScreen:Image;
        var rtmpApplication:String;
        var streamName:String;
        public function video_player(_uic:UIComponent) 
            uic=_uic;
            if (FlexGlobals.topLevelApplication.parameters.hasOwnProperty("applicationName")) 
                rtmpApplication=FlexGlobals.topLevelApplication.parameters.applicationName;
            
            if (FlexGlobals.topLevelApplication.parameters.hasOwnProperty("streamName")) 
                streamName=FlexGlobals.topLevelApplication.parameters.streamName;
                   
            vPlayer=new Video(playerwidth,playerheight);
            uic.addChild(vPlayer);
            init();         
        

        public function init()
         //add fullscreen image in flash top right , and event handler
         //Code to connect to live application and play video using NetConnection and NetStream
        


有没有办法解决这个问题?

【问题讨论】:

你能分享你如何编译它们的信息吗?您在 Flash Builder 中有一个仅 ActionScript 的项目吗?框架是否设置为 RSL?据我所知,用 MXML 创建 fla 组件是不可能的。 @Reboog711 感谢 Jeff 的评论我发布了 mxml,actionscript 代码。我在构建时尝试了“-link-report”,它显示嵌入的 .swc 文件导致文件很大。我将非常感谢任何帮助。 一旦您使用了&lt;mx:Application&gt; 标签,您的SWF 就会变得臃肿不堪。你说得好像最初一样,你的代码不依赖于 Flex 框架,那么那个代码是什么样子的?如果您的原始代码是相同的,也许您最初是使用 RSL 进行编译的(如上所述),而现在您不是?但是,即使使用 RSL,我也从未见过 Flex SWF 小到 20Kb。 @SunilD。我正在使用 Flash Builder 进行构建,它是一个 FLA 文件,它使用的是 swf 组件。没有 mxml 文件或没有 Flex 。使用 Flex SDK 的唯一原因是为了避免 Flash Builder 许可和成本。 好吧,解释一下:Flash Builder 是我们用于 Flex 和纯 Actionscript 项目的 IDE。如果您创建了 FLA 文件,那么您没有使用 Flash Builder。您使用的是 Flash Professional(或 Flash 创作工具、Flash CS5、Flash CS6……我不知道该怎么称呼它)。不幸的是,一旦您切换到 Flex,您就会在项目中添加更多代码。使用 Flex RSL 进行编译是对抗臃肿的一种方法。默认设置是使用 RSL,因此您的基于 Flex 的 SWF 可能不会变得更小。 【参考方案1】:

我还添加了选项 -static-link-runtime-shared-libraries=true 所以它不会下载任何运行时的东西。没有那个闪存大小是 49KB

通过设置上述选项,您已告知编译器将所有 Flex 框架类(由您的应用程序使用)包含在应用程序 SWF 中。因此,您的 SWF 从 49KB 增长到 280KB。

这就是我和@Reboog711 谈论的“RSL”(运行时共享库​​)。如果您使用 Flex RSL,那么所有 Flex 框架代码都不会包含在您的应用程序 SWF 中。 Flex 框架 RSL 由 Adob​​e 签名并且可以由 Flash Player 缓存。所以使用它们总是更可取的。 (注意:我假设这一切仍然适用于 Apache Flex)

最后,我想重申一下,在 Flash Builder 中,您可以创建两种基本类型的项目:Flex 项目、Actionscript 项目。我忽略了移动选项,但同样适用于它们:

一般来说,Actionscript 项目会产生较小的 SWF,因为您不依赖任何 Flex 框架类。如果您要创建一个 Actionscript 项目,听起来您可以使您的视频播放器应用程序更小(接近您最初拥有的 20KB 大小)。

【讨论】:

感谢您的指导,尽管 Actionscript 项目必须使用 Adob​​e 许可产品(即 Flash Professional)构建。是否有任何可用的开源 IDE 可以用来做同样的事情? 1) 您可以在 Flash Builder 中创建一个 Actionscript 项目。尝试创建一个新项目以查看... 2) Flash Builder 和 Flash Professional 都是 Adob​​e 的许可产品,那么使用其中一个或另一个要避免什么? 3) 您可以使用带有 Flex SDK 的命令行编译器作为免费的开源选项。 4)如果你在windows上,你可以免费使用FDT IDE。 一个更正:Adobe 不会签署他们没有创建的 RSL;因此,Flash Player 不会跨域缓存 Apache Flex RSL。 抱歉我的无知,我不知道我可以用 SDK 编译 Actionscript 项目。非常感谢苏尼尔!

以上是关于使用 Flex SDK 编译的 Flash 文件非常大的主要内容,如果未能解决你的问题,请参考以下文章

FDT 找不到 Flash 播放器

如何在 Flash Builder 4.6 中更新 Flex SDK

使用 Flash CS5 创建 Flex 3.5 组件

Adobe AIR SDK 和 Flex SDK 的关系?

如何将 Flex 编译的 SWF 加载到 Flash CS4 编译的 SWF 中

指定的目标 Flash Player 版本 11.1.0.0 应等于或高于 Flex SDK 所需的最低版本 23.0.0.0