10fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet<?xml version="1.0" encoding="UTF-8"?>
2e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet<project name="android_rules" default="debug">
30fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
40fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!--
5babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        This build file is imported by the project build file. It contains
6babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        all the targets and tasks necessary to build Android projects, be they
7babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        regular projects, library projects, or test projects.
8babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
9babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        At the beginning of the file is a list of properties that can be overridden
10e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet        by adding them to your ant.properties (properties are immutable, so their
11babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        first definition sticks and is never changed).
12babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
13babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        Follows:
14babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - custom task definitions,
15babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - more properties (do not override those unless the whole build system is modified).
16babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - macros used throughout the build,
17babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - base build targets,
18babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - debug-specific build targets,
19babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - release-specific build targets,
20babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - instrument-specific build targets,
21babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - test project-specific build targets,
22babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - install targets,
23babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        - help target
24babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    -->
250fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
26e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
27a5613f269c976916f7125f58fa1dcb4f365e54b4Xavier Ducrohet    <!-- **************** Overridable Properties *************** -->
28e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
290fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
301daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    <!-- You can override these values in your build.xml or ant.properties.
31babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         Overriding any other properties may result in broken build. -->
32babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
33babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Tells adb which device to target. You can change this from the command line
34babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         by invoking "ant -Dadb.device.arg=-d" for device "ant -Dadb.device.arg=-e" for
35babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         the emulator. -->
36babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="adb.device.arg" value="" />
37babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
38babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- fileset exclude patterns (space separated) to prevent
39babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         files inside src/ from being packaged. -->
40babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="android.package.excludes" value="" />
41babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
42babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- set some properties used for filtering/override. If those weren't defined
43babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         before, then this will create them with empty values, which are then ignored
44babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         by the custom tasks receiving them. -->
45babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="version.code" value="" />
46babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="version.name" value="" />
47babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="aapt.resource.filter" value="" />
486a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll    <!-- 'aapt.ignore.assets' is the list of file patterns to ignore under /res and /assets.
496a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll         Default is "!.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
506a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll
516a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll         Overall patterns syntax is:
526a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll           [!][<dir>|<file>][*suffix-match|prefix-match*|full-match]:more:patterns...
536a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll
546a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll         - The first character flag ! avoids printing a warning.
556a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll         - Pattern can have the flag "<dir>" to match only directories
566a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll           or "<file>" to match only files. Default is to match both.
576a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll         - Match is not case-sensitive.
586a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll    -->
596a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll    <property name="aapt.ignore.assets" value="" />
60babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
61dabcfba5bb53d8ca7c3e7508558cc060c0945b69Xavier Ducrohet    <!-- dex force jumbo options, to be used when dex merging fails with
62dabcfba5bb53d8ca7c3e7508558cc060c0945b69Xavier Ducrohet         UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dx.util.DexException: Cannot handle conversion to jumbo index!
63dabcfba5bb53d8ca7c3e7508558cc060c0945b69Xavier Ducrohet           at com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:103)
64dabcfba5bb53d8ca7c3e7508558cc060c0945b69Xavier Ducrohet           ...
65dabcfba5bb53d8ca7c3e7508558cc060c0945b69Xavier Ducrohet    -->
66dabcfba5bb53d8ca7c3e7508558cc060c0945b69Xavier Ducrohet    <property name="dex.force.jumbo" value="false" />
67a90b8efbabf82ef153c2a908e880a4f993f19ef4Xavier Ducrohet    <property name="dex.disable.merger" value="false" />
68dabcfba5bb53d8ca7c3e7508558cc060c0945b69Xavier Ducrohet
69babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- compilation options -->
70babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="java.encoding" value="UTF-8" />
71babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="java.target" value="1.5" />
72babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="java.source" value="1.5" />
73e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet    <property name="java.compilerargs" value="" />
742e03e6931f1e960f16bea1e0dff08d88947a898achrulri    <property name="java.compiler.classpath" value="" />
75babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
762d15c4298980be69c68c1a7d3a8bf264e7094469Xavier Ducrohet    <!-- Renderscript options -->
772d15c4298980be69c68c1a7d3a8bf264e7094469Xavier Ducrohet    <property name="renderscript.debug.opt.level" value="O0" />
782d15c4298980be69c68c1a7d3a8bf264e7094469Xavier Ducrohet    <property name="renderscript.release.opt.level" value="O3" />
792d15c4298980be69c68c1a7d3a8bf264e7094469Xavier Ducrohet
80dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet    <!-- manifest merger default value -->
81e6ec57d99bfda23f18ec7ec27022c5321b7368e5Xavier Ducrohet    <property name="manifestmerger.enabled" value="false" />
82dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet
83c16aec1100263d2e3449ba82d859b029c54007fbKeita Kita    <!-- instrumentation options -->
84c16aec1100263d2e3449ba82d859b029c54007fbKeita Kita    <property name="emma.filter" value="" />
85c16aec1100263d2e3449ba82d859b029c54007fbKeita Kita
86babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Verbosity -->
87babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="verbose" value="false" />
88babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
89a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye    <!-- Output location of the HTML report for the "lint" target.
90a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye         Ideally this would be specified as
916e7b5dae65cb0c578ff323ed203fe3460b64ea7bTor Norbye            value="${out.dir}/lint-results.html"
92a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye         but we can't make a forward reference to the definition for
93a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye         ${out.dir}, and it is not a configurable property (yet).
94a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye     -->
956e7b5dae65cb0c578ff323ed203fe3460b64ea7bTor Norbye    <property name="lint.out.html" value="bin/lint-results.html" />
96a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye
97a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye    <!-- Output location of the XML report for the "lint" target -->
986e7b5dae65cb0c578ff323ed203fe3460b64ea7bTor Norbye    <property name="lint.out.xml" value="bin/lint-results.xml" />
99a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye
100e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
101e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ********************* Custom Tasks ******************** -->
102e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
103babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
104babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- jar file from where the tasks are loaded -->
105babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <path id="android.antlibs">
106b986057267c761627455b56b2bf348f5add9c4b9Raphael Moll        <pathelement path="${sdk.dir}/tools/lib/ant-tasks.jar" />
107babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    </path>
1080fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1090fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- Custom tasks -->
1103b7b3c0cc33462c7eebae6fbd7f5e994625b9011Xavier Ducrohet    <taskdef resource="anttasks.properties" classpathref="android.antlibs" />
111da1c452fe47ca12fa89156531e78a3ab218fdbe9Xavier Ducrohet
112babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Emma configuration -->
113babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="emma.dir" value="${sdk.dir}/tools/lib" />
114babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <path id="emma.lib">
115babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <pathelement location="${emma.dir}/emma.jar" />
116babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <pathelement location="${emma.dir}/emma_ant.jar" />
117babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    </path>
118babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <taskdef resource="emma_ant.properties" classpathref="emma.lib" />
119babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- End of emma configuration -->
1200fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1210fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
122e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
123e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************* Other Properties ****************** -->
124e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
125babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- overriding these properties may break the build
126babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         unless the whole file is updated -->
1270fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1280fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- Input directories -->
1290fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <property name="source.dir" value="src" />
1300fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <property name="source.absolute.dir" location="${source.dir}" />
131babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="gen.absolute.dir" location="gen" />
132babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="resource.absolute.dir" location="res" />
133332d32749d198af322500f776ef40c1412016e29Michael Zoech    <property name="asset.dir" value="assets" />
134332d32749d198af322500f776ef40c1412016e29Michael Zoech    <property name="asset.absolute.dir" location="${asset.dir}" />
135a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet    <property name="jar.libs.dir" value="libs" />
136a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet    <property name="jar.libs.absolute.dir" location="${jar.libs.dir}" />
137babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="native.libs.absolute.dir" location="libs" />
1380fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
139dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet    <property name="manifest.file" value="AndroidManifest.xml" />
140dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet    <property name="manifest.abs.file" location="${manifest.file}" />
141dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet
1420fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- Output directories -->
1430fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <property name="out.dir" value="bin" />
1440fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <property name="out.absolute.dir" location="${out.dir}" />
145babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="out.classes.absolute.dir" location="${out.dir}/classes" />
146babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="out.res.absolute.dir" location="${out.dir}/res" />
147665f681e4881a7472f8ebcb7c4fb9a6771aada29Xavier Ducrohet    <property name="out.aidl.absolute.dir" location="${out.dir}/aidl" />
14898b631c6b3765be96b3707ba7aa54d52b10f4872Xavier Ducrohet    <property name="out.dexed.absolute.dir" location="${out.dir}/dexedLibs" />
149dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet    <property name="out.manifest.abs.file" location="${out.dir}/AndroidManifest.xml" />
150babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
151babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- tools location -->
152babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="android.tools.dir" location="${sdk.dir}/tools" />
153babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="android.platform.tools.dir" location="${sdk.dir}/platform-tools" />
154babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <condition property="exe" value=".exe" else=""><os family="windows" /></condition>
155babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <condition property="bat" value=".bat" else=""><os family="windows" /></condition>
156babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="adb" location="${android.platform.tools.dir}/adb${exe}" />
157babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="zipalign" location="${android.tools.dir}/zipalign${exe}" />
158a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye    <property name="lint" location="${android.tools.dir}/lint${bat}" />
1591daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
1600fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- Intermediate files -->
1610fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <property name="dex.file.name" value="classes.dex" />
162babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="intermediate.dex.file" location="${out.absolute.dir}/${dex.file.name}" />
163babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="resource.package.file.name" value="${ant.project.name}.ap_" />
1640fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
165babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Build property file -->
166babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <property name="out.build.prop.file" location="${out.absolute.dir}/build.prop" />
167b2e132cffd83c46aa836d0b06ca2c66de87fff2eXavier Ducrohet
168ddfe27973764d82001d52d5ba8306af8f2e79feeXavier Ducrohet
1690fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- This is needed by emma as it uses multilevel verbosity instead of simple 'true' or 'false'
1700fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         The property 'verbosity' is not user configurable and depends exclusively on 'verbose'
1710fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         value.-->
1720fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <condition property="verbosity" value="verbose" else="quiet">
1730fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <istrue value="${verbose}" />
1740fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </condition>
1750fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1764737bced9d780ded28d968982b25875113716046Xavier Ducrohet    <!-- properties for signing in release mode -->
1774737bced9d780ded28d968982b25875113716046Xavier Ducrohet    <condition property="has.keystore">
1784737bced9d780ded28d968982b25875113716046Xavier Ducrohet        <and>
1794737bced9d780ded28d968982b25875113716046Xavier Ducrohet            <isset property="key.store" />
1802cc3f070f6c52ecaa93aeb3d97383919ff5f1cebXavier Ducrohet            <length string="${key.store}" when="greater" length="0" />
1814737bced9d780ded28d968982b25875113716046Xavier Ducrohet            <isset property="key.alias" />
1824737bced9d780ded28d968982b25875113716046Xavier Ducrohet        </and>
1834737bced9d780ded28d968982b25875113716046Xavier Ducrohet    </condition>
1844737bced9d780ded28d968982b25875113716046Xavier Ducrohet    <condition property="has.password">
1854737bced9d780ded28d968982b25875113716046Xavier Ducrohet        <and>
1864737bced9d780ded28d968982b25875113716046Xavier Ducrohet            <isset property="has.keystore" />
1874737bced9d780ded28d968982b25875113716046Xavier Ducrohet            <isset property="key.store.password" />
1884737bced9d780ded28d968982b25875113716046Xavier Ducrohet            <isset property="key.alias.password" />
1894737bced9d780ded28d968982b25875113716046Xavier Ducrohet        </and>
1904737bced9d780ded28d968982b25875113716046Xavier Ducrohet    </condition>
1914737bced9d780ded28d968982b25875113716046Xavier Ducrohet
192c15b4fdc76142c61db1ec29feb2afdfaea43a84bJosiah Gaskin    <!-- properties for packaging -->
193c15b4fdc76142c61db1ec29feb2afdfaea43a84bJosiah Gaskin    <property name="build.packaging.nocrunch" value="true" />
194c15b4fdc76142c61db1ec29feb2afdfaea43a84bJosiah Gaskin
195baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet    <!-- whether we need to fork javac.
196baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet         This is only needed on Windows when running Java < 7 -->
197baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet    <condition else="false" property="need.javac.fork">
198baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet        <and>
199baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet            <matches pattern="1\.[56]" string="${java.specification.version}"/>
200baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet            <not>
201baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet                <os family="unix"/>
202baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet            </not>
203baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet        </and>
204baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet    </condition>
205baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet
206e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
207e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ************************ Macros *********************** -->
208e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
209babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
210babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- macro to do a task on if project.is.library is false.
211babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         elseText attribute is displayed otherwise -->
212babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <macrodef name="do-only-if-not-library">
213babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <attribute name="elseText" />
214babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <element name="task-to-do" implicit="yes" />
215babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <sequential>
216babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <if condition="${project.is.library}">
217babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <else>
218babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <task-to-do />
219babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </else>
220babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <then>
2215c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">@{elseText}</echo>
222babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </then>
223babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </if>
224babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </sequential>
225babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    </macrodef>
226babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
227babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- macro to do a task on if manifest.hasCode is true.
228babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         elseText attribute is displayed otherwise -->
229babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <macrodef name="do-only-if-manifest-hasCode">
230babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <attribute name="elseText" default=""/>
231babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <element name="task-to-do" implicit="yes" />
232babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <sequential>
233babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <if condition="${manifest.hasCode}">
234babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <then>
235babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <task-to-do />
236babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </then>
237babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <else>
238babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <if>
239babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <condition>
240babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <length string="@{elseText}" trim="true" when="greater" length="0" />
241babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </condition>
242babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <then>
2435c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                        <echo level="info">@{elseText}</echo>
244babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </then>
245babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </if>
246babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </else>
247babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </if>
248babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </sequential>
249babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    </macrodef>
250babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
2510fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
2520fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- Configurable macro, which allows to pass as parameters output directory,
2530fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         output dex filename and external libraries to dex (optional) -->
2540fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <macrodef name="dex-helper">
255df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet        <element name="external-libs" optional="yes" />
256891cbf7552f98af2f0baaed069b5eb64de50c556Xavier Ducrohet        <attribute name="nolocals" default="false" />
257df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet        <sequential>
258a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet            <!-- sets the primary input for dex. If a pre-dex task sets it to
259a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                 something else this has no effect -->
260df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet            <property name="out.dex.input.absolute.dir" value="${out.classes.absolute.dir}" />
261df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet
262a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet            <!-- set the secondary dx input: the project (and library) jar files
263a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                 If a pre-dex task sets it to something else this has no effect -->
264a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet            <if>
265a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                <condition>
266a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                    <isreference refid="out.dex.jar.input.ref" />
267a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                </condition>
268a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                <else>
269a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                    <path id="out.dex.jar.input.ref">
2701daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        <path refid="project.all.jars.path" />
271a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                    </path>
272a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                </else>
273a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet            </if>
274a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet
275891cbf7552f98af2f0baaed069b5eb64de50c556Xavier Ducrohet            <dex executable="${dx}"
276891cbf7552f98af2f0baaed069b5eb64de50c556Xavier Ducrohet                    output="${intermediate.dex.file}"
27798b631c6b3765be96b3707ba7aa54d52b10f4872Xavier Ducrohet                    dexedlibs="${out.dexed.absolute.dir}"
278891cbf7552f98af2f0baaed069b5eb64de50c556Xavier Ducrohet                    nolocals="@{nolocals}"
279dabcfba5bb53d8ca7c3e7508558cc060c0945b69Xavier Ducrohet                    forceJumbo="${dex.force.jumbo}"
280a90b8efbabf82ef153c2a908e880a4f993f19ef4Xavier Ducrohet                    disableDexMerger="${dex.disable.merger}"
281e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet                    verbose="${verbose}">
282891cbf7552f98af2f0baaed069b5eb64de50c556Xavier Ducrohet                <path path="${out.dex.input.absolute.dir}"/>
283a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                <path refid="out.dex.jar.input.ref" />
284df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet                <external-libs />
285891cbf7552f98af2f0baaed069b5eb64de50c556Xavier Ducrohet            </dex>
286df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet        </sequential>
2870fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </macrodef>
2880fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
2890fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- This is macro that enable passing variable list of external jar files to ApkBuilder
2900fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         Example of use:
291babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         <package-helper>
2920fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet             <extra-jars>
2930fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet                <jarfolder path="my_jars" />
2940fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet                <jarfile path="foo/bar.jar" />
2950fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet                <jarfolder path="your_jars" />
2960fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet             </extra-jars>
2970fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         </package-helper> -->
2980fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <macrodef name="package-helper">
2990fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <element name="extra-jars" optional="yes" />
3000fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <sequential>
3010fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet            <apkbuilder
3020fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet                    outfolder="${out.absolute.dir}"
303711c35d7e18a262cde3800eecec26d52a25d532aXavier Ducrohet                    resourcefile="${resource.package.file.name}"
304babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    apkfilepath="${out.packaged.file}"
305babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    debugpackaging="${build.is.packaging.debug}"
306babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    debugsigning="${build.is.signing.debug}"
3070a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet                    verbose="${verbose}"
308a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet                    hascode="${manifest.hasCode}"
309a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet                    previousBuildType="${build.last.is.packaging.debug}/${build.last.is.signing.debug}"
310a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet                    buildType="${build.is.packaging.debug}/${build.is.signing.debug}">
3110a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet                <dex path="${intermediate.dex.file}"/>
3120a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet                <sourcefolder path="${source.absolute.dir}"/>
3131daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <jarfile refid="project.all.jars.path" />
3140fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet                <nativefolder path="${native.libs.absolute.dir}" />
3151daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <nativefolder refid="project.library.native.folder.path" />
3160fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet                <extra-jars/>
3170fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet            </apkbuilder>
3180fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        </sequential>
3190fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </macrodef>
3200fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
3210fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- This is macro which zipaligns in.package and outputs it to out.package. Used by targets
3220fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         debug, -debug-with-emma and release.-->
3230fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <macrodef name="zipalign-helper">
3240fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <attribute name="in.package" />
3250fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <attribute name="out.package" />
3260fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <sequential>
32715fa2cb60993bddf40e5f2483e19345e9d77695dXavier Ducrohet            <zipalign
32815fa2cb60993bddf40e5f2483e19345e9d77695dXavier Ducrohet                    executable="${zipalign}"
32915fa2cb60993bddf40e5f2483e19345e9d77695dXavier Ducrohet                    input="@{in.package}"
33015fa2cb60993bddf40e5f2483e19345e9d77695dXavier Ducrohet                    output="@{out.package}"
33115fa2cb60993bddf40e5f2483e19345e9d77695dXavier Ducrohet                    verbose="${verbose}" />
3320fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        </sequential>
3330fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </macrodef>
3340fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
335babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <macrodef name="run-tests-helper">
336babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <attribute name="emma.enabled" default="false" />
337babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <element name="extra-instrument-args" optional="yes" />
3380fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <sequential>
3395c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet            <echo level="info">Running tests ...</echo>
3400fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet            <exec executable="${adb}" failonerror="true">
3410fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet                <arg line="${adb.device.arg}" />
342babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg value="shell" />
343babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg value="am" />
344babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg value="instrument" />
345babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg value="-w" />
346babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg value="-e" />
347babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg value="coverage" />
348babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg value="@{emma.enabled}" />
349babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <extra-instrument-args />
3501daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <arg value="${project.app.package}/${test.runner}" />
3510fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet            </exec>
3520fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        </sequential>
3530fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </macrodef>
3540fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
355a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet    <macrodef name="record-build-key">
356babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <attribute name="key" default="false" />
357babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <attribute name="value" default="false" />
358babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <sequential>
359babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <propertyfile file="${out.build.prop.file}" comment="Last build type">
360babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <entry key="@{key}" value="@{value}"/>
361babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </propertyfile>
362babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </sequential>
363babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    </macrodef>
3640fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
365a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet    <macrodef name="record-build-info">
366a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet        <sequential>
367a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet            <record-build-key key="build.last.target" value="${build.target}" />
368a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet            <record-build-key key="build.last.is.instrumented" value="${build.is.instrumented}" />
369a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet            <record-build-key key="build.last.is.packaging.debug" value="${build.is.packaging.debug}" />
370a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet            <record-build-key key="build.last.is.signing.debug" value="${build.is.signing.debug}" />
371a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet        </sequential>
372a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet    </macrodef>
373a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet
374babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <macrodef name="uninstall-helper">
375babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <attribute name="app.package" default="false" />
376babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <sequential>
3775c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet            <echo level="info">Uninstalling @{app.package} from the default emulator or device...</echo>
378babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <exec executable="${adb}" failonerror="true">
379babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg line="${adb.device.arg}" />
380babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg value="uninstall" />
381babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <arg value="@{app.package}" />
382babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </exec>
383babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </sequential>
384babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    </macrodef>
385babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
386e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
387e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************** Build Targets ******************** -->
388e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
389babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
3901daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    <!-- Basic Ant + SDK check -->
3911daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    <target name="-check-env">
3921daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <checkenv />
3931daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    </target>
3941daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
395def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet    <!-- target to disable building dependencies -->
396b29886ed1a08c2d900ffb5fe4789db3701584d6dXavier Ducrohet    <target name="nodeps">
3976451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet        <property name="dont.do.deps" value="true" />
398def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet    </target>
399def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet
4001daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    <!-- generic setup -->
4011daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    <target name="-setup" depends="-check-env">
4021daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <echo level="info">Project Name: ${ant.project.name}</echo>
4031daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <gettype projectTypeOut="project.type" />
4041daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
4051daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <!-- sets a few boolean based on project.type
4061daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet             to make the if task easier -->
4071daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <condition property="project.is.library" value="true" else="false">
4081daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <equals arg1="${project.type}" arg2="library" />
4091daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        </condition>
4101daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <condition property="project.is.test" value="true" else="false">
4111daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <equals arg1="${project.type}" arg2="test" />
4121daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        </condition>
4131daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <condition property="project.is.testapp" value="true" else="false">
4141daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <equals arg1="${project.type}" arg2="test-app" />
4151daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        </condition>
4161daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
4171daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <!-- If a test project, resolve absolute path to tested project. -->
4181daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <if condition="${project.is.test}">
4191daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <then>
4201daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <property name="tested.project.absolute.dir" location="${tested.project.dir}" />
4211daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            </then>
4221daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        </if>
4231daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
4241daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <!-- get the project manifest package -->
425dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet        <xpath input="${manifest.abs.file}"
4261daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                expression="/manifest/@package" output="project.app.package" />
4271daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
4281daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    </target>
429babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
430e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet    <!-- empty default pre-clean target. Create a similar target in
431e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet         your build.xml and it'll be called instead of this one. -->
432e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet    <target name="-pre-clean"/>
433e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet
434babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- clean target -->
4351daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    <target name="clean" depends="-setup, -pre-clean"
436e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet            description="Removes output files created by other targets.">
437babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <delete dir="${out.absolute.dir}" verbose="${verbose}" />
438babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <delete dir="${gen.absolute.dir}" verbose="${verbose}" />
439babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
4401daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <!-- if we know about a tested project or libraries, we clean them too. -->
441babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <if condition="${project.is.test}">
4420a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet            <then>
443babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <property name="tested.project.absolute.dir" location="${tested.project.dir}" />
444babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <subant failonerror="true">
445babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
446babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <target name="clean" />
447babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </subant>
4480a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet            </then>
4490a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet        </if>
4500fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
4511daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <!-- get all the libraries -->
4529aa55ba53817062f7423dbc69716020bd052c394Xavier Ducrohet        <if>
4531daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <condition><not><isset property="dont.do.deps" /></not></condition>
4549aa55ba53817062f7423dbc69716020bd052c394Xavier Ducrohet            <then>
455aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                <getlibpath libraryFolderPathOut="project.library.folder.path" />
4561daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <if>
4571daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <condition>
4581daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        <isreference refid="project.library.folder.path" />
4591daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    </condition>
4609aa55ba53817062f7423dbc69716020bd052c394Xavier Ducrohet                    <then>
4611daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        <!-- clean the libraries with nodeps since we already
4621daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                             know about all the libraries even the indirect one -->
4631daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        <subant
4641daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                                buildpathref="project.library.folder.path"
4651daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                                antfile="build.xml"
4661daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                                failonerror="true">
4671daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                            <target name="nodeps" />
4681daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                            <target name="clean" />
4691daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        </subant>
4709aa55ba53817062f7423dbc69716020bd052c394Xavier Ducrohet                    </then>
4719aa55ba53817062f7423dbc69716020bd052c394Xavier Ducrohet                </if>
4729aa55ba53817062f7423dbc69716020bd052c394Xavier Ducrohet            </then>
4739aa55ba53817062f7423dbc69716020bd052c394Xavier Ducrohet        </if>
474babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    </target>
4759520e97f048059f5a0a20599d6f778786fe2acc9Xavier Ducrohet
476babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Pre build setup -->
477babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="-build-setup" depends="-setup">
478c6c81cd28465b5a2b5bbd249757efbec90d72d5dXavier Ducrohet        <!-- find location of build tools -->
479c6c81cd28465b5a2b5bbd249757efbec90d72d5dXavier Ducrohet        <getbuildtools name="android.build.tools.dir" />
480c6c81cd28465b5a2b5bbd249757efbec90d72d5dXavier Ducrohet        <property name="aidl" location="${android.build.tools.dir}/aidl${exe}" />
481c6c81cd28465b5a2b5bbd249757efbec90d72d5dXavier Ducrohet        <property name="aapt" location="${android.build.tools.dir}/aapt${exe}" />
482c6c81cd28465b5a2b5bbd249757efbec90d72d5dXavier Ducrohet        <property name="dx" location="${android.build.tools.dir}/dx${bat}" />
483c6c81cd28465b5a2b5bbd249757efbec90d72d5dXavier Ducrohet
484c6c81cd28465b5a2b5bbd249757efbec90d72d5dXavier Ducrohet        <!-- Renderscript include Path -->
485c6c81cd28465b5a2b5bbd249757efbec90d72d5dXavier Ducrohet        <path id="android.renderscript.include.path">
4864aa4f9d645eaa93e4635e5faa14073850eedda24Xavier Ducrohet            <pathelement location="${android.build.tools.dir}/renderscript/include" />
4874aa4f9d645eaa93e4635e5faa14073850eedda24Xavier Ducrohet            <pathelement location="${android.build.tools.dir}/renderscript/clang-include" />
488c6c81cd28465b5a2b5bbd249757efbec90d72d5dXavier Ducrohet        </path>
489babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
490babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- read the previous build mode -->
491babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property file="${out.build.prop.file}" />
492e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet        <!-- if empty the props won't be set, meaning it's a new build.
493e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet             To force a build, set the prop to empty values. -->
494e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet        <property name="build.last.target" value="" />
495e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet        <property name="build.last.is.instrumented" value="" />
496e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet        <property name="build.last.is.packaging.debug" value="" />
497e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet        <property name="build.last.is.signing.debug" value="" />
498babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
4991c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet        <!-- If the "debug" build type changed, clear out the compiled code.
5001c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet             This is to make sure the new BuildConfig.DEBUG value is picked up
5011c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet             as javac can't deal with this type of change in its dependency computation. -->
5021c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet        <if>
5031c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet            <condition>
5041c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                <and>
5051c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                    <length string="${build.last.is.packaging.debug}" trim="true" when="greater" length="0" />
5061c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                    <not><equals
5071c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                            arg1="${build.is.packaging.debug}"
5081c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                            arg2="${build.last.is.packaging.debug}" /></not>
5091c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                </and>
5101c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet            </condition>
5111c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet            <then>
5121c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                <echo level="info">Switching between debug and non debug build: Deleting previous compilation output...</echo>
5131c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                <delete dir="${out.classes.absolute.dir}" verbose="${verbose}" />
5141c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet            </then>
5151c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet            <else>
5161c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                <!-- Else, we may still need to clean the code, for another reason.
5171c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                     special case for instrumented: if the previous build was
5181c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                     instrumented but not this one, clear out the compiled code -->
5191c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                <if>
5201c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                    <condition>
5211c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                        <and>
5221c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                            <istrue value="${build.last.is.instrumented}" />
5231c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                            <isfalse value="${build.is.instrumented}" />
5241c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                        </and>
5251c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                    </condition>
5261c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                    <then>
5271c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                        <echo level="info">Switching from instrumented to non-instrumented build: Deleting previous compilation output...</echo>
5281c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                        <delete dir="${out.classes.absolute.dir}" verbose="${verbose}" />
5291c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                    </then>
5301c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet                </if>
5311c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet            </else>
5321c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet        </if>
5331c6e494f48261efe74278568c4aa81394502d802Xavier Ducrohet
5341daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <echo level="info">Resolving Build Target for ${ant.project.name}...</echo>
5351daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <!-- load project properties, resolve Android target, library dependencies
5361daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet             and set some properties with the results.
5371daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet             All property names are passed as parameters ending in -Out -->
5381daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <gettarget
5391daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                androidJarFileOut="project.target.android.jar"
5401daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                androidAidlFileOut="project.target.framework.aidl"
5411daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                bootClassPathOut="project.target.class.path"
5421daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                targetApiOut="project.target.apilevel"
5431daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                minSdkVersionOut="project.minSdkVersion" />
5441daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
5451daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <!-- Value of the hasCode attribute (Application node) extracted from manifest file -->
546dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet        <xpath input="${manifest.abs.file}" expression="/manifest/application/@android:hasCode"
5471daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    output="manifest.hasCode" default="true"/>
5481daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
5491daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <echo level="info">----------</echo>
5501daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <echo level="info">Creating output directories if needed...</echo>
5511daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <mkdir dir="${resource.absolute.dir}" />
5521daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <mkdir dir="${jar.libs.absolute.dir}" />
5531daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <mkdir dir="${out.absolute.dir}" />
5541daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <mkdir dir="${out.res.absolute.dir}" />
5551daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <do-only-if-manifest-hasCode>
5561daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <mkdir dir="${gen.absolute.dir}" />
5571daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <mkdir dir="${out.classes.absolute.dir}" />
55898b631c6b3765be96b3707ba7aa54d52b10f4872Xavier Ducrohet            <mkdir dir="${out.dexed.absolute.dir}" />
5591daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        </do-only-if-manifest-hasCode>
5601daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
5611daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <echo level="info">----------</echo>
5621daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <echo level="info">Resolving Dependencies for ${ant.project.name}...</echo>
5631daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <dependency
5641daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                libraryFolderPathOut="project.library.folder.path"
5651daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                libraryPackagesOut="project.library.packages"
566dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet                libraryManifestFilePathOut="project.library.manifest.file.path"
5671daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                libraryResFolderPathOut="project.library.res.folder.path"
568059a2b80b4385b5f3784ccec0b6a6533d5862ac6Xavier Ducrohet                libraryBinAidlFolderPathOut="project.library.bin.aidl.folder.path"
569aea408b68a6f833327b6e0954a28f414f58133acXavier Ducrohet                libraryRFilePathOut="project.library.bin.r.file.path"
5701daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                libraryNativeFolderPathOut="project.library.native.folder.path"
5711daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                jarLibraryPathOut="project.all.jars.path"
5721daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                targetApi="${project.target.apilevel}"
5731daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                verbose="${verbose}" />
5741daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
575babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- compile the libraries if any -->
576babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <if>
577babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <condition>
578def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet                <and>
5791daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <isreference refid="project.library.folder.path" />
5806451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                    <not><isset property="dont.do.deps" /></not>
581def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet                </and>
582babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </condition>
5830a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet            <then>
5841daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <!-- figure out which target must be used to build the library projects.
5851daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                     If emma is enabled, then use 'instrument' otherwise, use 'debug' -->
5861daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <condition property="project.libraries.target" value="instrument" else="${build.target}">
5871daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <istrue value="${build.is.instrumented}" />
5881daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                </condition>
5891daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
5901daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <echo level="info">----------</echo>
5911daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <echo level="info">Building Libraries with '${project.libraries.target}'...</echo>
5921daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
5931daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <!-- no need to build the deps as we have already
5941daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                     the full list of libraries -->
595def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet                <subant failonerror="true"
5961daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        buildpathref="project.library.folder.path"
597def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet                        antfile="build.xml">
598b29886ed1a08c2d900ffb5fe4789db3701584d6dXavier Ducrohet                    <target name="nodeps" />
5991daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <target name="${project.libraries.target}" />
600aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                    <property name="emma.coverage.absolute.file" location="${out.absolute.dir}/coverage.em" />
601def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet                </subant>
6020a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet            </then>
6030a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet        </if>
6040fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
605babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- compile the main project if this is a test project -->
606babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <if condition="${project.is.test}">
6070a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet            <then>
608babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <!-- figure out which target must be used to build the tested project.
609babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                     If emma is enabled, then use 'instrument' otherwise, use 'debug' -->
610babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <condition property="tested.project.target" value="instrument" else="debug">
611babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <isset property="emma.enabled" />
612babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </condition>
613babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
6141daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <echo level="info">----------</echo>
6151daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <echo level="info">Building tested project at ${tested.project.absolute.dir} with '${tested.project.target}'...</echo>
616babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <subant target="${tested.project.target}" failonerror="true">
617babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
618babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </subant>
6191daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
6201daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <!-- get the tested project full classpath to be able to build
6211daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                     the test project -->
6221daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <testedprojectclasspath
6231daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        projectLocation="${tested.project.absolute.dir}"
6241daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        projectClassPathOut="tested.project.classpath"/>
6250a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet            </then>
6261daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <else>
6271daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <!-- no tested project, make an empty Path object so that javac doesn't
6281daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                     complain -->
6291daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <path id="tested.project.classpath" />
6301daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            </else>
6310a958e76e9406faed2c76d44557c678a6caa7081Xavier Ducrohet        </if>
632babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    </target>
633babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
634babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- empty default pre-build target. Create a similar target in
635babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         your build.xml and it'll be called instead of this one. -->
636babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="-pre-build"/>
637babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
638babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Code Generation: compile resources (aapt -> R.java), aidl, renderscript -->
639babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="-code-gen">
640dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet        <!-- always merge manifest -->
641dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet        <mergemanifest
642dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet                appManifest="${manifest.abs.file}"
643dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet                outManifest="${out.manifest.abs.file}"
644e6ec57d99bfda23f18ec7ec27022c5321b7368e5Xavier Ducrohet                enabled="${manifestmerger.enabled}">
645dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet            <library refid="project.library.manifest.file.path" />
646dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet        </mergemanifest>
6473b7b3c0cc33462c7eebae6fbd7f5e994625b9011Xavier Ducrohet
648babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <do-only-if-manifest-hasCode
649babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                elseText="hasCode = false. Skipping aidl/renderscript/R.java">
6505c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet            <echo level="info">Handling aidl files...</echo>
651665f681e4881a7472f8ebcb7c4fb9a6771aada29Xavier Ducrohet            <aidl executable="${aidl}"
652665f681e4881a7472f8ebcb7c4fb9a6771aada29Xavier Ducrohet                    framework="${project.target.framework.aidl}"
653059a2b80b4385b5f3784ccec0b6a6533d5862ac6Xavier Ducrohet                    libraryBinAidlFolderPathRefid="project.library.bin.aidl.folder.path"
654665f681e4881a7472f8ebcb7c4fb9a6771aada29Xavier Ducrohet                    genFolder="${gen.absolute.dir}"
655665f681e4881a7472f8ebcb7c4fb9a6771aada29Xavier Ducrohet                    aidlOutFolder="${out.aidl.absolute.dir}">
656babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <source path="${source.absolute.dir}"/>
657babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </aidl>
658babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
659babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <!-- renderscript generates resources so it must be called before aapt -->
6605c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet            <echo level="info">----------</echo>
6615c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet            <echo level="info">Handling RenderScript files...</echo>
662466d084bf64a41bbcac4145795628d182286b6baXavier Ducrohet            <!-- set the rs target prop in case it hasn't been set. -->
663466d084bf64a41bbcac4145795628d182286b6baXavier Ducrohet            <property name="renderscript.target" value="${project.minSdkVersion}" />
6646cec7a7af4d4ae20424566ee1fc43d4ec00476d6Xavier Ducrohet            <renderscript buildToolsRoot="${android.build.tools.dir}"
665662db9123554e1b067d95e4590f2cf543b4e4f8fXavier Ducrohet                    includePathRefId="android.renderscript.include.path"
666babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    genFolder="${gen.absolute.dir}"
667b92742797f979667fad027e35e04efff6e7df0aaXavier Ducrohet                    resFolder="${out.res.absolute.dir}/raw"
668466d084bf64a41bbcac4145795628d182286b6baXavier Ducrohet                    targetApi="${renderscript.target}"
6694987af409c704c881be83f9a90b98ce7658e1c46Matt Kopec                    optLevel="${renderscript.opt.level}"
6702d15c4298980be69c68c1a7d3a8bf264e7094469Xavier Ducrohet                    buildType="${build.is.packaging.debug}"
6712d15c4298980be69c68c1a7d3a8bf264e7094469Xavier Ducrohet                    previousBuildType="${build.last.is.packaging.debug}">
672babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <source path="${source.absolute.dir}"/>
673babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </renderscript>
674babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
6755c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet            <echo level="info">----------</echo>
6765c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet            <echo level="info">Handling Resources...</echo>
677babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <aapt executable="${aapt}"
678babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    command="package"
679babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    verbose="${verbose}"
680dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet                    manifest="${out.manifest.abs.file}"
681131459f779b1a98bf354663298637589a2860fffXavier Ducrohet                    originalManifestPackage="${project.app.package}"
6821daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    androidjar="${project.target.android.jar}"
683babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    rfolder="${gen.absolute.dir}"
68426d92b7f8a7b8a32352f52a676f486c06e5b82c8Xavier Ducrohet                    nonConstantId="${android.library}"
6851daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    libraryResFolderPathRefid="project.library.res.folder.path"
6866a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll                    libraryPackagesRefid="project.library.packages"
687aea408b68a6f833327b6e0954a28f414f58133acXavier Ducrohet                    libraryRFileRefid="project.library.bin.r.file.path"
688249dc0127b12679441013dd78208706feb632c59Xavier Ducrohet                    ignoreAssets="${aapt.ignore.assets}"
689aea408b68a6f833327b6e0954a28f414f58133acXavier Ducrohet                    binFolder="${out.absolute.dir}"
690249dc0127b12679441013dd78208706feb632c59Xavier Ducrohet                    proguardFile="${out.absolute.dir}/proguard.txt">
691b92742797f979667fad027e35e04efff6e7df0aaXavier Ducrohet                <res path="${out.res.absolute.dir}" />
692babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <res path="${resource.absolute.dir}" />
693babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </aapt>
694e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet
6955c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet            <echo level="info">----------</echo>
6965c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet            <echo level="info">Handling BuildConfig class...</echo>
697e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet            <buildconfig
698e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet                    genFolder="${gen.absolute.dir}"
6991daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    package="${project.app.package}"
700e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet                    buildType="${build.is.packaging.debug}"
701e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet                    previousBuildType="${build.last.is.packaging.debug}"/>
702e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet
703babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-manifest-hasCode>
70468d0fb4cbfa47402910027c97bc91410da75ea10Xavier Ducrohet    </target>
70568d0fb4cbfa47402910027c97bc91410da75ea10Xavier Ducrohet
7069520e97f048059f5a0a20599d6f778786fe2acc9Xavier Ducrohet    <!-- empty default pre-compile target. Create a similar target in
7079520e97f048059f5a0a20599d6f778786fe2acc9Xavier Ducrohet         your build.xml and it'll be called instead of this one. -->
7089520e97f048059f5a0a20599d6f778786fe2acc9Xavier Ducrohet    <target name="-pre-compile"/>
7099520e97f048059f5a0a20599d6f778786fe2acc9Xavier Ducrohet
7100fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- Compiles this project's .java files into .class files. -->
711ab235e611a72ccb01608e0e647b9661bbb037a46Xavier Ducrohet    <target name="-compile" depends="-pre-build, -build-setup, -code-gen, -pre-compile">
712babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping...">
7131daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <!-- merge the project's own classpath and the tested project's classpath -->
7141daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <path id="project.javac.classpath">
7151daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <path refid="project.all.jars.path" />
7161daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <path refid="tested.project.classpath" />
7172e03e6931f1e960f16bea1e0dff08d88947a898achrulri                <path path="${java.compiler.classpath}" />
7181daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            </path>
719babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <javac encoding="${java.encoding}"
720babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    source="${java.source}" target="${java.target}"
721e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet                    debug="true" extdirs="" includeantruntime="false"
722babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    destdir="${out.classes.absolute.dir}"
7231daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    bootclasspathref="project.target.class.path"
724babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    verbose="${verbose}"
7251daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    classpathref="project.javac.classpath"
726baeef7fd3828cd609d7f6f8065466b706928dacbXavier Ducrohet                    fork="${need.javac.fork}">
727babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <src path="${source.absolute.dir}" />
728babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <src path="${gen.absolute.dir}" />
729e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet                <compilerarg line="${java.compilerargs}" />
730babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </javac>
7311daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
7321daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <!-- if the project is instrumented, intrument the classes -->
7331daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <if condition="${build.is.instrumented}">
7341daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <then>
7351daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <echo level="info">Instrumenting classes from ${out.absolute.dir}/classes...</echo>
73647f429464374712e770b8e9b703790faa75dff19Xavier Ducrohet
73747f429464374712e770b8e9b703790faa75dff19Xavier Ducrohet                    <!-- build the filter to remove R, Manifest, BuildConfig -->
73847f429464374712e770b8e9b703790faa75dff19Xavier Ducrohet                    <getemmafilter
73947f429464374712e770b8e9b703790faa75dff19Xavier Ducrohet                            appPackage="${project.app.package}"
74047f429464374712e770b8e9b703790faa75dff19Xavier Ducrohet                            libraryPackagesRefId="project.library.packages"
74147f429464374712e770b8e9b703790faa75dff19Xavier Ducrohet                            filterOut="emma.default.filter"/>
74247f429464374712e770b8e9b703790faa75dff19Xavier Ducrohet
743aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                    <!-- define where the .em file is going. This may have been
744aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                         setup already if this is a library -->
745aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                    <property name="emma.coverage.absolute.file" location="${out.absolute.dir}/coverage.em" />
746aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet
7471daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <!-- It only instruments class files, not any external libs -->
7481daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <emma enabled="true">
7491daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        <instr verbosity="${verbosity}"
7501daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                               mode="overwrite"
7511daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                               instrpath="${out.absolute.dir}/classes"
752fcb82e3185d657e3b5440295478cdc58afd168c3Xavier Ducrohet                               outdir="${out.absolute.dir}/classes"
753aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                               metadatafile="${emma.coverage.absolute.file}">
75447f429464374712e770b8e9b703790faa75dff19Xavier Ducrohet                            <filter excludes="${emma.default.filter}" />
7551daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                            <filter value="${emma.filter}" />
7561daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        </instr>
7571daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    </emma>
7581daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                </then>
7591daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            </if>
7601daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
761babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <!-- if the project is a library then we generate a jar file -->
762babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <if condition="${project.is.library}">
763babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <then>
7645c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                    <echo level="info">Creating library output jar file...</echo>
765babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <property name="out.library.jar.file" location="${out.absolute.dir}/classes.jar" />
766babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <if>
767babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <condition>
768babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            <length string="${android.package.excludes}" trim="true" when="greater" length="0" />
769babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        </condition>
770babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <then>
7715c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                            <echo level="info">Custom jar packaging exclusion: ${android.package.excludes}</echo>
772babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        </then>
773babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </if>
774da1c452fe47ca12fa89156531e78a3ab218fdbe9Xavier Ducrohet
7751daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <propertybyreplace name="project.app.package.path" input="${project.app.package}" replace="." with="/" />
776da1c452fe47ca12fa89156531e78a3ab218fdbe9Xavier Ducrohet
777babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <jar destfile="${out.library.jar.file}">
778da1c452fe47ca12fa89156531e78a3ab218fdbe9Xavier Ducrohet                        <fileset dir="${out.classes.absolute.dir}"
779a08befd52438d523cb2cd41b53f961785d3872fdXavier Ducrohet                                includes="**/*.class"
780bbfb29424d981151074107221fa728a5ffc47123Xavier Ducrohet                                excludes="${project.app.package.path}/R.class ${project.app.package.path}/R$*.class ${project.app.package.path}/BuildConfig.class"/>
781babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" />
782babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </jar>
783babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </then>
784babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </if>
785babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
786babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-manifest-hasCode>
7870fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
7880fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
7899520e97f048059f5a0a20599d6f778786fe2acc9Xavier Ducrohet    <!-- empty default post-compile target. Create a similar target in
7909520e97f048059f5a0a20599d6f778786fe2acc9Xavier Ducrohet         your build.xml and it'll be called instead of this one. -->
7919520e97f048059f5a0a20599d6f778786fe2acc9Xavier Ducrohet    <target name="-post-compile"/>
7929520e97f048059f5a0a20599d6f778786fe2acc9Xavier Ducrohet
793c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet    <!-- Obfuscate target
794c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet        This is only active in release builds when proguard.config is defined
795c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet        in default.properties.
796c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet
797c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet        To replace Proguard with a different obfuscation engine:
798c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet        Override the following targets in your build.xml, before the call to <setup>
799c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet            -release-obfuscation-check
800c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet                Check whether obfuscation should happen, and put the result in a property.
801c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet            -debug-obfuscation-check
802c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet                Obfuscation should not happen. Set the same property to false.
803c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet            -obfuscate
804c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet                check if the property set in -debug/release-obfuscation-check is set to true.
805c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet                If true:
806c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet                    Perform obfuscation
807c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet                    Set property out.dex.input.absolute.dir to be the output of the obfuscation
808c83ab24062531e9aa2b166596e954375fb53492bXavier Ducrohet    -->
809babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="-obfuscate">
810a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet        <if condition="${proguard.enabled}">
811a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet            <then>
812a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <property name="obfuscate.absolute.dir" location="${out.absolute.dir}/proguard" />
813a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <property name="preobfuscate.jar.file" value="${obfuscate.absolute.dir}/original.jar" />
814a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <property name="obfuscated.jar.file" value="${obfuscate.absolute.dir}/obfuscated.jar" />
815df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet                <!-- input for dex will be proguard's output -->
816a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <property name="out.dex.input.absolute.dir" value="${obfuscated.jar.file}" />
817a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet
818a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <!-- Add Proguard Tasks -->
819a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <property name="proguard.jar" location="${android.tools.dir}/proguard/lib/proguard.jar" />
820a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <taskdef name="proguard" classname="proguard.ant.ProGuardTask" classpath="${proguard.jar}" />
821a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet
822a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <!-- Set the android classpath Path object into a single property. It'll be
823a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                     all the jar files separated by a platform path-separator.
82421b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                     Each path must be quoted if it contains spaces.
825a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                -->
8261daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <pathconvert property="project.target.classpath.value" refid="project.target.class.path">
82721b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    <firstmatchmapper>
82821b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                        <regexpmapper from='^([^ ]*)( .*)$$' to='"\1\2"'/>
82921b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                        <identitymapper/>
83021b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    </firstmatchmapper>
83121b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                </pathconvert>
83221b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll
833a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <!-- Build a path object with all the jar files that must be obfuscated.
834a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                     This include the project compiled source code and any 3rd party jar
835a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                     files. -->
8361daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <path id="project.all.classes.path">
837a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                    <pathelement location="${preobfuscate.jar.file}" />
8381daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <path refid="project.all.jars.path" />
839a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                </path>
840a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <!-- Set the project jar files Path object into a single property. It'll be
841a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                     all the jar files separated by a platform path-separator.
84221b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                     Each path must be quoted if it contains spaces.
843a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                -->
8441daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <pathconvert property="project.all.classes.value" refid="project.all.classes.path">
84521b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    <firstmatchmapper>
84621b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                        <regexpmapper from='^([^ ]*)( .*)$$' to='"\1\2"'/>
84721b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                        <identitymapper/>
84821b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    </firstmatchmapper>
84921b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                </pathconvert>
85021b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll
8510bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                <!-- Turn the path property ${proguard.config} from an A:B:C property
8520bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                     into a series of includes: -include A -include B -include C
8530bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                     suitable for processing by the ProGuard task. Note - this does
8540bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                     not include the leading '-include "' or the closing '"'; those
8550bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                     are added under the <proguard> call below.
8560bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                -->
8570bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                <path id="proguard.configpath">
8580bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                    <pathelement path="${proguard.config}"/>
8590bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                </path>
8600bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                <pathconvert pathsep='" -include "' property="proguard.configcmd" refid="proguard.configpath"/>
8610bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye
86221b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                <mkdir   dir="${obfuscate.absolute.dir}" />
863a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <delete file="${preobfuscate.jar.file}"/>
864a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <delete file="${obfuscated.jar.file}"/>
865babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <jar basedir="${out.classes.absolute.dir}"
86621b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    destfile="${preobfuscate.jar.file}" />
867a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                <proguard>
8680bf1b2c94e8b3d829fd69d11f2efd550d6159cb9Tor Norbye                    -include      "${proguard.configcmd}"
869249dc0127b12679441013dd78208706feb632c59Xavier Ducrohet                    -include      "${out.absolute.dir}/proguard.txt"
8701daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    -injars       ${project.all.classes.value}
87121b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    -outjars      "${obfuscated.jar.file}"
8721daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    -libraryjars  ${project.target.classpath.value}
87321b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    -dump         "${obfuscate.absolute.dir}/dump.txt"
87421b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    -printseeds   "${obfuscate.absolute.dir}/seeds.txt"
87521b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    -printusage   "${obfuscate.absolute.dir}/usage.txt"
87621b7ce23b4280350aaebba3ed3d480d74f07fc2bRaphael Moll                    -printmapping "${obfuscate.absolute.dir}/mapping.txt"
877a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet                </proguard>
878a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet            </then>
879a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet        </if>
880a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet    </target>
881a66ca8ad997527af0e7a07ba851da0a6d379fad0Xavier Ducrohet
8820fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- Converts this project's .class files into .dex files -->
883babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="-dex" depends="-compile, -post-compile, -obfuscate">
884babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping...">
885babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <!-- only convert to dalvik bytecode is *not* a library -->
886babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <do-only-if-not-library elseText="Library project: do not convert bytecode..." >
887babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <!-- special case for instrumented builds: need to use no-locals and need
888babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                     to pass in the emma jar. -->
889babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <if condition="${build.is.instrumented}">
890babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <then>
891891cbf7552f98af2f0baaed069b5eb64de50c556Xavier Ducrohet                        <dex-helper nolocals="true">
892babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            <external-libs>
893babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                                <fileset file="${emma.dir}/emma_device.jar" />
894babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            </external-libs>
895babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        </dex-helper>
896babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </then>
897babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <else>
898babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <dex-helper />
899babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </else>
900babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </if>
901babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </do-only-if-not-library>
902babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-manifest-hasCode>
9030fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
9040fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
905c15b4fdc76142c61db1ec29feb2afdfaea43a84bJosiah Gaskin<!-- Updates the pre-processed PNG cache -->
906c15b4fdc76142c61db1ec29feb2afdfaea43a84bJosiah Gaskin    <target name="-crunch">
90778c89f931135c11c45f26590ea5ae29577bced85Xavier Ducrohet        <exec executable="${aapt}" taskName="crunch">
90878c89f931135c11c45f26590ea5ae29577bced85Xavier Ducrohet            <arg value="crunch" />
90978c89f931135c11c45f26590ea5ae29577bced85Xavier Ducrohet            <arg value="-v" />
91078c89f931135c11c45f26590ea5ae29577bced85Xavier Ducrohet            <arg value="-S" />
91178c89f931135c11c45f26590ea5ae29577bced85Xavier Ducrohet            <arg path="${resource.absolute.dir}" />
91278c89f931135c11c45f26590ea5ae29577bced85Xavier Ducrohet            <arg value="-C" />
91378c89f931135c11c45f26590ea5ae29577bced85Xavier Ducrohet            <arg path="${out.res.absolute.dir}" />
91478c89f931135c11c45f26590ea5ae29577bced85Xavier Ducrohet        </exec>
915c15b4fdc76142c61db1ec29feb2afdfaea43a84bJosiah Gaskin    </target>
916c15b4fdc76142c61db1ec29feb2afdfaea43a84bJosiah Gaskin
9170fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <!-- Puts the project's resources into the output package file
9180fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         This actually can create multiple resource package in case
9190fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         Some custom apk with specific configuration have been
9200fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         declared in default.properties.
9210fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet         -->
922c15b4fdc76142c61db1ec29feb2afdfaea43a84bJosiah Gaskin    <target name="-package-resources" depends="-crunch">
923babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- only package resources if *not* a library project -->
9243b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet        <do-only-if-not-library elseText="Library project: do not package resources..." >
925babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <aapt executable="${aapt}"
926babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    command="package"
927babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    versioncode="${version.code}"
928babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    versionname="${version.name}"
929babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    debug="${build.is.packaging.debug}"
930dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet                    manifest="${out.manifest.abs.file}"
931babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    assets="${asset.absolute.dir}"
9321daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    androidjar="${project.target.android.jar}"
933babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    apkfolder="${out.absolute.dir}"
934babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    nocrunch="${build.packaging.nocrunch}"
935babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    resourcefilename="${resource.package.file.name}"
936babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    resourcefilter="${aapt.resource.filter}"
9371daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    libraryResFolderPathRefid="project.library.res.folder.path"
9381daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    libraryPackagesRefid="project.library.packages"
939aea408b68a6f833327b6e0954a28f414f58133acXavier Ducrohet                    libraryRFileRefid="project.library.bin.r.file.path"
940babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    previousBuildType="${build.last.target}"
9416a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll                    buildType="${build.target}"
9426a98de15b34aad728c6a28fa8da0d9fe4e9fe4f5Raphael Moll                    ignoreAssets="${aapt.ignore.assets}">
943babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <res path="${out.res.absolute.dir}" />
944babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <res path="${resource.absolute.dir}" />
945babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <!-- <nocompress /> forces no compression on any files in assets or res/raw -->
946babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <!-- <nocompress extension="xml" /> forces no compression on specific file extensions in assets and res/raw -->
947babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </aapt>
948babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-not-library>
9490fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
9500fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
951babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Packages the application. -->
952babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="-package" depends="-dex, -package-resources">
953babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- only package apk if *not* a library project -->
954babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <do-only-if-not-library elseText="Library project: do not package apk..." >
955babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <if condition="${build.is.instrumented}">
956babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <then>
957babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <package-helper>
958babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <extra-jars>
959babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            <!-- Injected from external file -->
960babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            <jarfile path="${emma.dir}/emma_device.jar" />
961babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        </extra-jars>
962babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </package-helper>
963babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </then>
964babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <else>
965babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <package-helper />
966babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </else>
967babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </if>
968babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-not-library>
9690fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
9700fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
97163bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet    <target name="-post-package" />
97263bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet    <target name="-post-build" />
97363bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet
9743b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    <target name="-set-mode-check">
975e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet        <fail if="build.is.mode.set"
9763b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet                message="Cannot run two different modes at the same time. If you are running more than one debug/release/instrument type targets, call them from different Ant calls." />
9773b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    </target>
9783b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet
979e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
980e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- **************** Debug specific targets *************** -->
981e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
9820fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
9833b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    <target name="-set-debug-files" depends="-set-mode-check">
984df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet
985babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="out.packaged.file" location="${out.absolute.dir}/${ant.project.name}-debug-unaligned.apk" />
986babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="out.final.file" location="${out.absolute.dir}/${ant.project.name}-debug.apk" />
987e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet        <property name="build.is.mode.set" value="true" />
9883b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    </target>
989babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
9903b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet
9911daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    <target name="-set-debug-mode" depends="-setup">
992babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- record the current build target -->
993babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="build.target" value="debug" />
994babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
9951daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <if>
9961daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <condition>
9971daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <and>
9981daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <istrue value="${project.is.testapp}" />
9991daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <istrue value="${emma.enabled}" />
10001daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                </and>
10011daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            </condition>
10021daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <then>
10031daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <property name="build.is.instrumented" value="true" />
10041daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            </then>
10051daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <else>
10061daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <property name="build.is.instrumented" value="false" />
10071daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            </else>
10081daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        </if>
10095af43ecb4e1621cb55cdda4074c11cd9009ae2b2Xavier Ducrohet
10105af43ecb4e1621cb55cdda4074c11cd9009ae2b2Xavier Ducrohet        <!-- whether the build is a debug build. always set. -->
1011babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="build.is.packaging.debug" value="true" />
1012e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet
1013e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet        <!-- signing mode: debug -->
1014babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="build.is.signing.debug" value="true" />
1015e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet
10164987af409c704c881be83f9a90b98ce7658e1c46Matt Kopec        <!-- Renderscript optimization level: none -->
10172d15c4298980be69c68c1a7d3a8bf264e7094469Xavier Ducrohet        <property name="renderscript.opt.level" value="${renderscript.debug.opt.level}" />
10184987af409c704c881be83f9a90b98ce7658e1c46Matt Kopec
10195af43ecb4e1621cb55cdda4074c11cd9009ae2b2Xavier Ducrohet    </target>
10205af43ecb4e1621cb55cdda4074c11cd9009ae2b2Xavier Ducrohet
10213b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    <target name="-debug-obfuscation-check">
10223b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet        <!-- proguard is never enabled in debug mode -->
10233b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet        <property name="proguard.enabled" value="false"/>
10243b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    </target>
10253b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet
1026babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Builds debug output package -->
102763bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet    <target name="-do-debug" depends="-set-debug-mode, -debug-obfuscation-check, -package, -post-package">
1028babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- only create apk if *not* a library project -->
1029babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <do-only-if-not-library elseText="Library project: do not create apk..." >
1030babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <sequential>
1031babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <zipalign-helper in.package="${out.packaged.file}" out.package="${out.final.file}" />
10325c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">Debug Package: ${out.final.file}</echo>
1033babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </sequential>
1034babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-not-library>
103563bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet        <record-build-info />
10363b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    </target>
10373b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet
10383b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    <!-- Builds debug output package -->
103963bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet    <target name="debug" depends="-set-debug-files, -do-debug, -post-build"
10403b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet                description="Builds the application and signs it with a debug key.">
10410fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
10420fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
10433b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet
1044e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1045e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- *************** Release specific targets ************** -->
1046e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1047babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
10484737bced9d780ded28d968982b25875113716046Xavier Ducrohet    <!-- called through target 'release'. Only executed if the keystore and
10494737bced9d780ded28d968982b25875113716046Xavier Ducrohet         key alias are known but not their password. -->
10504737bced9d780ded28d968982b25875113716046Xavier Ducrohet    <target name="-release-prompt-for-password" if="has.keystore" unless="has.password">
10514737bced9d780ded28d968982b25875113716046Xavier Ducrohet        <!-- Gets passwords -->
10524737bced9d780ded28d968982b25875113716046Xavier Ducrohet        <input
10534737bced9d780ded28d968982b25875113716046Xavier Ducrohet                message="Please enter keystore password (store:${key.store}):"
10544737bced9d780ded28d968982b25875113716046Xavier Ducrohet                addproperty="key.store.password" />
10554737bced9d780ded28d968982b25875113716046Xavier Ducrohet        <input
10564737bced9d780ded28d968982b25875113716046Xavier Ducrohet                message="Please enter password for alias '${key.alias}':"
10574737bced9d780ded28d968982b25875113716046Xavier Ducrohet                addproperty="key.alias.password" />
10580fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
10590fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
10604737bced9d780ded28d968982b25875113716046Xavier Ducrohet    <!-- called through target 'release'. Only executed if there's no
10614737bced9d780ded28d968982b25875113716046Xavier Ducrohet         keystore/key alias set -->
10624737bced9d780ded28d968982b25875113716046Xavier Ducrohet    <target name="-release-nosign" unless="has.keystore">
1063babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- no release builds for library project -->
1064babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <do-only-if-not-library elseText="" >
1065babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <sequential>
10665c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">No key.store and key.alias properties found in build.properties.</echo>
10675c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">Please sign ${out.packaged.file} manually</echo>
10685c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">and run zipalign from the Android SDK tools.</echo>
1069babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </sequential>
1070babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-not-library>
1071a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet        <record-build-info />
10720fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
10730fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1074df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet    <target name="-release-obfuscation-check">
10755c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet        <echo level="info">proguard.config is ${proguard.config}</echo>
1076df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet        <condition property="proguard.enabled" value="true" else="false">
1077e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet            <and>
1078babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <isset property="build.is.mode.release" />
1079e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet                <isset property="proguard.config" />
1080e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet            </and>
1081df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet        </condition>
1082a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet        <if condition="${proguard.enabled}">
1083a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet            <then>
10845c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">Proguard.config is enabled</echo>
1085a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                <!-- Secondary dx input (jar files) is empty since all the
1086a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                     jar files will be in the obfuscated jar -->
1087a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet                <path id="out.dex.jar.input.ref" />
1088a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet            </then>
1089a6324a21d1912144ed4e468ab5e127169992ab6eXavier Ducrohet        </if>
1090df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet    </target>
1091df70e0290f9634aa0431917c59912607bb15313aXavier Ducrohet
10923b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    <target name="-set-release-mode" depends="-set-mode-check">
1093babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="out.packaged.file" location="${out.absolute.dir}/${ant.project.name}-release-unsigned.apk" />
1094babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="out.final.file" location="${out.absolute.dir}/${ant.project.name}-release.apk" />
1095e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet        <property name="build.is.mode.set" value="true" />
1096babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1097babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- record the current build target -->
1098babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="build.target" value="release" />
1099babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1100babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="build.is.instrumented" value="false" />
1101babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1102e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet        <!-- release mode is only valid if the manifest does not explicitly
1103babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet             set debuggable to true. default is false. -->
1104dedd7eacb4e82ff09cc00516ad4ab5edd9f9bab5Xavier Ducrohet        <xpath input="${manifest.abs.file}" expression="/manifest/application/@android:debuggable"
1105babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                output="build.is.packaging.debug" default="false"/>
11065af43ecb4e1621cb55cdda4074c11cd9009ae2b2Xavier Ducrohet
1107e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet        <!-- signing mode: release -->
1108babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="build.is.signing.debug" value="false" />
1109e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet
11104987af409c704c881be83f9a90b98ce7658e1c46Matt Kopec        <!-- Renderscript optimization level: aggressive -->
11112d15c4298980be69c68c1a7d3a8bf264e7094469Xavier Ducrohet        <property name="renderscript.opt.level" value="${renderscript.release.opt.level}" />
11124987af409c704c881be83f9a90b98ce7658e1c46Matt Kopec
1113babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <if condition="${build.is.packaging.debug}">
1114e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet            <then>
1115e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet                <echo>*************************************************</echo>
1116e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet                <echo>****  Android Manifest has debuggable=true   ****</echo>
1117e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet                <echo>**** Doing DEBUG packaging with RELEASE keys ****</echo>
1118e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet                <echo>*************************************************</echo>
1119e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet            </then>
1120e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet            <else>
1121e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet                <!-- property only set in release mode.
1122e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet                     Useful for if/unless attributes in target node
1123e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet                     when using Ant before 1.8 -->
1124babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <property name="build.is.mode.release" value="true"/>
1125e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet            </else>
1126e0df3f1e3dd9e5cfc63750748a220ef14893e9f4Xavier Ducrohet        </if>
11277a12704dcdebc28cd728f2b2ebc9e8115b9c6985Xavier Ducrohet    </target>
11287a12704dcdebc28cd728f2b2ebc9e8115b9c6985Xavier Ducrohet
112963bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet    <target name="-release-sign" if="has.keystore" >
1130babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- only create apk if *not* a library project -->
1131babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <do-only-if-not-library elseText="Library project: do not create apk..." >
1132babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <sequential>
1133babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-release-unaligned.apk" />
1134babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1135babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <!-- Signs the APK -->
11365c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">Signing final apk...</echo>
11371cb06d5bc82268dc5c684aa2ee7415175ce14c7eXavier Ducrohet                <signapk
11381cb06d5bc82268dc5c684aa2ee7415175ce14c7eXavier Ducrohet                        input="${out.packaged.file}"
11391cb06d5bc82268dc5c684aa2ee7415175ce14c7eXavier Ducrohet                        output="${out.unaligned.file}"
1140babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        keystore="${key.store}"
1141babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        storepass="${key.store.password}"
1142babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        alias="${key.alias}"
11431cb06d5bc82268dc5c684aa2ee7415175ce14c7eXavier Ducrohet                        keypass="${key.alias.password}"/>
1144babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1145babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <!-- Zip aligns the APK -->
114663bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet                <zipalign-helper
114763bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet                        in.package="${out.unaligned.file}"
114863bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet                        out.package="${out.final.file}" />
11495c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">Release Package: ${out.final.file}</echo>
1150babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </sequential>
1151babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-not-library>
1152a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet        <record-build-info />
11530fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
11540fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
115563bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet    <!-- This runs -package-release and -release-nosign first and then runs
115663bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet         only if release-sign is true (set in -release-check,
115763bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet         called by -release-no-sign)-->
115863bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet    <target name="release"
115963bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet                depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"
116063bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet                description="Builds the application in release mode.">
116163bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet    </target>
116263bf713092680bc30c55ae5c62bd4200e3fef3e1Xavier Ducrohet
1163e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1164e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ************ Instrumented specific targets ************ -->
1165e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1166babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1167babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- These targets are specific for the project under test when it
1168babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         gets compiled by the test projects in a way that will make it
1169babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet         support emma code coverage -->
1170babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
11713b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    <target name="-set-instrumented-mode" depends="-set-mode-check">
1172babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="out.packaged.file" location="${out.absolute.dir}/${ant.project.name}-instrumented-unaligned.apk" />
1173babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="out.final.file" location="${out.absolute.dir}/${ant.project.name}-instrumented.apk" />
1174e9fddda9eac133603d011265379fdceecebb4168Xavier Ducrohet        <property name="build.is.mode.set" value="true" />
11750fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1176babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- whether the build is an instrumented build. -->
1177babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="build.is.instrumented" value="true" />
11780fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
11790fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1180babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Builds instrumented output package -->
11813b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    <target name="instrument" depends="-set-instrumented-mode, -do-debug"
1182babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                description="Builds an instrumented packaged.">
1183babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- only create apk if *not* a library project -->
1184babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <do-only-if-not-library elseText="Library project: do not create apk..." >
1185babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <sequential>
1186babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <zipalign-helper in.package="${out.packaged.file}" out.package="${out.final.file}" />
11875c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">Instrumented Package: ${out.final.file}</echo>
1188babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </sequential>
1189babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-not-library>
1190a9a28238f7b20d7c0a05c95afad02fcdb34e0d0eXavier Ducrohet        <record-build-info />
11910fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
11920fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1193e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1194e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ************ Test project specific targets ************ -->
1195e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1196babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1197babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- enable code coverage -->
1198babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="emma">
1199babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="emma.enabled" value="true" />
12000fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
12010fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1202babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- fails if the project is not a test project -->
12031daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    <target name="-test-project-check" depends="-setup">
1204babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <if>
1205babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <condition>
12061daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <and>
12071daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <isfalse value="${project.is.test}" />
12081daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <isfalse value="${project.is.testapp}" />
12091daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                </and>
1210babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </condition>
12111daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <then>
1212babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <fail message="Project is not a test project." />
12131daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            </then>
1214babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </if>
12150fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
12160fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1217babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="test" depends="-test-project-check"
1218babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                description="Runs tests from the package defined in test.package property">
1219babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="test.runner" value="android.test.InstrumentationTestRunner" />
1220babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
12211daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <if condition="${project.is.test}">
12221daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <then>
12231daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <property name="tested.project.absolute.dir" location="${tested.project.dir}" />
12241daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet
12251daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <!-- Application package of the tested project extracted from its manifest file -->
12261daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <xpath input="${tested.project.absolute.dir}/AndroidManifest.xml"
12271daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    expression="/manifest/@package" output="tested.project.app.package" />
1228fcb82e3185d657e3b5440295478cdc58afd168c3Xavier Ducrohet
1229aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet            <if condition="${emma.enabled}">
1230aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                <then>
1231aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                    <getprojectpaths projectPath="${tested.project.absolute.dir}"
1232aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                            binOut="tested.project.out.absolute.dir"
1233aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                            srcOut="tested.project.source.absolute.dir" />
1234a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet
1235a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                    <getlibpath projectPath="${tested.project.absolute.dir}"
1236a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                            libraryFolderPathOut="tested.project.lib.source.path"
1237a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                            leaf="@{source.dir}" />
1238a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet
1239aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                </then>
1240aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet            </if>
1241aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet
12421daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        </then>
12431daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <else>
12441daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <!-- this is a test app, the tested package is the app's own package -->
12451daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet            <property name="tested.project.app.package" value="${project.app.package}" />
1246aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet
1247aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet            <if condition="${emma.enabled}">
1248aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                <then>
1249aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                    <property name="tested.project.out.absolute.dir" value="${out.absolute.dir}" />
1250aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                    <property name="tested.project.source.absolute.dir" value="${source.absolute.dir}" />
1251a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet
1252a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                    <getlibpath
1253a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                            libraryFolderPathOut="tested.project.lib.source.path"
1254a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                            leaf="@{source.dir}" />
1255a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet
1256aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet                </then>
1257aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet            </if>
1258aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet
12591daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        </else>
12601daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        </if>
1261babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1262babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <property name="emma.dump.file"
12631daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                value="/data/data/${tested.project.app.package}/coverage.ec" />
1264babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1265babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <if condition="${emma.enabled}">
1266babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <then>
12677d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                <echo>Running tests...</echo>
1268babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <run-tests-helper emma.enabled="true">
1269babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <extra-instrument-args>
1270babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <arg value="-e" />
1271babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                           <arg value="coverageFile" />
1272babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                           <arg value="${emma.dump.file}" />
1273babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </extra-instrument-args>
1274babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </run-tests-helper>
12757d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet
127627d70582a8ce7358bf826df247777a539722bf30Tor Norbye                <echo level="info">Setting permission to download the coverage file...</echo>
12777d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                <exec executable="${adb}" failonerror="true">
12787d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                    <arg line="${adb.device.arg}" />
12797d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                    <arg value="shell" />
12807d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                    <arg value="run-as" />
12817d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                    <arg value="${tested.project.app.package}" />
12827d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                    <arg value="chmod" />
12837d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                    <arg value="644" />
12847d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                    <arg value="${emma.dump.file}" />
12857d87c565a7a9e3fe9b11eead657638c0fc7eae4fXavier Ducrohet                </exec>
12865c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">Downloading coverage file into project directory...</echo>
1287babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <exec executable="${adb}" failonerror="true">
1288babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <arg line="${adb.device.arg}" />
1289babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <arg value="pull" />
1290babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <arg value="${emma.dump.file}" />
1291a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                    <arg path="${out.absolute.dir}/coverage.ec" />
1292babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </exec>
1293aaeb6a3d58ce5dccc91360bb429b5e37af650619Xavier Ducrohet
1294a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                <pathconvert property="tested.project.lib.source.path.value" refid="tested.project.lib.source.path">
1295a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                    <firstmatchmapper>
1296a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                        <regexpmapper from='^([^ ]*)( .*)$$' to='"\1\2"'/>
1297a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                        <identitymapper/>
1298a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                    </firstmatchmapper>
1299a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                </pathconvert>
1300a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet
1301de9ff2f914971b955bad1cef5d855e2227143757Xavier Ducrohet                <echo level="info">Extracting coverage report...</echo>
1302babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <emma>
130398ee061abe1ff0343901fbfe24684e3b64fc99a5Kenny Root                    <property name="report.html.out.encoding" value="UTF-8" />
1304a12a01f80d45941967b99a537a11fd4b98eed23cXavier Ducrohet                    <report sourcepath="${tested.project.source.absolute.dir}:${tested.project.lib.source.path.value}"
1305fcb82e3185d657e3b5440295478cdc58afd168c3Xavier Ducrohet                            verbosity="${verbosity}">
1306babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <!-- TODO: report.dir or something like should be introduced if necessary -->
1307fcb82e3185d657e3b5440295478cdc58afd168c3Xavier Ducrohet                        <infileset file="${out.absolute.dir}/coverage.ec" />
1308fcb82e3185d657e3b5440295478cdc58afd168c3Xavier Ducrohet                        <infileset file="${tested.project.out.absolute.dir}/coverage.em" />
1309babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <!-- TODO: reports in other, indicated by user formats -->
1310fcb82e3185d657e3b5440295478cdc58afd168c3Xavier Ducrohet                        <html outfile="${out.absolute.dir}/coverage.html" />
1311f5328e232f808eaca7bc594db40bd647f631d23eKenny Root                        <txt outfile="${out.absolute.dir}/coverage.txt" />
1312f5328e232f808eaca7bc594db40bd647f631d23eKenny Root                        <xml outfile="${out.absolute.dir}/coverage.xml" />
1313babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                   </report>
1314babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </emma>
13155c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <echo level="info">Cleaning up temporary files...</echo>
1316748baf7722e5de113979f76eeeece70481ef503eXavier Ducrohet                <delete file="${out.absolute.dir}/coverage.ec" />
1317f5328e232f808eaca7bc594db40bd647f631d23eKenny Root                <delete file="${tested.project.out.absolute.dir}/coverage.em" />
1318de9ff2f914971b955bad1cef5d855e2227143757Xavier Ducrohet                <exec executable="${adb}" failonerror="true">
1319de9ff2f914971b955bad1cef5d855e2227143757Xavier Ducrohet                    <arg line="${adb.device.arg}" />
1320de9ff2f914971b955bad1cef5d855e2227143757Xavier Ducrohet                    <arg value="shell" />
1321de9ff2f914971b955bad1cef5d855e2227143757Xavier Ducrohet                    <arg value="run-as" />
1322de9ff2f914971b955bad1cef5d855e2227143757Xavier Ducrohet                    <arg value="${tested.project.app.package}" />
1323de9ff2f914971b955bad1cef5d855e2227143757Xavier Ducrohet                    <arg value="rm" />
1324de9ff2f914971b955bad1cef5d855e2227143757Xavier Ducrohet                    <arg value="${emma.dump.file}" />
1325de9ff2f914971b955bad1cef5d855e2227143757Xavier Ducrohet                </exec>
1326f5328e232f808eaca7bc594db40bd647f631d23eKenny Root                <echo level="info">Saving the coverage reports in ${out.absolute.dir}</echo>
1327babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </then>
1328babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <else>
1329babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <run-tests-helper />
1330babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </else>
1331babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </if>
13320fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
13330fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1334a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye    <!-- ******************************************************* -->
1335a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye    <!-- **********        Run Lint on the project     ********* -->
1336a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye    <!-- ******************************************************* -->
1337a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye
1338a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye    <target name="lint"
1339a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye            description="Runs lint on the project to look for potential bugs" >
1340a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye        <lint executable="${lint}"
1341a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye              html="${lint.out.html}"
1342ee4780f1de04e7c87b3fe172a4b1510bd4c7e9bfTor Norbye              xml="${lint.out.xml}"
1343ee4780f1de04e7c87b3fe172a4b1510bd4c7e9bfTor Norbye              src="${source.absolute.dir}:${gen.absolute.dir}"
1344ee4780f1de04e7c87b3fe172a4b1510bd4c7e9bfTor Norbye              classpath="${out.classes.absolute.dir}" />
1345a55067435f57c7a25f416ecde509d790a5e0799eTor Norbye    </target>
1346babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1347e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1348e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ********** Install/uninstall specific targets ********* -->
1349e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1350babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1351babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="install"
1352babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                description="Installs the newly build package. Must be used in conjunction with a build target
1353babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            (debug/release/instrument). If the application was previously installed, the application
1354babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            is reinstalled if the signature matches." >
1355babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <!-- only do install if *not* a library project -->
1356babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <do-only-if-not-library elseText="Library project: nothing to install!" >
1357babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <if>
1358babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <condition>
1359babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <isset property="out.final.file" />
1360babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </condition>
1361babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <then>
1362babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <if>
1363babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <condition>
1364babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            <resourceexists>
1365babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                                <file file="${out.final.file}"/>
1366babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            </resourceexists>
1367e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet                        </condition>
1368babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <then>
13695c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                            <echo level="info">Installing ${out.final.file} onto default emulator or device...</echo>
1370babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            <exec executable="${adb}" failonerror="true">
1371babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                                <arg line="${adb.device.arg}" />
1372babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                                <arg value="install" />
1373babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                                <arg value="-r" />
1374babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                                <arg path="${out.final.file}" />
1375babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                            </exec>
1376fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet
1377fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                            <!-- now install the tested project if applicable -->
1378fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                            <!-- can't use project.is.test since the setup target might not have run -->
1379fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                            <if>
1380fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                <condition>
13816451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                                    <and>
13826451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                                        <isset property="tested.project.dir" />
13836451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                                        <not>
13846451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                                            <isset property="dont.do.deps" />
13856451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                                        </not>
13866451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                                    </and>
1387fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                </condition>
1388fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                <then>
1389fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                    <property name="tested.project.absolute.dir" location="${tested.project.dir}" />
1390fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet
1391fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                    <!-- figure out which tested package to install based on emma.enabled -->
1392fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                    <condition property="tested.project.install.target" value="installi" else="installd">
1393fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                        <isset property="emma.enabled" />
1394fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                    </condition>
1395fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                    <subant target="${tested.project.install.target}" failonerror="true">
1396fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                        <fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
1397fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                    </subant>
1398fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                                </then>
1399fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                            </if>
1400babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        </then>
1401babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        <else>
1402fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet                            <fail message="File ${out.final.file} does not exist." />
1403babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                        </else>
1404babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </if>
1405babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </then>
1406babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <else>
1407babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>Install file not specified.</echo>
1408babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo></echo>
1409babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>'ant install' now requires the build target to be specified as well.</echo>
1410babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo></echo>
1411babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo></echo>
1412babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>    ant debug install</echo>
1413babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>    ant release install</echo>
1414babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>    ant instrument install</echo>
1415babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>This will build the given package and install it.</echo>
1416babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo></echo>
1417babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>Alternatively, you can use</echo>
1418babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>    ant installd</echo>
1419babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>    ant installr</echo>
1420babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>    ant installi</echo>
1421babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>    ant installt</echo>
1422babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <echo>to only install an existing package (this will not rebuild the package.)</echo>
1423babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <fail />
1424babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </else>
1425babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </if>
1426babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </do-only-if-not-library>
14270fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
14280fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
14293b5a006ce53d82ab324af836c3abeacc0a77acc1Xavier Ducrohet    <target name="installd" depends="-set-debug-files, install"
1430babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            description="Installs (only) the debug package." />
1431babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="installr" depends="-set-release-mode, install"
1432babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            description="Installs (only) the release package." />
1433babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <target name="installi" depends="-set-instrumented-mode, install"
1434babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            description="Installs (only) the instrumented package." />
1435fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet    <target name="installt" depends="-test-project-check, installd"
1436babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            description="Installs (only) the test and tested packages." />
1437babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1438babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1439babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet    <!-- Uninstalls the package from the default emulator/device -->
14401daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet    <target name="uninstall" depends="-setup"
1441babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                description="Uninstalls the application from a running emulator or device.">
1442babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <if>
1443babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <condition>
14441daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <isset property="project.app.package" />
1445babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </condition>
1446babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <then>
14471daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                <uninstall-helper app.package="${project.app.package}" />
1448babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </then>
1449babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <else>
14505c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                <fail message="Could not find application package in manifest. Cannot run 'adb uninstall'." />
1451babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </else>
1452babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </if>
1453babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1454fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet        <!-- Now uninstall the tested project, if applicable -->
1455fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet        <if>
1456fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet            <condition>
14576451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                <and>
14581daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    <istrue value="${project.is.test}" />
14596451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                    <not>
14606451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                        <isset property="dont.do.deps" />
14616451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                    </not>
14626451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet                </and>
1463fb1f0942dc96d0bb2ef1b8a44458f377834b35e5Xavier Ducrohet            </condition>
1464babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            <then>
1465babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <property name="tested.project.absolute.dir" location="${tested.project.dir}" />
1466babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
1467babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <!-- Application package of the tested project extracted from its manifest file -->
1468babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <xpath input="${tested.project.absolute.dir}/AndroidManifest.xml"
14691daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                    expression="/manifest/@package" output="tested.project.app.package" />
1470babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                <if>
1471babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <condition>
14721daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        <isset property="tested.project.app.package" />
1473babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </condition>
1474babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <then>
14751daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet                        <uninstall-helper app.package="${tested.project.app.package}" />
1476babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </then>
1477babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    <else>
14785c9a5e6bd586c7b7c4e1e3b9f408663d35a850ebXavier Ducrohet                        <fail message="Could not find tested application package in manifest. Cannot run 'adb uninstall'." />
1479babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                    </else>
1480babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet                </if>
1481babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet            </then>
1482babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        </if>
1483babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet
14840fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
14850fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
14860fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet
1487e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1488e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ************************* Help ************************ -->
1489e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet    <!-- ******************************************************* -->
1490e162064a7b5db1eecec34271bc7e2a4296181ea6Xavier Ducrohet
14910fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    <target name="help">
14920fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <!-- displays starts at col 13
14930fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet              |13                                                              80| -->
14940fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <echo>Android Ant Build. Available targets:</echo>
14950fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <echo>   help:      Displays this help.</echo>
14960fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <echo>   clean:     Removes output files created by other targets.</echo>
1497a9cd63f7da4ce0343566535c03355460bb037a50Xavier Ducrohet        <echo>              This calls the same target on all dependent projects.</echo>
1498a9cd63f7da4ce0343566535c03355460bb037a50Xavier Ducrohet        <echo>              Use 'ant nodeps clean' to only clean the local project</echo>
14990fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <echo>   debug:     Builds the application and signs it with a debug key.</echo>
1500b29886ed1a08c2d900ffb5fe4789db3701584d6dXavier Ducrohet        <echo>              The 'nodeps' target can be used to only build the</echo>
1501def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet        <echo>              current project and ignore the libraries using:</echo>
1502b29886ed1a08c2d900ffb5fe4789db3701584d6dXavier Ducrohet        <echo>              'ant nodeps debug'</echo>
15030fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <echo>   release:   Builds the application. The generated apk file must be</echo>
15040fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <echo>              signed before it is published.</echo>
1505b29886ed1a08c2d900ffb5fe4789db3701584d6dXavier Ducrohet        <echo>              The 'nodeps' target can be used to only build the</echo>
1506def6f0d2e24d6dd96d6265fcf05fd9a1e10c789cXavier Ducrohet        <echo>              current project and ignore the libraries using:</echo>
1507b29886ed1a08c2d900ffb5fe4789db3701584d6dXavier Ducrohet        <echo>              'ant nodeps release'</echo>
1508babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>   instrument:Builds an instrumented package and signs it with a</echo>
1509babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>              debug key.</echo>
1510babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>   test:      Runs the tests. Project must be a test project and</echo>
1511babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>              must have been built. Typical usage would be:</echo>
15121daa8f999d87443d14f698ca8ccc103e3309fa3eXavier Ducrohet        <echo>                  ant [emma] debug install test</echo>
1513babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>   emma:      Transiently enables code coverage for subsequent</echo>
1514babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>              targets.</echo>
1515babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>   install:   Installs the newly build package. Must either be used</echo>
1516babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>              in conjunction with a build target (debug/release/</echo>
1517babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>              instrument) or with the proper suffix indicating</echo>
1518babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>              which package to install (see below).</echo>
15190fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <echo>              If the application was previously installed, the</echo>
1520babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>              application is reinstalled if the signature matches.</echo>
1521babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>   installd:  Installs (only) the debug package.</echo>
1522babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>   installr:  Installs (only) the release package.</echo>
1523babf25ca7162849f0145f75be1b6c09b359b122cXavier Ducrohet        <echo>   installi:  Installs (only) the instrumented package.</echo>
15246451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet        <echo>   installt:  Installs (only) the test and tested packages (unless</echo>
15256451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet        <echo>              nodeps is used as well.</echo>
15260fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet        <echo>   uninstall: Uninstalls the application from a running emulator or</echo>
15276451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet        <echo>              device. Also uninstall tested package if applicable</echo>
15286451786c0308ff01e8290eaeb874d0c9650949ecXavier Ducrohet        <echo>              unless 'nodeps' is used as well.</echo>
15290fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet    </target>
15300fd2efc6912586032d5dbe6d5c63e242cf65a31aXavier Ducrohet</project>
1531