大家都知道Flex SDK针对 Ant编译提供了扩展包flexTasks.jar。我参与的项目也都是用Ant进行编译打包的,本次我们依然选择用Ant进行编译打包。不过不同的是之前都是web应用,而这次是移动应用。所以在编译打包的过程中会存在一些差异。
1、 主模块编译得到swf文件
<!-- 编译成swf文件 -->
<target name="compile" description="Create the mian.swf" depends="init"> <echo>编译mian.swf文件</echo> <mxmlc file="${MAIN_DIR}/src/Main.as" output="${MAIN_DIR}/bin/Main.swf" debug="${DEBUG}" configname="airmobile" swf-version="${SWF_VERSION}"> <source-path path-element="${MAIN_DIR}/src"/> <library-path dir="${LIBS_DIR}/module" includes="*.swc" append="true"/> <library-path dir="${LIBS_DIR}/frame" includes="*.swc" append="true"/> </mxmlc> </target>
这里主要注意两个地方;
1) configname参数,一定要设为“airmobile”,以便mxmlc在编译时调用的配置文件为airmobile-config.xml。不然编译出的swf将不能打包为移动安装包。
2) swf-version参数,一定要从新设置,因为我们用的AIR SDK是手动升级的。所以如果不重新规定播放器版本的话,编译器会默认设置为手动升级前的版本,可能会导致编译错误。
2、 打包ipa安装包
之前我分享过用命令行的方式编译打包,这一次我们用ant编译。其实参数是一致的。
<target name="packageIpa" description="Create the ipa package" depends="compile"> <exec executable="${FLEX_HOME}/bin/adt.bat" failonerror="true"> <arg line="-package"/> <!--打安装包指令--> <arg line="-target ${IPA_TARGET}"/> <!--安装包类型debug或release --> <arg line="-storetype ${STORETYPE}"/> <!—证书类型--> <arg line="-keystore ${KEYSTORE}"/> <!—证书文件--> <arg line="-storepass ${STOREPASS}"/> <!—证书密码--> <arg line="-provisioning-profile ${PROVISIONING_PROFILE}"/><!—证书配置文件--> <arg line="${IPA_NAME}"/> <!—ipa包的名字--> <arg line="${CONFIG_XML}"/> <!—移动应用的配置文件main-app.xml--> [color=red]<arg line="-C ${MAIN_DIR}/bin"/> [/color] <!—设置adt的工作路径--> <arg line="Main.swf"/> <!—swf文件--> <arg line="assets/"/> <!—资源文件夹--> <arg line="app.xml"/> <!—其他项目配置资源--> <arg line="appResourceConfig.xml"/> <!—其他项目配置资源--> </exec> </target>
我这里是用exec标签调用adt.bat来编译的。除了这种方式你直接用adt.jar这个任务包完成编译。
标红的那行参数是要着重说明的;这里有一个“-C”参数,它的作用是设置adt的工作路径。默认情况下adt的工作路径为当前脚本所在路径。如果此路径与swf 、assets等资源的路径不一致。则需要将adt的工作路径设为资源所在路径。不然在编译main-app.xml的时候会出现找不到资源的情况, 因为当此配置文件被加载到内存中时如果配置文件中指定了资源(如swf或icon)则会从当前adt的工作路径中查找资源,如果adt工作路径与资源路径不一致便会导致错误。
模块编译为swc文件的方式和web应用一致,在此就不阐述了。