2009-08-06 50 views
5

我有一個flex項目,如果我使用Flash Builder的應用程序的發佈版本與我的swf上的RSLs是115k。但是,如果我使用ant構建相同的應用程序,swf是342k。沒有RSLs,swf是520k。如何讓我的Ant生成的swf儘可能小?

如何讓swf與FlashBuilder構建的一樣小?

這是我的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

Flex/Flash Builder中的這個項目的編譯器參數是什麼? – DyreSchlock 2009-08-06 13:31:57

回答

2

感謝回覆球員,但這不是其中之一。

事實證明,我所需要做的就是刪除運行時共享庫​​路徑的東西,因爲這已經在flex-config.xml文件中。我還必須將static-link-runtime-shared-libraries更改爲false(因此它是動態的)。

我已經將flex-config.xml文件複製到我的構建目錄中並使用它,以便我可以安全地進行更改。

這是與Flex 4 BTW - nto如果我說得很清楚。

我的螞蟻文件現在看起來是這樣的:

<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

你可能需要指定的路徑使用-external庫路徑選項外部庫。

請參閱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. 

使用運行時共享庫​​選項來指定SWF文件的位置是應用程序在運行時加載爲RSL。您可以指定SWF文件相對於應用程序的部署位置的位置。例如,如果將library.swf文件存儲在Web服務器的web_root/libraries目錄中,並將該應用程序存儲在Web根目錄中,則可以指定libraries/library.swf。

您可以使用此選項指定一個或多個庫。如果您指定了多個庫,請用逗號分隔每個庫。

使用external-library-path選項指定應用程序在編譯時引用的庫的SWC文件或打開的目錄的位置。編譯器通過使用此選項指定的庫提供編譯時鏈接檢查。您也可以使用externs或load-externs選項來指定單個類或定義庫內容的XML文件。

下面的命令行示例編譯使用兩個庫MyApp應用程序:

mxmlc的-runtime-共享庫= ../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文件。

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> 
0

使用RSL,記得設置使用的網絡參數設置爲true,否則編譯的SWF會抱怨安全錯誤(無法加載RSL )在不同位置運行時。