Как сделать мой муравьиный файл SWF настолько маленьким, насколько это возможно? - PullRequest
5 голосов
/ 06 августа 2009

У меня есть проект flex, и если я собираю выпускную версию приложения с использованием Flash Builder с RSL на моем SWF, это 115k. Если, однако, я создаю то же самое приложение, используя ant, то swf будет 342k. Без RSL swf составляет 520 тыс.

Как сделать так, чтобы 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>

Ответы [ 4 ]

2 голосов
/ 07 августа 2009

Спасибо за ответы, ребята, но это был не тот из них.

оказывается, что все, что мне нужно было сделать, это удалить материал runtime-shared-library-path, поскольку это уже есть в файле flex-config.xml Мне также пришлось изменить static-link-runtime-shared-library на 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 голос
/ 06 августа 2009

Попробуйте разделить ваши 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>
1 голос
/ 06 августа 2009

Возможно, вам потребуется указать пути к внешним библиотекам, используя параметр -external-library-path .

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

Чтобы использовать 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.

Используйте параметр runtime-shared-library для указания расположения SWF-файла, который приложение загружает как RSL во время выполнения. Вы указываете местоположение SWF-файла относительно местоположения развертывания приложения. Например, если вы храните файл library.swf в каталоге web_root / library на веб-сервере, а приложение - в корневом веб-каталоге, вы указываете библиотеки

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

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

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

mxmlc -runtime-shared-library = ../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

Опция runtime-shared-library - это относительное расположение файлов library.swf, когда приложение было развернуто. Параметр external-library-path - это расположение файла SWC или открытого каталога во время компиляции. Поэтому при компиляции вы должны знать места развертывания библиотек относительно приложения. Вам не нужно знать структуру развертывания при создании библиотеки, потому что вы используете компилятор командной строки compc для создания файла SWC.

0 голосов
/ 07 июля 2010

Используя RSL, не забудьте установить для параметра use-network значение true, иначе скомпилированный SWF-файл будет выдавать ошибку безопасности (не может загрузить RSL) при запуске в другом месте.

...