SDK ツールでの Apache Ant の使用
ここでは、Apache Ant ビルドツールを使用して AIR アプリケーションのテストおよびパッケージ化を行う例を示します。
単純なプロジェクトでの Ant の使用
この例では、Ant と AIR コマンドラインツールを使用した AIR アプリケーションの構築を示します。1 つのディレクトリにすべてのファイルが格納されている単純なプロジェクト構造を使用します。
ビルドスクリプトを簡単に再使用できるようにするため、ここでの例ではいくつかの定義済みのプロパティを使用します。プロパティの最初のセットで、コマンドラインツールのインストール場所を特定します。
<property name="SDK_HOME" value="C:/AIRSDK"/>
<property name="ADL" value="${SDK_HOME}/bin/adl.exe"/>
<property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/>
プロパティの 2 番目のセットはプロジェクト固有です。これらのプロパティは、ルートソースファイルに基づいてアプリケーション記述ファイルと AIR ファイルに名前が付けられている名前付け規則を前提にしています。簡単に他の規則に対応できます。
<property name="APP_NAME" value="ExampleApplication"/>
<property name="APP_ROOT" value="."/>
<property name="APP_DESCRIPTOR" value="${APP_ROOT}/${APP_NAME}-app.xml"/>
<property name="AIR_NAME" value="${APP_NAME}.air"/>
<property name="STORETYPE" value="pkcs12"/>
<property name="KEYSTORE" value="ExampleCert.p12"/>
ADL の呼び出しによるアプリケーションのテスト
ADL でアプリケーションを実行するには、exec タスクを使用します。
<target name="test" depends="compile">
<target name="test">
<exec executable="${ADL}">
<arg value="${APP_DESCRIPTOR}"/>
</exec>
</target>
ADT の呼び出しによるアプリケーションのパッケージ化
アプリケーションをパッケージ化するには、Java タスクを使用して adt.jar ツールを実行します。
<target name="package">
<java jar="${ADT.JAR}" fork="true" failonerror="true">
<arg value="-package"/>
<arg value="-storetype"/>
<arg value="${STORETYPE}"/>
<arg value="-keystore"/>
<arg value="${KEYSTORE}"/>
<arg value="${AIR_NAME}"/>
<arg value="${APP_DESCRIPTOR}"/>
<arg value="${APP_NAME}.html"/>
<arg value="*.png"/>
</java>
</target>
アプリケーションにパッケージ化するファイルが他にもある場合は、<arg> エレメントをさらに追加できます。
複雑なプロジェクトでの Ant の使用
一般的なアプリケーションのディレクトリ構造は、1 つのディレクトリより複雑です。次の例では、プロジェクトのディレクトリ構造がより実際に近い AIR アプリケーションのコンパイル、テストおよびパッケージ化に使用するビルドファイルを示します。
- release
- このサンプルプロジェクトでは、アプリケーションのソースファイルと、アイコンファイルなどのその他のアセットを src ディレクトリに格納します。ビルドスクリプトで、最終的な AIR パッケージを格納する release ディレクトリを作成します。
AIR ツールでは、現在の作業ディレクトリ外のファイルを操作するときに、追加オプションを使用する必要があります。
- テスト
- ADL に渡す 2 番目の引数では、AIR アプリケーションのルートディレクトリを指定します。アプリケーションのルートディレクトリを指定するには、次の行をテストタスクに追加します。
<arg value="${debug}"/>
- パッケージ化
- 最終的なパッケージ構造に含める必要のないサブディレクトリのファイルをパッケージ化するには、-C ディレクティブを使用して ADT 作業ディレクトリを変更する必要があります。-C ディレクティブを使用すると、新しい作業ディレクトリ内のファイルとディレクトリは、AIR パッケージファイルのルートレベルにコピーされます。したがって、-C build file.png と指定すると、file.png はアプリケーションディレクトリのルートにコピーされます。同様に、-C assets icons と指定すると、アイコンフォルダがルートレベルにコピーされ、アイコンフォルダ内のすべてのファイルとディレクトリもルートレベルにコピーされます。例えば、パッケージタスクの次の一連の行では、アイコンディレクトリがアプリケーションパッケージファイルのルートレベルに直接コピーされます。
<arg value="-C"/>
<arg value="${assets}"/>
<arg value="icons"/>
注意: 多くのリソースとアセットを別々の相対的な場所に移動する必要がある場合は、ADT 用に複雑な引数リストを作成するより、Ant タスクを使用して一時ディレクトリにリソースとアセットを配置する方が通常は簡単です。リソースを整理すれば、それらのリソースを簡単な ADT 引数リストでパッケージ化できます。
<project>
<!-- SDK properties -->
<property name="SDK_HOME" value="C:/AIRSDK"/>
<property name="ADL" value="${SDK_HOME}/bin/adl.exe"/>
<property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/>
<!-- Project properties -->
<property name="PROJ_ROOT_DIR" value="."/>
<property name="APP_NAME" value="ExampleApplication"/>
<property name="APP_ROOT_DIR" value="${PROJ_ROOT_DIR}/src/html"/>
<property name="APP_ROOT_FILE" value="${APP_NAME}.html"/>
<property name="APP_DESCRIPTOR" value="${PROJ_ROOT_DIR}/${APP_NAME}-app.xml"/>
<property name="AIR_NAME" value="${APP_NAME}.air"/>
<property name="release" location="${PROJ_ROOT_DIR}/release"/>
<property name="assets" location="${PROJ_ROOT_DIR}/src/assets"/>
<property name="STORETYPE" value="pkcs12"/>
<property name="KEYSTORE" value="ExampleCert.p12"/>
<target name="init" depends="clean">
<mkdir dir="${release}"/>
</target>
<target name="test">
<exec executable="${ADL}">
<arg value="${APP_DESCRIPTOR}"/>
<arg value="${APP_ROOT_DIR}"/>
</exec>
</target>
<target name="package" depends="init">
<java jar="${ADT.JAR}" fork="true" failonerror="true">
<arg value="-package"/>
<arg value="-storetype"/>
<arg value="${STORETYPE}"/>
<arg value="-keystore"/>
<arg value="${KEYSTORE}"/>
<arg value="${release}/${AIR_NAME}"/>
<arg value="${APP_DESCRIPTOR}"/>
<arg value="-C"/>
<arg value="${APP_ROOT_DIR}"/>
<arg value="${APP_ROOT_FILE}"/>
<arg value="-C"/>
<arg value="${assets}"/>
<arg value="icons"/>
</java>
</target>
<target name="clean" description="clean up">
<delete dir="${release}"/>
</target>
</project>