xref: /aosp_15_r20/sdk/files/ant/uibuild.xml (revision 1789df15502f1991eff51ff970dce5df8404dd56)
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