2009-08-06 2 views
5

У меня есть проект flex, и если я создаю версию для версии приложения, использующую flash-конструктор с RSL на моем swf, это 115k. Если, однако, я создаю одно и то же приложение, используя ant, swf - 342k. Без RSL SWF составляет 520 тыс.Как сделать мой муравейный сгенерированный 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

ответ

2

Спасибо за ответы ребята, но это не было ни тем, ни другим.

Оказывается, все, что мне нужно было сделать, это удалить материал, связанный с исполняемой средой, как это уже есть в файле flex-config.xml. Мне также пришлось изменить библиотеки static-link-runtime-shared-false на false (так что это динамический).

Я скопировал файл flex-config.xml в свой каталог сборки и использовал его, чтобы я мог безопасно вносить изменения.

Это с Flex 4 BTW - не уверен, если я сделал это очень ясно.

мой муравей файл теперь выглядит следующим образом:

<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

Вы, вероятно, нужно указать пути к внешней LIBS с использованием -Внешних-библиотека-путем варианта.

См. the docs для получения дополнительной информации.

Чтобы использовать РАСЖ при компиляции приложения, можно использовать следующие опции компилятора приложения:

* 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_root/libraries на веб-сервере и в приложении в корневом каталоге веб-узла, вы указываете библиотеки/library.swf.

Вы можете указать одну или несколько библиотек с этой опцией. Если вы укажете более одной библиотеки, разделите каждую библиотеку запятой.

Используйте опцию внешней библиотеки, чтобы указать местоположение SWC-файла библиотеки или открыть каталог, который приложение ссылается во время компиляции. Компилятор обеспечивает проверку ссылок на компиляцию с использованием библиотеки, указанной этой опцией. Вы также можете использовать опции externs или load-externs для указания отдельных классов или XML-файла, который определяет содержимое библиотеки.

В следующем примере командной строки компилирует приложение MyApp, который использует две библиотеки:

mxmlc -runtime-Shared-библиотеки = ../libraries/CustomCellRenderer/library.swf, ../libraries/CustomDataGrid /library.swf -Внешние библиотека-путь = ../библиотеки/CustomCellRenderer, ../libraries/CustomDataGrid MyApp.mxml

порядок библиотек является существенным, так как базовые классы должны быть загружены до классов которые используют их.

Вы также можете использовать файл конфигурации, как показано в следующем примере:

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

Параметр run-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, не забудьте установить параметр потребительная к сети так, иначе скомпилированный SWF пожалуется ошибки безопасности (не может загрузить RSL) при запуске в другом месте.

Смежные вопросы