2009-08-06 10 views
5

Ho un progetto flex e se costruisco una versione di rilascio dell'applicazione utilizzando il flash builder con RSL sul mio swf è 115k. Se comunque costruisco la stessa applicazione usando ant, swf è 342k. Senza RSL lo swf è 520k.Come faccio a rendere il mio swf Ant-Generated il più piccolo possibile?

Come si ottiene uno swf piccolo come quello creato da FlashBuilder?

Ecco il file della mia formica Ho un'altra attività che copia i file 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

Quali sono gli argomenti del compilatore in Flex/Flash Builder per questo progetto? – DyreSchlock

risposta

2

Grazie per le risposte ragazzi ma non era uno di questi.

scopre tutto ciò che dovevo fare era rimuovere il file runtime-shared-library-path poiché questo è già nel file flex-config.xml. Ho anche dovuto cambiare le librerie condivise di link-runtime statici a false (quindi è dinamico).

Ho copiato il file flex-config.xml nella mia directory di build e l'ho usato così posso apportare modifiche in modo sicuro.

Questo è con Flex 4 BTW - sicuramente se l'ho fatto in modo molto chiaro.

mio file di formiche ora assomiglia a questo:

<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

avrete probabilmente bisogno di specificare i percorsi delle librerie esterne utilizzando l'opzione -External-library-path.

Vedere the docs per ulteriori informazioni.

Per utilizzare RSL durante la compilazione dell'applicazione, è possibile utilizzare le seguenti opzioni del compilatore di applicazione:

* 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. 

utilizzare l'opzione di runtime-shared-librerie per specificare la posizione del file SWF che l'applicazione viene caricata come RSL in fase di esecuzione. Specificare il percorso del file SWF relativo al percorso di distribuzione dell'applicazione. Ad esempio, se si archivia il file library.swf nella directory web_root/libraries sul server Web e l'applicazione nella root Web, si specificano libraries/library.swf.

È possibile specificare una o più librerie con questa opzione. Se si specifica più di una libreria, separare ciascuna libreria con una virgola.

Utilizzare l'opzione percorso-libreria esterna per specificare la posizione del file SWC della libreria o della directory aperta a cui fa riferimento l'applicazione in fase di compilazione. Il compilatore fornisce il controllo del collegamento in fase di compilazione utilizzando la libreria specificata da questa opzione. È inoltre possibile utilizzare le opzioni externs o load-extern per specificare singole classi o un file XML che definisce il contenuto della libreria.

Il seguente esempio di riga di comando compila l'applicazione MyApp che utilizza due biblioteche:

mxmlc -runtime-compartecipazione librerie = ../libraries/CustomCellRenderer/library.swf, ../libraries/CustomDataGrid /library.swf -External-library-path = ../librerie/CustomCellRenderer, ../libraries/CustomDataGrid MyApp.mxml

L'ordine delle librerie è significativo perché le classi di base deve essere caricato prima le classi che li usano

È inoltre possibile utilizzare un file di configurazione, come nell'esempio seguente:

../libraries/CustomCellRenderer ../libraries/CustomDataGrid ../libs/playerglobal.swc ../libraries/CustomCellRenderer/library.swf ../libraries/CustomDataGrid/library.swf

L'opzione runtime-shared-library è la posizione relativa dei file library.swf quando l'applicazione è stata distribuita. L'opzione percorso-libreria esterna è la posizione del file SWC o della directory aperta in fase di compilazione. Per questo motivo, è necessario conoscere le posizioni di distribuzione delle librerie relative all'applicazione quando la si compila. Non è necessario conoscere la struttura di distribuzione quando si crea la libreria, poiché si utilizza il compilatore della riga di comando compc per creare un file SWC.

1

Prova a separare le tue RSL nei propri argomenti. Ecco cosa come ce l'ho sulla mia generazione:

<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

Utilizzando RSL, ricordatevi di impostare il parametro uso a rete per vera, altrimenti il ​​file SWF compilato si lamenterà errore di sicurezza (non può caricare RSL) quando viene eseguito in una posizione diversa.

Problemi correlati