使用 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 文件非常大的主要内容,如果未能解决你的问题,请参考以下文章