如何根据目标输出构建Ant脚本以执行不同的编译。 AIR vs Swf?

时间:2011-10-23 09:53:59

标签: flash actionscript-3 ant air flash-builder

如何构建一个Ant脚本来输出swfs vs air包,并根据我想要的目的地在编译期间使用不同的类?

例如,我正在构建一个适用于Web,移动和桌面的应用程序。在某些情况下,我的类将使用AIR only组件。我希望能够创建ANT构建脚本,在为Web输出swf时不包括这些类。我该怎么做呢?

1 个答案:

答案 0 :(得分:3)

以下是我为类似情况所做的事情:

<target name="define.compile.task" depends="initflex">
    <presetdef name="flex.build">
        <mxmlc file="${src.dir}/${src.file.path}" 
                output="${output.dir}/${output.file.path}" ...>
            <compiler.source-path path-element="${src.dir}"/>
            ...
        </mxmlc>
    </presetdef>
</target>

<target name="parametrized.web.build" depends="define.compile.task">
    <flex.build>
        <compiler.define name="CONFIG::AllowAirComponents" value="false" />
    </flex.build>   
</target>


<target name="parametrized.air.build" depends="define.compile.task">
    <flex.build configname="airmobile">
        <compiler.define name="CONFIG::AllowAirComponents" value="true" />
    </flex.build>   
</target>

然后,我可以定义像

这样的目标
<target name="buildwebclass1">
     <antcall target="parametrized.web.build">
          <param name="src.file.path" value="path/to/MyClass.as"/>
          <param name="output.file.path" value="MyClass.swf"/>
     </antcall>
</target>

或者:

<target name="buildairclass1">
     <antcall target="parametrized.air.build">
          <param name="src.file.path" value="path/to/MyAirClass.as"/>
          <param name="output.file.path" value="MyAirClass.swf"/>
     </antcall>
     <exec executable="${FLEX_HOME}/bin/adt" failonerror="true">
         ... (adt arguments)
     </exec>
</target>

如果我有一些公共代码工厂只在必要时实例化air class,我用CONFIG::AllowAirComponents { ... }包装它,这样我的AIR特定类就不会干扰web构建。

希望这有帮助!