mxmlc и связь фреймворка - как указать связь как rsl

Я пытаюсь создать свой проект Flex 4 с помощью ant. В Flash Builder 4 в свойствах проекта можно установить для параметра «Связь фреймворка» одно из следующих значений: «Объединено с кодом», «Общая библиотека времени выполнения (RSL)» или «Использовать SDK по умолчанию (общая библиотека времени выполнения)». Как я могу установить эквивалент в качестве параметров mxmlc в build.xml?

Мой текущий build.xml выглядит так:

<target name="myapp">
    <mxmlc 
        file="${PROJECT_ROOT}/myapp.mxml" 
        output="${DEPLOY_DIR}/myapp.swf"
        actionscript-file-encoding="UTF-8"
        keep-generated-actionscript="false"
        warnings="false" optimize="true" incremental="false" >

        <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/> 

        <source-path path-element="${FLEX_FRAMEWORKS}"/> 

        <compiler.debug>true</compiler.debug>

        <runtime-shared-library-path path-element="${FLEX_FRAMEWORKS}/libs/framework.swc">
            <url rsl-url="framework_4.0.0.14159.swz"/>
            <url rsl-url="framework_4.0.0.14159.swf"/>
        </runtime-shared-library-path>                       

        <compiler.source-path path-element="src"/>

        <!-- List of external libraries -->
        <compiler.source-path path-element="${MY_LIB}/src" />

        <!-- List of SWC files or directories that contain SWC files. -->
        <compiler.library-path dir="libs" append="true">
            <include name="*.swc" />
        </compiler.library-path>

        <copy todir="${DEPLOY_DIR}" file="${FLEX_FRAMEWORKS}/rsls/framework_4.0.0.14159.swz"/>
        <copy todir="${DEPLOY_DIR}" file="${FLEX_FRAMEWORKS}/rsls/framework_4.0.0.14159.swf"/>

    </mxmlc>
</target>

Я предполагал, что установка директивы runtime-shared-library-path и копирование swf, swz-файлов фреймворка в мою целевую папку заставит все работать, но, похоже, это не так.

Я оцениваю, работает ли это следующим образом: я использую собственный предварительный загрузчик, и для его работы мне нужно иметь привязку фреймворка как RSL. При «слиянии с кодом» мой предварительный загрузчик застревает в определенном месте и не переходит к моему приложению swf. Это то же самое поведение, которое я наблюдаю, когда использую вышеупомянутый build.xml, что заставляет меня думать, что SWF создается с привязкой фреймворка, объединенной в код (а не связанной с RSL).

Связанный с этим вопрос заключается в том, как определить, использует ли мой swf RSL или нет. Думаю, я мог бы посмотреть на размер скомпилированного вывода. Но, похоже, должен быть способ узнать, использую ли я внешний файл фреймворка или он каким-то образом включен в SWF без моего ведома.


person cybertoast    schedule 01.11.2010    source источник


Ответы (1)


Это немного сложно, потому что документации по этому поводу немного. Вероятно, вам нужно установить следующий параметр в командной строке или в файле конфигурации.

static-link-runtime-shared-libraries = false

В документации от Adobe дается следующее немного загадочное описание того, что делает этот параметр.

Определяет, компилировать ли библиотеки статически или использовать RSL. Установите для этого параметра значение true, чтобы игнорировать RSL, указанные параметром runtime-shared-library-path. Установите для этого параметра значение false, чтобы использовать RSL. Значение по умолчанию верно.

Эта опция полезна, так как вы можете быстро переключаться между статически и динамически связанными приложениями без необходимости изменять параметр runtime-shared-library-path, который может быть подробным, или редактировать файлы конфигурации.

Вот ссылка на документацию. О параметрах компилятора приложения

Обратите внимание, что из документации значение по умолчанию - true. ОДНАКО, если вы загружаете файл flex-config.xml (по умолчанию или пользовательский), вы также должны проверить, присутствует ли этот параметр в этом файле и что он собой представляет. По моему опыту, значение по умолчанию для frameworks / flex-config.xml на самом деле ложно. Однако, похоже, что в приведенном выше примере это может быть установлено по-другому.


(Мы используем другую систему сборки, чем ANT, поэтому я не очень хорошо знаком с синтаксисом build.xml, который вам может понадобиться.)

person Justin Ohms    schedule 22.02.2011
comment
Я на самом деле обманул, чтобы решить эту проблему. В итоге я использовал sourcemate для экспорта моего проекта в виде файла сборки муравья, после чего смог все заработать. Это было намного быстрее, чем отладка того, что Adobe ожидал от меня вложить в свой файл! - person cybertoast; 24.02.2011
comment
Джастин, я даю тебе правильный ответ, потому что он вроде как в правильном направлении. Фактическая опция ‹mxmlc›: ‹mxmlc static-rsls = false ..›. Спасибо. - person cybertoast; 25.02.2011
comment
Это устранило мою проблему thx. В моем случае, используя ant для выполнения mxmlc в качестве командной строки, мне пришлось добавить ‹arg line = -static-link-runtime-shared-libraries = false /› - person Guian; 19.08.2015