AIR移动应用自动化编译的问题
大家都知道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应用一致,在此就不阐述了。