| <?xml version="1.0" encoding="UTF-8"?> |
| <project name="android_rules" default="debug"> |
| |
| <!-- |
| This build file is imported by the project build file. It contains |
| all the targets and tasks necessary to build Android projects, be they |
| regular projects, library projects, or test projects. |
| |
| At the beginning of the file is a list of properties that can be overridden |
| by adding them to your ant.properties (properties are immutable, so their |
| first definition sticks and is never changed). |
| |
| Follows: |
| - custom task definitions, |
| - more properties (do not override those unless the whole build system is modified). |
| - macros used throughout the build, |
| - base build targets, |
| - debug-specific build targets, |
| - release-specific build targets, |
| - instrument-specific build targets, |
| - test project-specific build targets, |
| - install targets, |
| - help target |
| --> |
| |
| <!-- ******************************************************* --> |
| <!-- **************** Overridable Properties *************** --> |
| <!-- ******************************************************* --> |
| |
| <!-- You can override these values in your build.xml or ant.properties. |
| Overriding any other properties may result in broken build. --> |
| |
| <!-- Tells adb which device to target. You can change this from the command line |
| by invoking "ant -Dadb.device.arg=-d" for device "ant -Dadb.device.arg=-e" for |
| the emulator. --> |
| <property name="adb.device.arg" value="" /> |
| |
| <!-- filename only of the output file. Cannot be a path --> |
| <property name="out.filename" value="${ant.project.name}.jar" /> |
| |
| <!-- compilation options --> |
| <property name="java.encoding" value="UTF-8" /> |
| <property name="java.target" value="1.5" /> |
| <property name="java.source" value="1.5" /> |
| <property name="java.compilerargs" value="" /> |
| |
| <!-- Verbosity --> |
| <property name="verbose" value="false" /> |
| |
| <!-- ******************************************************* --> |
| <!-- ********************* Custom Tasks ******************** --> |
| <!-- ******************************************************* --> |
| |
| <!-- jar file from where the tasks are loaded --> |
| <path id="android.antlibs"> |
| <pathelement path="${sdk.dir}/tools/lib/ant-tasks.jar" /> |
| </path> |
| |
| <!-- Custom tasks --> |
| <taskdef resource="anttasks.properties" classpathref="android.antlibs" /> |
| |
| <!-- Emma configuration --> |
| <property name="emma.dir" value="${sdk.dir}/tools/lib" /> |
| <path id="emma.lib"> |
| <pathelement location="${emma.dir}/emma.jar" /> |
| <pathelement location="${emma.dir}/emma_ant.jar" /> |
| </path> |
| <taskdef resource="emma_ant.properties" classpathref="emma.lib" /> |
| <!-- End of emma configuration --> |
| |
| |
| <!-- ******************************************************* --> |
| <!-- ******************* Other Properties ****************** --> |
| <!-- ******************************************************* --> |
| <!-- overriding these properties may break the build |
| unless the whole file is updated --> |
| |
| <!-- Input directories --> |
| <property name="source.dir" value="src" /> |
| <property name="source.absolute.dir" location="${source.dir}" /> |
| <property name="jar.libs.dir" value="libs" /> |
| <property name="jar.libs.absolute.dir" location="${jar.libs.dir}" /> |
| |
| <!-- Output directories --> |
| <property name="out.dir" value="bin" /> |
| <property name="out.absolute.dir" location="${out.dir}" /> |
| <property name="out.classes.absolute.dir" location="${out.dir}/classes" /> |
| |
| <property name="out.file" value="${out.absolute.dir}/${out.filename}" /> |
| |
| <!-- tools location --> |
| <property name="android.tools.dir" location="${sdk.dir}/tools" /> |
| <property name="android.platform.tools.dir" location="${sdk.dir}/platform-tools" /> |
| <condition property="exe" value=".exe" else=""><os family="windows" /></condition> |
| <condition property="bat" value=".bat" else=""><os family="windows" /></condition> |
| <property name="adb" location="${android.platform.tools.dir}/adb${exe}" /> |
| |
| <!-- Intermediate files --> |
| <property name="dex.file.name" value="classes.dex" /> |
| <property name="intermediate.dex.file" location="${out.absolute.dir}/${dex.file.name}" /> |
| <property name="resource.package.file.name" value="${ant.project.name}.ap_" /> |
| |
| <!-- whether we need to fork javac. |
| This is only needed on Windows when running Java < 7 --> |
| <condition else="false" property="need.javac.fork"> |
| <and> |
| <matches pattern="1\.[56]" string="${java.specification.version}"/> |
| <not> |
| <os family="unix"/> |
| </not> |
| </and> |
| </condition> |
| |
| <macrodef name="run-tests-helper"> |
| <attribute name="emma.enabled" default="false" /> |
| <element name="extra-instrument-args" optional="yes" /> |
| <sequential> |
| <echo level="info">Running tests ...</echo> |
| <exec executable="${adb}" failonerror="true"> |
| <arg line="${adb.device.arg}" /> |
| <arg value="shell" /> |
| <arg value="am" /> |
| <arg value="instrument" /> |
| <arg value="-w" /> |
| <arg value="-e" /> |
| <arg value="coverage" /> |
| <arg value="@{emma.enabled}" /> |
| <extra-instrument-args /> |
| <arg value="${project.app.package}/${test.runner}" /> |
| </exec> |
| </sequential> |
| </macrodef> |
| |
| <!-- ******************************************************* --> |
| <!-- ******************** Build Targets ******************** --> |
| <!-- ******************************************************* --> |
| |
| <!-- Basic Ant + SDK check --> |
| <target name="-check-env"> |
| <checkenv /> |
| </target> |
| |
| <!-- empty default pre-clean target. Create a similar target in |
| your build.xml and it'll be called instead of this one. --> |
| <target name="-pre-clean"/> |
| |
| <!-- clean target --> |
| <target name="clean" depends="-check-env, -pre-clean" |
| description="Removes output files created by other targets."> |
| <delete dir="${out.absolute.dir}" verbose="${verbose}" /> |
| </target> |
| |
| <!-- Pre build setup --> |
| <target name="-build-setup" depends="-check-env"> |
| <getbuildtools name="android.build.tools.dir" /> |
| <property name="dx" location="${android.build.tools.dir}/dx${bat}" /> |
| |
| <echo level="info">Resolving Build Target for ${ant.project.name}...</echo> |
| <!-- load project properties, resolve Android target, library dependencies |
| and set some properties with the results. |
| All property names are passed as parameters ending in -Out --> |
| <getuitarget compileClassPathOut="project.target.class.path" /> |
| |
| <echo level="info">----------</echo> |
| <echo level="info">Creating output directories if needed...</echo> |
| <mkdir dir="${out.absolute.dir}" /> |
| <mkdir dir="${out.classes.absolute.dir}" /> |
| |
| </target> |
| |
| <!-- empty default pre-compile target. Create a similar target in |
| your build.xml and it'll be called instead of this one. --> |
| <target name="-pre-compile"/> |
| |
| <!-- Compiles this project's .java files into .class files. --> |
| <target name="compile" depends="-build-setup, -pre-compile"> |
| <javac encoding="${java.encoding}" |
| source="${java.source}" target="${java.target}" |
| debug="true" extdirs="" includeantruntime="false" |
| destdir="${out.classes.absolute.dir}" |
| bootclasspathref="project.target.class.path" |
| verbose="${verbose}" |
| fork="${need.javac.fork}"> |
| <src path="${source.absolute.dir}" /> |
| <compilerarg line="${java.compilerargs}" /> |
| </javac> |
| </target> |
| |
| <!-- empty default post-compile target. Create a similar target in |
| your build.xml and it'll be called instead of this one. --> |
| <target name="-post-compile"/> |
| |
| <!-- Converts this project's .class files into .dex files --> |
| <target name="-dex" depends="compile, -post-compile"> |
| <dex executable="${dx}" |
| output="${intermediate.dex.file}" |
| nolocals="@{nolocals}" |
| verbose="${verbose}"> |
| <path path="${out.classes.absolute.dir}"/> |
| </dex> |
| </target> |
| |
| <!-- empty default post-dex target. Create a similar target in |
| your build.xml and it'll be called instead of this one. --> |
| <target name="-post-dex"/> |
| |
| <target name="-jar" depends="-dex, -post-dex" > |
| <jar destfile="${out.file}"> |
| <fileset file="${intermediate.dex.file}" /> |
| </jar> |
| </target> |
| |
| <!-- empty default post-jar target. Create a similar target in |
| your build.xml and it'll be called instead of this one. --> |
| <target name="-post-jar"/> |
| |
| <target name="build" depends="-jar, -post-jar" /> |
| |
| <target name="install" description="Install the test package"> |
| <exec executable="${adb}" failonerror="true"> |
| <arg line="${adb.device.arg}" /> |
| <arg value="push" /> |
| <arg value="${out.file}" /> |
| <arg value="/data/local/tmp" /> |
| </exec> |
| </target> |
| |
| <target name="test" description="Runs tests"> |
| <!-- todo: fix this --> |
| <fail message="Launching tests from Ant not supported yet" /> |
| |
| <exec executable="${adb}" failonerror="true"> |
| <arg line="${adb.device.arg}" /> |
| <arg value="shell" /> |
| <arg value="uiautomator" /> |
| <arg value="runtest" /> |
| <arg value="${out.filename}" /> |
| <arg value="-e" /> |
| <arg value="class" /> |
| <arg value="com.android.uiautomator.samples.skeleton.DemoTestCase" /> |
| </exec> |
| </target> |
| |
| <target name="help"> |
| <!-- displays starts at col 13 |
| |13 80| --> |
| <echo>Android Ant Build. Available targets:</echo> |
| <echo> help: Displays this help.</echo> |
| <echo> clean: Removes output files created by other targets.</echo> |
| <echo> build: Builds the test library.</echo> |
| <echo> install: Installs the library on a connected device or</echo> |
| <echo> emulator.</echo> |
| <echo> test: Runs the tests.</echo> |
| <echo></echo> |
| <echo>It is possible to mix targets. For instance:</echo> |
| <echo> ant build install test</echo> |
| <echo>This will build, install and run the test in a single command.</echo> |
| </target> |
| |
| </project> |