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