Domanda

Ho un progetto flessibile e se creo una versione di rilascio dell'applicazione utilizzando Flash builder con RSL sul mio swf sarà 115k.Se tuttavia creo la stessa applicazione utilizzando ant, il file swf è 342k.Senza RSL il swf è 520k.

Come posso fare in modo che il file swf sia piccolo quanto quello creato da FlashBuilder?

Ecco il mio file ant. Ho un'altra attività che copia l'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>

È stato utile?

Soluzione

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

si rivela tutto quello che dovevo fare era di togliere la roba runtime-shared-library-path come questo è già nel file flex-config.xml. Ho anche dovuto cambiare il statico-link-runtime-shared-libraries su false (quindi è dinamica).

Ho copiato il file flex-config.xml nella mia directory di compilazione e l'uso che così posso fare tranquillamente modifiche.

Questo è con Flex 4 BTW - nto sicuro se ho fatto che molto chiaro

.

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

Altri suggerimenti

Avrete probabilmente necessario specificare i percorsi delle librerie esterne utilizzando la -External-library-path .

Vedere la documentazione per maggiori informazioni.

  

Per usare RSL durante la compilazione dell'applicazione, è possibile utilizzare le opzioni del compilatore seguente 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 i carichi applicativi come un RSL in fase di esecuzione. È possibile specificare la posizione del file SWF relativo alla posizione di distribuzione dell'applicazione. Ad esempio, se si memorizza il file nella directory library.swf web_root / librerie sul server web, e l'applicazione nella radice Web, si specifica librerie / library.swf.

     

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

     

Utilizzare l'opzione external-library-path per specificare la posizione dei file SWC della biblioteca o una directory aperta che i riferimenti di applicazione in fase di compilazione. Il compilatore fornisce collegamento in fase di compilazione controllo utilizzando la libreria specificata da questa opzione. È inoltre possibile utilizzare gli esterni o le opzioni di carico-persone esterne per specificare le singole classi o un file XML che definisce il contenuto della libreria.

     

Il seguente esempio da riga di comando compila l'applicazione MyApp che usa due librerie:

     

mxmlc -runtime-shared-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 ne fanno uso.

     

È 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 di runtime-shared-libraries è la posizione relativa dei file library.swf quando l'applicazione è stato distribuito. L'opzione esterna-library-path è il percorso del file SWC o directory aperta al momento della compilazione. A causa di questo, è necessario conoscere le posizioni di implementazione delle librerie relative all'applicazione quando si compila. Non è necessario conoscere la struttura di distribuzione quando si crea la biblioteca, perché si utilizza il compilatore a linea di comando CoMPC per creare un file SWC.

Prova separare i tuoi RSL nelle proprie argomentazioni. 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>

Usando RSL, ricorda di impostare il parametro use-network su true, altrimenti il ​​file swf compilato lamenterà un errore di sicurezza (impossibile caricare RSL) quando viene eseguito in una posizione diversa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top