2009-08-06 15 views
5

Tengo un proyecto de flexión y si construyo una versión de lanzamiento de la aplicación usando flash builder con RSL en mi swf es de 115k. Sin embargo, si construyo la misma aplicación usando ant, el swf es 342k. Sin RSL, el swf es 520k.¿Cómo puedo hacer que mi swf Ant Generated sea lo más pequeño posible?

¿Cómo obtengo el swf para que sea tan pequeño como el construido por FlashBuilder?

Aquí está mi archivo ant Tengo otra tarea que copia los 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

¿Cuáles son sus argumentos de compilación en Flex/Flash Builder para este proyecto? – DyreSchlock

Respuesta

2

Gracias por las respuestas chicos pero no fue ninguno de esos.

Resulta que todo lo que tenía que hacer era eliminar las cosas de runtime-shared-library-path, ya que esto ya está en el archivo flex-config.xml. También tuve que cambiar el static-link-runtime-shared-libraries a falso (entonces es dinámico).

He copiado el archivo flex-config.xml en mi directorio de compilación y lo uso para poder realizar cambios de forma segura.

Esto es con Flex 4 BTW - nto seguro si lo dejé muy claro.

mi archivo de hormigas ahora se ve así:

<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

es probable que necesite para especificar las rutas de acceso a las librerías externas usando la opción -Externa-library-path.

Consulte the docs para obtener más información.

Para utilizar RSL al compilar su aplicación, se utilizan las siguientes opciones de aplicación del compilador:

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

Use la opción de tiempo de ejecución-shared-bibliotecas para especificar la ubicación del archivo SWF que la aplicación se carga como un RSL en tiempo de ejecución. Usted especifica la ubicación del archivo SWF en relación con la ubicación de implementación de la aplicación. Por ejemplo, si almacena el archivo library.swf en el directorio web_root/libraries en el servidor web y la aplicación en la raíz web, especifique libraries/library.swf.

Puede especificar una o más bibliotecas con esta opción. Si especifica más de una biblioteca, separe cada biblioteca con una coma.

Utilice la opción ruta-biblioteca-externa para especificar la ubicación del archivo SWC de la biblioteca o el directorio abierto al que hace referencia la aplicación en tiempo de compilación. El compilador proporciona verificación de enlace en tiempo de compilación utilizando la biblioteca especificada por esta opción. También puede usar las opciones externas o de carga externa para especificar clases individuales o un archivo XML que define el contenido de la biblioteca.

El siguiente ejemplo de línea de comandos se compila la aplicación MyApp que utiliza dos bibliotecas:

mxmlc -runtime-bibliotecas compartidas = ../libraries/CustomCellRenderer/library.swf, ../libraries/CustomDataGrid /library.swf externoTribunal-library-path = ../bibliotecas/CustomCellRenderer, ../libraries/CustomDataGrid myApp.mxml

El orden de las bibliotecas es significativo porque las clases de base deben ser cargadas antes de las clases que los usan

También puede utilizar un archivo de configuración, tal como muestra el siguiente ejemplo:

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

La opción runtime-shared-libraries es la ubicación relativa de los archivos library.swf cuando la aplicación se ha implementado. La opción ruta-biblioteca-externa es la ubicación del archivo SWC o el directorio abierto en tiempo de compilación. Debido a esto, debe conocer las ubicaciones de implementación de las bibliotecas relativas a la aplicación cuando la compila. No es necesario que conozca la estructura de despliegue cuando crea la biblioteca, porque utiliza el compilador de línea de comandos compc para crear un archivo SWC.

1

Trate de separar sus RSL en sus propios argumentos. He aquí cómo lo tengo en mi compilación:

<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

El uso de RSL, no olvide colocar parámetro uso de la red a la verdad, de lo contrario el SWF compilado se quejará de error de seguridad (no se puede cargar RSL) cuando se ejecuta en diferente ubicación.

Cuestiones relacionadas