我有一个flex项目,如果我在swf上使用带有RSL的Flash Builder构建应用程序的发行版本是115k。但是,如果我使用ant构建相同的应用程序,则swf为342k。没有RSL,swf是520k。
如何让swf与FlashBuilder构建的swf一样小?
这是我的ant文件,我有另一个复制rsls的任务。
<project name="EUI Client Application" default="compileClientApp">
<target name="compileClientApp" depends="compileClientBundles">
<mxmlc
file="${CLIENT_PROJECT.dir}/src/${CLIENT_PROJECT.app}.mxml"
output="${DEPLOY.dir}/${CLIENT_PROJECT.app}.swf"
keep-generated-actionscript="false"
actionscript-file-encoding="UTF-8"
incremental="false"
>
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/framework.swc">
<url rsl-url="flex4_4.0.0.7791.swf"/>
<url rsl-url="framework_4.0.0.7791.swf"/>
<url rsl-url="framework_textLayout_4.0.0.7791.swf"/>
<url rsl-url="rpc_4.0.0.7791.swf"/>
<url rsl-url="textLayout_451.swf"/>
</runtime-shared-library-path>
<source-path path-element="${CLIENT_PROJECT.dir}/src" />
<compiler.library-path dir="${LIBS.dir}" append="true">
<include name="*.swc" />
</compiler.library-path>
<compiler.library-path dir="${DEPLOY_BIN.dir}" append="true">
<include name="*.swc" />
</compiler.library-path>
</mxmlc>
</target>
<target name="generateWrapper">
<html-wrapper
title="${CLIENT_APP_TITLE}"
file="${CLIENT_PROJECT.app}.html"
height="100%" width="100%"
bgcolor="white" application="app"
swf="${CLIENT_PROJECT.app}"
version-major="10" version-minor="0" version-revision="0"
history="true" output="${DEPLOY.dir}" />
</target>
<target name="compileClientBundles">
<compileBundle bundleName="Modules" source="${CORE_PROJECT.dir}/locale" />
</target>
答案 0 :(得分:2)
感谢回复人员,但这不是其中之一。
结果表明我需要做的就是删除运行时共享库路径的东西,因为这已经存在于flex-config.xml文件中。我还必须将static-link-runtime-shared-libraries更改为false(因此它是动态的)。
我已将flex-config.xml文件复制到我的构建目录中并使用它,以便我可以安全地进行更改。
这是使用Flex 4 BTW - 我确定我是否非常清楚。
我的ant文件现在看起来像这样:
<project name="EUI Client Application" default="compileClientApp">
<target name="compileClientApp" depends="compileClientBundles">
<mxmlc
file="${CLIENT_PROJECT.dir}/src/${CLIENT_PROJECT.app}.mxml"
output="${DEPLOY.dir}/${CLIENT_PROJECT.app}.swf"
keep-generated-actionscript="false"
actionscript-file-encoding="UTF-8"
optimize="true" incremental="false"
link-report="${DEPLOY_BIN.dir}/app_link_report.xml"
>
<load-config filename="${basedir}/flex-config.xml" />
<define name="CONFIG::stub" value="false" />
<define name="CONFIG::release" value="true" />
<source-path path-element="${CLIENT_PROJECT.dir}/src" />
<compiler.library-path dir="${LIBS.dir}" append="true">
<include name="*.swc" />
</compiler.library-path>
<compiler.library-path dir="${DEPLOY_BIN.dir}" append="true">
<include name="*.swc" />
</compiler.library-path>
</mxmlc>
</target>
<target name="generateWrapper">
<html-wrapper
title="${CLIENT_APP_TITLE}"
file="${CLIENT_PROJECT.app}.html"
height="100%" width="100%"
bgcolor="white" application="app"
swf="${CLIENT_PROJECT.app}"
version-major="10" version-minor="0" version-revision="0"
history="true" output="${DEPLOY.dir}" />
</target>
<target name="compileClientBundles">
<compileBundle bundleName="Modules" source="${CORE_PROJECT.dir}/locale" />
</target>
答案 1 :(得分:1)
您可能需要使用 -external-library-path 选项指定外部库的路径。
有关详细信息,请参阅the docs。
要在编译应用程序时使用RSL,请使用以下应用程序编译器选项:
* runtime-shared-libraries Provides the run-time location of the shared library.
* external-library-path|externs|load-externs Provides the compile-time location of the libraries. The compiler requires this for dynamic linking.
使用runtime-shared-libraries选项指定应用程序在运行时作为RSL加载的SWF文件的位置。您可以指定SWF文件相对于应用程序部署位置的位置。例如,如果将library.swf文件存储在Web服务器上的web_root / libraries目录中,并将应用程序存储在Web根目录中,则指定libraries / library.swf。
您可以使用此选项指定一个或多个库。如果指定了多个库,请用逗号分隔每个库。
使用external-library-path选项指定库的SWC文件的位置或应用程序在编译时引用的打开目录。编译器通过使用此选项指定的库提供编译时链接检查。您还可以使用externs或load-externs选项指定单个类或定义库内容的XML文件。
以下命令行示例编译使用两个库的MyApp应用程序:
mxmlc -runtime-shared-libraries = ../libraries/CustomCellRenderer/library.swf, ../libraries/CustomDataGrid/library.swf -external库路径= .. /库/ CustomCellRenderer, ../libraries/CustomDataGrid MyApp.mxml
库的顺序很重要,因为必须在使用它们的类之前加载基类。
您还可以使用配置文件,如以下示例所示:
../libraries/CustomCellRenderer ../libraries/CustomDataGrid ../libs/playerglobal.swc ../libraries/CustomCellRenderer/library.swf ../libraries/CustomDataGrid/library.swf
runtime-shared-libraries选项是部署应用程序时library.swf文件的相对位置。 external-library-path选项是编译时SWC文件或打开目录的位置。因此,在编译时,必须知道库相对于应用程序的部署位置。创建库时,您不必了解部署结构,因为您使用compc命令行编译器来创建SWC文件。
答案 2 :(得分:1)
尝试将RSL分成他们自己的参数。以下是我在构建中的具体方法:
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/framework.swc">
<url rsl-url="${rsl.url}/framework_3.2.0.3958.swz" />
<url rsl-url="${rsl.url}/framework_3.2.0.3958.swf" />
</runtime-shared-library-path>
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/datavisualization.swc">
<url rsl-url="${rsl.url}/datavisualization_3.2.0.3958.swz" />
<url rsl-url="${rsl.url}/datavisualization_3.2.0.3958.swf" />
</runtime-shared-library-path>
答案 3 :(得分:0)
使用RSL,记得将use-network参数设置为true,否则编译后的swf会在不同位置运行时出现安全错误(无法加载RSL)。