1*1789df15SXin Li<?xml version="1.0" encoding="UTF-8"?> 2*1789df15SXin Li<project name="android_rules" default="debug"> 3*1789df15SXin Li 4*1789df15SXin Li <!-- 5*1789df15SXin Li This build file is imported by the project build file. It contains 6*1789df15SXin Li all the targets and tasks necessary to build Android projects, be they 7*1789df15SXin Li regular projects, library projects, or test projects. 8*1789df15SXin Li 9*1789df15SXin Li At the beginning of the file is a list of properties that can be overridden 10*1789df15SXin Li by adding them to your ant.properties (properties are immutable, so their 11*1789df15SXin Li first definition sticks and is never changed). 12*1789df15SXin Li 13*1789df15SXin Li Follows: 14*1789df15SXin Li - custom task definitions, 15*1789df15SXin Li - more properties (do not override those unless the whole build system is modified). 16*1789df15SXin Li - macros used throughout the build, 17*1789df15SXin Li - base build targets, 18*1789df15SXin Li - debug-specific build targets, 19*1789df15SXin Li - release-specific build targets, 20*1789df15SXin Li - instrument-specific build targets, 21*1789df15SXin Li - test project-specific build targets, 22*1789df15SXin Li - install targets, 23*1789df15SXin Li - help target 24*1789df15SXin Li --> 25*1789df15SXin Li 26*1789df15SXin Li <!-- ******************************************************* --> 27*1789df15SXin Li <!-- **************** Overridable Properties *************** --> 28*1789df15SXin Li <!-- ******************************************************* --> 29*1789df15SXin Li 30*1789df15SXin Li <!-- You can override these values in your build.xml or ant.properties. 31*1789df15SXin Li Overriding any other properties may result in broken build. --> 32*1789df15SXin Li 33*1789df15SXin Li <!-- Tells adb which device to target. You can change this from the command line 34*1789df15SXin Li by invoking "ant -Dadb.device.arg=-d" for device "ant -Dadb.device.arg=-e" for 35*1789df15SXin Li the emulator. --> 36*1789df15SXin Li <property name="adb.device.arg" value="" /> 37*1789df15SXin Li 38*1789df15SXin Li <!-- filename only of the output file. Cannot be a path --> 39*1789df15SXin Li <property name="out.filename" value="${ant.project.name}.jar" /> 40*1789df15SXin Li 41*1789df15SXin Li <!-- compilation options --> 42*1789df15SXin Li <property name="java.encoding" value="UTF-8" /> 43*1789df15SXin Li <property name="java.target" value="1.5" /> 44*1789df15SXin Li <property name="java.source" value="1.5" /> 45*1789df15SXin Li <property name="java.compilerargs" value="" /> 46*1789df15SXin Li 47*1789df15SXin Li <!-- Verbosity --> 48*1789df15SXin Li <property name="verbose" value="false" /> 49*1789df15SXin Li 50*1789df15SXin Li <!-- ******************************************************* --> 51*1789df15SXin Li <!-- ********************* Custom Tasks ******************** --> 52*1789df15SXin Li <!-- ******************************************************* --> 53*1789df15SXin Li 54*1789df15SXin Li <!-- jar file from where the tasks are loaded --> 55*1789df15SXin Li <path id="android.antlibs"> 56*1789df15SXin Li <pathelement path="${sdk.dir}/tools/lib/ant-tasks.jar" /> 57*1789df15SXin Li </path> 58*1789df15SXin Li 59*1789df15SXin Li <!-- Custom tasks --> 60*1789df15SXin Li <taskdef resource="anttasks.properties" classpathref="android.antlibs" /> 61*1789df15SXin Li 62*1789df15SXin Li <!-- Emma configuration --> 63*1789df15SXin Li <property name="emma.dir" value="${sdk.dir}/tools/lib" /> 64*1789df15SXin Li <path id="emma.lib"> 65*1789df15SXin Li <pathelement location="${emma.dir}/emma.jar" /> 66*1789df15SXin Li <pathelement location="${emma.dir}/emma_ant.jar" /> 67*1789df15SXin Li </path> 68*1789df15SXin Li <taskdef resource="emma_ant.properties" classpathref="emma.lib" /> 69*1789df15SXin Li <!-- End of emma configuration --> 70*1789df15SXin Li 71*1789df15SXin Li 72*1789df15SXin Li <!-- ******************************************************* --> 73*1789df15SXin Li <!-- ******************* Other Properties ****************** --> 74*1789df15SXin Li <!-- ******************************************************* --> 75*1789df15SXin Li <!-- overriding these properties may break the build 76*1789df15SXin Li unless the whole file is updated --> 77*1789df15SXin Li 78*1789df15SXin Li <!-- Input directories --> 79*1789df15SXin Li <property name="source.dir" value="src" /> 80*1789df15SXin Li <property name="source.absolute.dir" location="${source.dir}" /> 81*1789df15SXin Li <property name="jar.libs.dir" value="libs" /> 82*1789df15SXin Li <property name="jar.libs.absolute.dir" location="${jar.libs.dir}" /> 83*1789df15SXin Li 84*1789df15SXin Li <!-- Output directories --> 85*1789df15SXin Li <property name="out.dir" value="bin" /> 86*1789df15SXin Li <property name="out.absolute.dir" location="${out.dir}" /> 87*1789df15SXin Li <property name="out.classes.absolute.dir" location="${out.dir}/classes" /> 88*1789df15SXin Li 89*1789df15SXin Li <property name="out.file" value="${out.absolute.dir}/${out.filename}" /> 90*1789df15SXin Li 91*1789df15SXin Li <!-- tools location --> 92*1789df15SXin Li <property name="android.tools.dir" location="${sdk.dir}/tools" /> 93*1789df15SXin Li <property name="android.platform.tools.dir" location="${sdk.dir}/platform-tools" /> 94*1789df15SXin Li <condition property="exe" value=".exe" else=""><os family="windows" /></condition> 95*1789df15SXin Li <condition property="bat" value=".bat" else=""><os family="windows" /></condition> 96*1789df15SXin Li <property name="adb" location="${android.platform.tools.dir}/adb${exe}" /> 97*1789df15SXin Li 98*1789df15SXin Li <!-- Intermediate files --> 99*1789df15SXin Li <property name="dex.file.name" value="classes.dex" /> 100*1789df15SXin Li <property name="intermediate.dex.file" location="${out.absolute.dir}/${dex.file.name}" /> 101*1789df15SXin Li <property name="resource.package.file.name" value="${ant.project.name}.ap_" /> 102*1789df15SXin Li 103*1789df15SXin Li <!-- whether we need to fork javac. 104*1789df15SXin Li This is only needed on Windows when running Java < 7 --> 105*1789df15SXin Li <condition else="false" property="need.javac.fork"> 106*1789df15SXin Li <and> 107*1789df15SXin Li <matches pattern="1\.[56]" string="${java.specification.version}"/> 108*1789df15SXin Li <not> 109*1789df15SXin Li <os family="unix"/> 110*1789df15SXin Li </not> 111*1789df15SXin Li </and> 112*1789df15SXin Li </condition> 113*1789df15SXin Li 114*1789df15SXin Li <macrodef name="run-tests-helper"> 115*1789df15SXin Li <attribute name="emma.enabled" default="false" /> 116*1789df15SXin Li <element name="extra-instrument-args" optional="yes" /> 117*1789df15SXin Li <sequential> 118*1789df15SXin Li <echo level="info">Running tests ...</echo> 119*1789df15SXin Li <exec executable="${adb}" failonerror="true"> 120*1789df15SXin Li <arg line="${adb.device.arg}" /> 121*1789df15SXin Li <arg value="shell" /> 122*1789df15SXin Li <arg value="am" /> 123*1789df15SXin Li <arg value="instrument" /> 124*1789df15SXin Li <arg value="-w" /> 125*1789df15SXin Li <arg value="-e" /> 126*1789df15SXin Li <arg value="coverage" /> 127*1789df15SXin Li <arg value="@{emma.enabled}" /> 128*1789df15SXin Li <extra-instrument-args /> 129*1789df15SXin Li <arg value="${project.app.package}/${test.runner}" /> 130*1789df15SXin Li </exec> 131*1789df15SXin Li </sequential> 132*1789df15SXin Li </macrodef> 133*1789df15SXin Li 134*1789df15SXin Li <!-- ******************************************************* --> 135*1789df15SXin Li <!-- ******************** Build Targets ******************** --> 136*1789df15SXin Li <!-- ******************************************************* --> 137*1789df15SXin Li 138*1789df15SXin Li <!-- Basic Ant + SDK check --> 139*1789df15SXin Li <target name="-check-env"> 140*1789df15SXin Li <checkenv /> 141*1789df15SXin Li </target> 142*1789df15SXin Li 143*1789df15SXin Li <!-- empty default pre-clean target. Create a similar target in 144*1789df15SXin Li your build.xml and it'll be called instead of this one. --> 145*1789df15SXin Li <target name="-pre-clean"/> 146*1789df15SXin Li 147*1789df15SXin Li <!-- clean target --> 148*1789df15SXin Li <target name="clean" depends="-check-env, -pre-clean" 149*1789df15SXin Li description="Removes output files created by other targets."> 150*1789df15SXin Li <delete dir="${out.absolute.dir}" verbose="${verbose}" /> 151*1789df15SXin Li </target> 152*1789df15SXin Li 153*1789df15SXin Li <!-- Pre build setup --> 154*1789df15SXin Li <target name="-build-setup" depends="-check-env"> 155*1789df15SXin Li <getbuildtools name="android.build.tools.dir" /> 156*1789df15SXin Li <property name="dx" location="${android.build.tools.dir}/dx${bat}" /> 157*1789df15SXin Li 158*1789df15SXin Li <echo level="info">Resolving Build Target for ${ant.project.name}...</echo> 159*1789df15SXin Li <!-- load project properties, resolve Android target, library dependencies 160*1789df15SXin Li and set some properties with the results. 161*1789df15SXin Li All property names are passed as parameters ending in -Out --> 162*1789df15SXin Li <getuitarget compileClassPathOut="project.target.class.path" /> 163*1789df15SXin Li 164*1789df15SXin Li <echo level="info">----------</echo> 165*1789df15SXin Li <echo level="info">Creating output directories if needed...</echo> 166*1789df15SXin Li <mkdir dir="${out.absolute.dir}" /> 167*1789df15SXin Li <mkdir dir="${out.classes.absolute.dir}" /> 168*1789df15SXin Li 169*1789df15SXin Li </target> 170*1789df15SXin Li 171*1789df15SXin Li <!-- empty default pre-compile target. Create a similar target in 172*1789df15SXin Li your build.xml and it'll be called instead of this one. --> 173*1789df15SXin Li <target name="-pre-compile"/> 174*1789df15SXin Li 175*1789df15SXin Li <!-- Compiles this project's .java files into .class files. --> 176*1789df15SXin Li <target name="compile" depends="-build-setup, -pre-compile"> 177*1789df15SXin Li <javac encoding="${java.encoding}" 178*1789df15SXin Li source="${java.source}" target="${java.target}" 179*1789df15SXin Li debug="true" extdirs="" includeantruntime="false" 180*1789df15SXin Li destdir="${out.classes.absolute.dir}" 181*1789df15SXin Li bootclasspathref="project.target.class.path" 182*1789df15SXin Li verbose="${verbose}" 183*1789df15SXin Li fork="${need.javac.fork}"> 184*1789df15SXin Li <src path="${source.absolute.dir}" /> 185*1789df15SXin Li <compilerarg line="${java.compilerargs}" /> 186*1789df15SXin Li </javac> 187*1789df15SXin Li </target> 188*1789df15SXin Li 189*1789df15SXin Li <!-- empty default post-compile target. Create a similar target in 190*1789df15SXin Li your build.xml and it'll be called instead of this one. --> 191*1789df15SXin Li <target name="-post-compile"/> 192*1789df15SXin Li 193*1789df15SXin Li <!-- Converts this project's .class files into .dex files --> 194*1789df15SXin Li <target name="-dex" depends="compile, -post-compile"> 195*1789df15SXin Li <dex executable="${dx}" 196*1789df15SXin Li output="${intermediate.dex.file}" 197*1789df15SXin Li nolocals="@{nolocals}" 198*1789df15SXin Li verbose="${verbose}"> 199*1789df15SXin Li <path path="${out.classes.absolute.dir}"/> 200*1789df15SXin Li </dex> 201*1789df15SXin Li </target> 202*1789df15SXin Li 203*1789df15SXin Li <!-- empty default post-dex target. Create a similar target in 204*1789df15SXin Li your build.xml and it'll be called instead of this one. --> 205*1789df15SXin Li <target name="-post-dex"/> 206*1789df15SXin Li 207*1789df15SXin Li <target name="-jar" depends="-dex, -post-dex" > 208*1789df15SXin Li <jar destfile="${out.file}"> 209*1789df15SXin Li <fileset file="${intermediate.dex.file}" /> 210*1789df15SXin Li </jar> 211*1789df15SXin Li </target> 212*1789df15SXin Li 213*1789df15SXin Li <!-- empty default post-jar target. Create a similar target in 214*1789df15SXin Li your build.xml and it'll be called instead of this one. --> 215*1789df15SXin Li <target name="-post-jar"/> 216*1789df15SXin Li 217*1789df15SXin Li <target name="build" depends="-jar, -post-jar" /> 218*1789df15SXin Li 219*1789df15SXin Li <target name="install" description="Install the test package"> 220*1789df15SXin Li <exec executable="${adb}" failonerror="true"> 221*1789df15SXin Li <arg line="${adb.device.arg}" /> 222*1789df15SXin Li <arg value="push" /> 223*1789df15SXin Li <arg value="${out.file}" /> 224*1789df15SXin Li <arg value="/data/local/tmp" /> 225*1789df15SXin Li </exec> 226*1789df15SXin Li </target> 227*1789df15SXin Li 228*1789df15SXin Li <target name="test" description="Runs tests"> 229*1789df15SXin Li <!-- todo: fix this --> 230*1789df15SXin Li <fail message="Launching tests from Ant not supported yet" /> 231*1789df15SXin Li 232*1789df15SXin Li <exec executable="${adb}" failonerror="true"> 233*1789df15SXin Li <arg line="${adb.device.arg}" /> 234*1789df15SXin Li <arg value="shell" /> 235*1789df15SXin Li <arg value="uiautomator" /> 236*1789df15SXin Li <arg value="runtest" /> 237*1789df15SXin Li <arg value="${out.filename}" /> 238*1789df15SXin Li <arg value="-e" /> 239*1789df15SXin Li <arg value="class" /> 240*1789df15SXin Li <arg value="com.android.uiautomator.samples.skeleton.DemoTestCase" /> 241*1789df15SXin Li </exec> 242*1789df15SXin Li </target> 243*1789df15SXin Li 244*1789df15SXin Li <target name="help"> 245*1789df15SXin Li <!-- displays starts at col 13 246*1789df15SXin Li |13 80| --> 247*1789df15SXin Li <echo>Android Ant Build. Available targets:</echo> 248*1789df15SXin Li <echo> help: Displays this help.</echo> 249*1789df15SXin Li <echo> clean: Removes output files created by other targets.</echo> 250*1789df15SXin Li <echo> build: Builds the test library.</echo> 251*1789df15SXin Li <echo> install: Installs the library on a connected device or</echo> 252*1789df15SXin Li <echo> emulator.</echo> 253*1789df15SXin Li <echo> test: Runs the tests.</echo> 254*1789df15SXin Li <echo></echo> 255*1789df15SXin Li <echo>It is possible to mix targets. For instance:</echo> 256*1789df15SXin Li <echo> ant build install test</echo> 257*1789df15SXin Li <echo>This will build, install and run the test in a single command.</echo> 258*1789df15SXin Li </target> 259*1789df15SXin Li 260*1789df15SXin Li</project> 261