5

ant を使用して flex 4 プロジェクトをビルドしようとしています。Flash Builder 4 では、プロジェクトのプロパティで、「フレームワーク リンケージ」を「コードに結合」、「ランタイム共有ライブラリ (RSL)」、または「SDK デフォルトを使用 (ランタイム共有ライブラリ)」のいずれかに設定できます。build.xml で mxmlc オプションと同等のものを設定するにはどうすればよいですか?

現在の 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 を使用したときに見られるのと同じ動作であり、(RSL リンクではなく) フレームワーク リンクがコードにマージされて SWF がビルドされていると思われます。

これに関連する質問は、swf が RSL を使用しているかどうかを判断する方法です。コンパイルされた出力のサイズを見ることができると思います。しかし、外部フレームワーク ファイルを使用しているか、SWF に何らかの方法でバンドルされているかを、私の知らないうちに判断する方法があるはずです。

4

1 に答える 1

6

ドキュメントがこれについて少し不足しているため、これは少し注意が必要です。コマンド ラインまたは構成ファイルで次のオプションを設定する必要がある可能性があります。

static-link-runtime-shared-libraries=false

Adobe のドキュメントには、このオプションが何を行うかについて、次のやや不可解な説明が記載されています。

ライブラリに対して静的にコンパイルするか、RSL を使用するかを決定します。このオプションを true に設定すると、runtime-shared-library-path オプションで指定された RSL が無視されます。RSL を使用するには、このオプションを false に設定します。デフォルト値は true です。

このオプションは、詳細な可能性がある runtime-shared-library-path オプションを変更したり、構成ファイルを編集したりすることなく、静的にリンクされたアプリケーションと動的にリンクされたアプリケーションをすばやく切り替えることができるので便利です。

ここにドキュメントへのリンクがあります。 「アプリケーションコンパイラオプションについて」

ドキュメントによると、デフォルト値は true であることに注意してください。ただし、flex-config.xml ファイル (デフォルトまたはカスタム) をロードしている場合は、この設定がそのファイルに存在するかどうか、およびその内容も確認する必要があります。私の経験では、frameworks/flex-config.xml のデフォルト値は実際には false です。ただし、上記の例では、これを別の方法で設定できるようです。


(私たちは ANT とは異なるビルド システムを使用しているため、必要な build.xml 構文に精通していません。)

于 2011-02-22T17:22:51.403 に答える