Utilización de Apache Ant con las herramientas del SDK



Este tema proporciona ejemplos del uso de la herramienta de construcción Apache Ant para probar y empaquetar aplicaciones de AIR.

Nota: esta discusión no tiene por objetivo facilitar una reseña exhaustiva de Apache Ant. Para obtener documentación de Ant, visite http://Ant.Apache.org (en inglés).

Utilización de Ant para proyectos sencillos

Este ejemplo ilustra la creación de una aplicación de AIR con Ant y las herramientas de la línea de comandos de AIR. Se utiliza una estructura sencilla de proyecto con todos los archivos guardados en un solo directorio.

Para que resulte más fácil reutilizar el script de creación, en estos ejemplos se utilizan varias propiedades definidas. Una de las series de propiedades identifica los lugares donde están instaladas las herramientas de la línea de comandos:

    <property name="SDK_HOME" value="C:/Flex3SDK"/> 
    <property name="ADL" value="${SDK_HOME}/bin/adl.exe"/> 
    <property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/>

La segunda serie de propiedades es propia del proyecto. Estas propiedades adoptan una nomenclatura en la que los nombres del archivo descriptor de la aplicación y los archivos de AIR se basan en el archivo raíz de origen. Pueden utilizarse otras nomenclaturas sin problema.

    <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"/>

Invocación de ADL para probar una aplicación

Para ejecutar la aplicación con ADL, utilice una tarea "exec":

<target name="test" depends="compile"> 
<target name="test"> 
    <exec executable="${ADL}"> 
        <arg value="${APP_DESCRIPTOR}"/> 
    </exec>  
</target>

Invocación de ADT para empaquetar una aplicación

Para empaquetar la aplicación, utilice una tarea de Java para ejecutar la herramienta 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}.swf"/> 
        <arg value="*.png"/> 
    </java> 
</target>

Si la aplicación tiene más archivos que empaquetar, se pueden añadir más elementos <arg>.

Utilización de Ant para proyectos más complejos

La estructura de directorios de una aplicación típica es más compleja que un solo directorio. El siguiente ejemplo ilustra un archivo de construcción que se utiliza para compilar, probar y empaquetar una aplicación de AIR cuya estructura de directorios es más práctica para un proyecto.

Este proyecto sencillo guarda en un directorio src los archivos de origen de la aplicación y otros componentes como archivos de iconos. El script de creación genera los siguientes directorios de trabajo:

build
Guarda las versiones de publicación (no de depuración) de los archivos SWF compilados.

debug
Guarda la versión de depuración de la aplicación sin empaquetar, incluidos los archivos SWF y de componentes. La utilidad ADL ejecuta la aplicación desde este directorio.

release
Guarda el paquete final de AIR.

Para las herramientas de AIR hay que utilizar algunas opciones adicionales al trabajar en archivos sin estar en el directorio actual de trabajo:

Pruebas
El segundo argumento que se pasa a ADL especifica el directorio raíz de la aplicación de AIR. Para especificar el directorio raíz de la aplicación se añade la siguiente línea a la tarea de pruebas:
<arg value="${debug}"/>

Empaquetado
El empaquetado de archivos situados en subdirectorios que no deben formar parte de la estructura del paquete final requiere el uso de la directiva -C para cambiar el directorio de trabajo de ADT. Cuando se utiliza la directiva -C, los archivos y directorios del nuevo directorio de trabajo se copian al nivel raíz del archivo del paquete de AIR. Así, -C build file.png copia file.png en la raíz del directorio de la aplicación. Asimismo, -C assets icons copia la carpeta de iconos en el nivel raíz y también copia todos los archivos y directorios que se encuentren en la carpeta de iconos. Por ejemplo, la siguiente secuencia de líneas de la tarea de empaquetado añade el directorio de iconos directamente en el nivel raíz del archivo del paquete de la aplicación:
<arg value="-C"/> 
<arg value="${assets}"/> 
<arg value="icons"/>
Nota: si hay que cambiar muchos recursos y componentes a distintas ubicaciones relativas, suele resultar más fácil reunirlos en un directorio temporal con tareas de Ant que crear una lista compleja de argumentos para ADT. Una vez organizados los recursos, se puede utilizar una lista sencilla de argumentos de ADT para empaquetarlos.
<project> 
    <!-- SDK properties --> 
    <property name="SDK_HOME" value="C:/Flex3SDK"/> 
    <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="."/> 
    <property name="APP_ROOT_FILE" value="${APP_NAME}.swf"/> 
    <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>