AIRのリリースビルドをAntで自動化する
FlexBuilderのメニュー「Export Release Build...」からAIRファイルを作成できるけど、
環境毎に設定ファイルとか、エンドポイントのURL(AIRの場合はコンパイル時に固定される)とかの変更したい場合は、該当するファイルを修正したり、置き換えたりする必要があってめんどくさい。
で、Antで自動化してみた。
いろいろはまって1日半かかったぞ。
テスト環境用(airapp_test_v1.0.air)と、本番環境用(airapp_honban_v1.0.air)のAIRファイルをAntで生成する。
※v1.0のところは-app.xmlのversionの値を入れたい。
今回対象のプロジェクト構成
/ build.xml (Antのビルドファイル) src/ (AIRプログラムソース) com/ (AS、MXMLソース) css/ icon/ app.properties (環境依存ファイル) main.mxml main-app.xml updaterConfig.xml (環境依存ファイル) deploy/ (ビルドに必要なファイル、環境依存ファイル) test/ (テスト環境依存ファイル) app.propertites updaterConfig.xml messaging-config.xml (※1) proxy-config.xml (※1) remoting-config.xml (※1) services-config.xml (※1) honban/ (本番環境依存ファイル) app.propertites updaterConfig.xml messaging-config.xml (※1) proxy-config.xml (※1) remoting-config.xml (※1) services-config.xml (※1) password.p12 (オレオレ証明書) target/ (ビルド結果出力先)
作ったbuild.xmlファイル
<project name="airbuild" basedir="." default="all"> <property name="SDK_HOME" value="C:/Program Files (x86)/Adobe/Flex Builder 3/sdks/flex_sdk_3.4.1.10084/" /> <property name="ADL" value="${SDK_HOME}/bin/adl.exe" /> <property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar" /> <property name="MXMLC.JAR" value="${SDK_HOME}/lib/mxmlc.jar"/> <!-- Project properties --> <property name="APP_ROOT_DIR" value="./src" /> <property name="AIR_NAME" value="airapp" /> <property name="APP_DESCRIPTOR" value="${APP_ROOT_DIR}/main-app.xml" /> <property name="MAIN_SOURCE_FILE" value="${APP_ROOT_DIR}/main.mxml" /> <property name="RELEASE_DIR" location="./target" /> <property name="DEPLOY_DIR" value="deploy" /> <property name="STORETYPE" value="pkcs12" /> <property name="KEYSTORE" value="deploy/password.p12" /> <property name="PASSWORD" value="password" /> <target name="all"> <!--main-app.xmlからバージョンをゲットする。--> <loadfile property="version" srcFile="${APP_ROOT_DIR}/main-app.xml"> <filterchain> <tokenfilter> <containsregex pattern="<version>.+</version>"/> <trim/> </tokenfilter> <striplinebreaks/> <tokenfilter> <replacestring from="<version>" to=""/> <replacestring from="</version>" to=""/> </tokenfilter> </filterchain> </loadfile> <echo message="v${version} building."></echo> <!-- テスト環境用 --> <antcall target="package"> <param name="ENV" value="test"/> </antcall> <!-- 本番環境用 --> <antcall target="package"> <param name="ENV" value="honban" /> </antcall> </target> <target name="init" depends="clean"> <echo message="${ENV} initing..." /> <mkdir dir="${RELEASE_DIR}/${ENV}"/> </target> <!-- コンパイル(swfを作る) --> <target name="compile" depends="init"> <echo message="${ENV} compiling..." /> <java jar="${MXMLC.JAR}" fork="true" failonerror="true"> <arg value="-debug=false"/> <arg value="+flexlib=${SDK_HOME}/frameworks"/> <arg value="+configname=air"/> <arg value="-services"/> <arg value="${DEPLOY_DIR}/${ENV}/services-config.xml"/> <arg value="-file-specs=${MAIN_SOURCE_FILE}"/> <arg value="-output=${RELEASE_DIR}/${ENV}/main.swf"/> </java> <echo message="${ENV} compiled." /> </target> <!-- AIRファイルにする --> <target name="package" depends="compile"> <copy todir="${RELEASE_DIR}/${ENV}"> <fileset dir="${DEPLOY_DIR}/${ENV}" includes="app.properties,updaterConfig.xml" ></fileset> </copy> <echo message="${ENV} packing..." /> <java jar="${ADT.JAR}" logerror="yes" fork="true"> <arg value="-package" /> <arg value="-storetype" /> <arg value="${STORETYPE}" /> <arg value="-keystore" /> <arg value="${KEYSTORE}" /> <arg value="-storepass" /> <arg value="${PASSWORD}" /> <arg value="${RELEASE_DIR}/${AIR_NAME}_${ENV}_v${version}.air" /> <arg value="${APP_DESCRIPTOR}"/> <arg value="-C"/> <arg value="${APP_ROOT_DIR}"/> <arg value="css"/> <arg value="icon"/> <arg value="-C"/> <arg value="${RELEASE_DIR}/${ENV}"/> <arg value="main.swf"/> <arg value="app.properties"/> <arg value="updaterConfig.xml"/> </java> <echo message="${ENV} packed." /> </target> <target name="clean"> <delete dir="${RELEASE_DIR}/${ENV}" /> </target> </project>
コンパイル(swfを作る)するところ
Antがエラーになって困った
compile: [echo] local compiling... [java] 設定ファイル "C:\Program Files (x86)\Adobe\Flex Builder 3\sdks\flex_sdk_3.4.1.10084\frameworks\air-config.xml" をロードしています [java] エラー: Java heap space [java] java.lang.OutOfMemoryError: Java heap space
コンパイルでメモリー不足ってありえないだろ…。
とりあえず、AntのJREをSeparete JREから64bitのJDKに変更して、引数に「-Xmx1024M -XX:MaxPermSize=256m」指定すれば通った。
つうか、コンパイル時にメモリ使用量が800Mぐらい上昇するけど大丈夫か?
AIRファイルにするところ
証明書のパスワード
-storepassで証明書のパスワードを指定できる。
これを指定しないといつまでたっても終わらない。