diff options
| author | Piotr Gurgul <pgurgul@google.com> | 2009-09-14 20:42:13 -0700 |
|---|---|---|
| committer | Piotr Gurgul <pgurgul@google.com> | 2009-09-15 14:55:32 -0700 |
| commit | 05bf40edec1e294fc6c559aee6b41047a55768eb (patch) | |
| tree | c182c5d953d28a6dcaeff915b95786ac3a061991 /tools/scripts | |
| parent | 973def409f419f673a7a3a34ecf6fcc07531338f (diff) | |
| download | android_development-05bf40edec1e294fc6c559aee6b41047a55768eb.tar.gz android_development-05bf40edec1e294fc6c559aee6b41047a55768eb.tar.bz2 android_development-05bf40edec1e294fc6c559aee6b41047a55768eb.zip | |
Reorganize android_rules and android_test_rules
Instrumentation-related targets have been moved from android_test_rules to
android_rules for better consistency. Chain of target dependencies has
been modified in order to make it more natural.
Diffstat (limited to 'tools/scripts')
| -rw-r--r-- | tools/scripts/android_rules.xml | 223 | ||||
| -rw-r--r-- | tools/scripts/android_test_rules.xml | 90 |
2 files changed, 175 insertions, 138 deletions
diff --git a/tools/scripts/android_rules.xml b/tools/scripts/android_rules.xml index bdb983493..2d8020dfc 100644 --- a/tools/scripts/android_rules.xml +++ b/tools/scripts/android_rules.xml @@ -40,11 +40,6 @@ <property name="external.libs.dir" value="libs" /> <property name="external.libs.absolute.dir" location="${external.libs.dir}" /> - <!-- In this file it is just alias for external.libs.absolute.dir. It is used for - reusability though, when calling ant targets in this file from other files. - However, it is a temporary solution. --> - <property name="external.jars" location="${external.libs.absolute.dir}" /> - <!-- Directory for the native libraries --> <property name="native.libs.dir" value="libs" /> <property name="native.libs.absolute.dir" location="${native.libs.dir}" /> @@ -52,7 +47,7 @@ <!-- Output directories --> <property name="out.dir" value="bin" /> <property name="out.absolute.dir" location="${out.dir}" /> - <property name="out.classes.dir" value="${out.dir}/classes" /> + <property name="out.classes.dir" value="${out.absolute.dir}/classes" /> <property name="out.classes.absolute.dir" location="${out.classes.dir}" /> <!-- Intermediate files --> @@ -62,17 +57,102 @@ <!-- The final package file to generate --> <property name="out.debug.unaligned.package" location="${out.absolute.dir}/${ant.project.name}-debug-unaligned.apk" /> - <property name="out.debug.package" location="${out.absolute.dir}/${ant.project.name}-debug.apk" /> - <property name="out.unsigned.package" location="${out.absolute.dir}/${ant.project.name}-unsigned.apk" /> + <property name="out.debug.package" + location="${out.absolute.dir}/${ant.project.name}-debug.apk" /> + <property name="out.unsigned.package" + location="${out.absolute.dir}/${ant.project.name}-unsigned.apk" /> <property name="out.unaligned.package" location="${out.absolute.dir}/${ant.project.name}-unaligned.apk" /> - <property name="out.release.package" location="${out.absolute.dir}/${ant.project.name}-release.apk" /> + <property name="out.release.package" + location="${out.absolute.dir}/${ant.project.name}-release.apk" /> <!-- Tools --> <condition property="exe" value=".exe" else=""><os family="windows" /></condition> <property name="adb" location="${android.tools.dir}/adb${exe}" /> <property name="zipalign" location="${android.tools.dir}/zipalign${exe}" /> + <!-- Emma configuration --> + <property name="emma.dir" value="${sdk.dir}/tools/lib" /> + <path id="emma.lib"> + <pathelement location="${emma.dir}/emma.jar" /> + <pathelement location="${emma.dir}/emma_ant.jar" /> + </path> + <taskdef resource="emma_ant.properties" classpathref="emma.lib" /> + <!-- End of emma configuration --> + + <!-- Macros --> + + <!-- Configurable macro, which allows to pass as parameters output directory, + output dex filename and external libraries to dex (optional) --> + <macrodef name="dex-helper"> + <element name="external-libs" optional="yes" /> + <sequential> + <echo>Converting compiled files and external libraries into ${intermediate.dex.file}... + </echo> + <apply executable="${dx}" failonerror="true" parallel="true"> + <arg value="--dex" /> + <arg value="--output=${intermediate.dex.file}" /> + <arg path="${out.classes.absolute.dir}" /> + <fileset dir="${external.libs.absolute.dir}" includes="*.jar" /> + <external-libs /> + </apply> + </sequential> + </macrodef> + + <!-- This is macro that enable passing variable list of external jar files to ApkBuilder + Example of use: + <package-helper> + <extra-jars> + <jarfolder path="my_jars" /> + <jarfile path="foo/bar.jar" /> + <jarfolder path="your_jars" /> + </extra-jars> + </package-helper> --> + <macrodef name="package-helper"> + <element name="extra-jars" optional="yes" /> + <sequential> + <apkbuilder + outfolder="${out.absolute.dir}" + basename="${ant.project.name}" + signed="${sign.package}" + verbose="true"> + <file path="${intermediate.dex.file}" /> + <sourcefolder path="${source.absolute.dir}" /> + <nativefolder path="${native.libs.absolute.dir}" /> + <jarfolder path="${external.libs.absolute.dir}" /> + <extra-jars/> + </apkbuilder> + </sequential> + </macrodef> + + <!-- This is macro used only for sharing code among two targets, -debug and + -debug-with-emma which do exactly the same but differ in dependencies --> + <macrodef name="debug-helper"> + <sequential> + <echo>Running zip align on final apk...</echo> + <exec executable="${zipalign}" failonerror="true"> + <arg value="-f" /> + <arg value="4" /> + <arg path="${out.debug.unaligned.package}" /> + <arg path="${out.debug.package}" /> + </exec> + <echo>Debug Package: ${out.debug.package}</echo> + </sequential> + </macrodef> + + <!-- This is macro used only for sharing code among two targets, -install and + -install-with-emma which do exactly the same but differ in dependencies --> + <macrodef name="install-helper"> + <sequential> + <echo>Installing ${out.debug.package} onto default emulator or device...</echo> + <exec executable="${adb}" failonerror="true"> + <arg value="install" /> + <arg value="-r" /> + <arg path="${out.debug.package}" /> + </exec> + </sequential> + </macrodef> + <!-- Rules --> <!-- Creates the output directories if they don't exist yet. --> @@ -134,32 +214,9 @@ </javac> </target> - <!-- Configurable macro, which allows to pass as parameters output directory, - output dex filename and external libraries to dex (optional) --> - <macrodef name="dex-helper"> - <attribute name="out.absolute.dir" /> - <attribute name="out.dex.file" /> - <element name="external-libs" optional="yes" /> - <sequential> - <echo>Converting compiled files and external libraries into @{out.dex.file}...</echo> - <apply executable="${dx}" failonerror="true" parallel="true"> - <arg value="--dex" /> - <arg value="--output=@{out.dex.file}" /> - <arg path="@{out.absolute.dir}" /> - <external-libs /> - </apply> - </sequential> - </macrodef> - <!-- Converts this project's .class files into .dex files --> <target name="-dex" depends="compile"> - <dex-helper out.absolute.dir="${out.absolute.dir}/classes" - out.dex.file="${intermediate.dex.file}"> - <external-libs> - <!-- Temporary solution, before <jarfile> in <apkbuilder> is ready --> - <fileset dir="${external.jars}" includes="*.jar" /> - </external-libs> - </dex-helper> + <dex-helper /> </target> <!-- Puts the project's resources into the output package file @@ -181,17 +238,8 @@ <!-- Packages the application and (maybe) sign it with a debug key. This requires the property sign.package to be set to true or false. --> - <target name="-package"> - <apkbuilder - outfolder="${out.absolute.dir}" - basename="${ant.project.name}" - signed="${sign.package}" - verbose="true"> - <file path="${intermediate.dex.file}" /> - <sourcefolder path="${source.absolute.dir}" /> - <jarfolder path="${external.jars}" /> - <nativefolder path="${native.libs.absolute.dir}" /> - </apkbuilder> + <target name="-package" depends="-dex, -package-resources"> + <package-helper /> </target> <target name="-no-sign"> @@ -203,21 +251,12 @@ </target> <!-- Builds debug output package, provided all the necessary files are already dexed --> - <target name="-debug-no-dex" depends="-package-resources, -debug-sign, -package"> - <echo>Running zip align on final apk...</echo> - <exec executable="${zipalign}" failonerror="true"> - <arg value="-f" /> - <arg value="4" /> - <arg path="${out.debug.unaligned.package}" /> - <arg path="${out.debug.package}" /> - </exec> - <echo>Debug Package: ${out.debug.package}</echo> + <target name="debug" depends="-debug-sign, -package" + description="Builds the application and signs it with a debug key."> + <debug-helper /> </target> - <target name="debug" depends="-dex, -debug-no-dex" - description="Builds the application and signs it with a debug key." /> - - <target name="-release-package" depends="-dex, -package-resources, -no-sign, -package" /> + <target name="-release-package" depends="-no-sign, -package" /> <target name="-release-check"> <condition property="release.sign"> @@ -234,7 +273,7 @@ <echo>and run zipalign from the Android SDK tools.</echo> </target> - <target name="release" depends="-release-package, -release-nosign" if="release-sign" + <target name="release" depends="-release-package, -release-nosign" if="release.sign" description="Builds the application. The generated apk file must be signed before it is published."> <!-- Gets passwords --> @@ -266,22 +305,12 @@ <echo>Release Package: ${out.release.package}</echo> </target> - <!-- Installs the package on the default emulator/device --> - <target name="-install-no-deps"> - <echo>Installing ${out.debug.package} onto default emulator or device...</echo> - <exec executable="${adb}" failonerror="true"> - <arg value="install" /> - <arg value="-r" /> - <arg path="${out.debug.package}" /> - </exec> - </target> - - <target name="install" depends="debug, -install-no-deps" + <target name="install" depends="debug" description="Installs/reinstalls the debug package onto a running emulator or device. If the application was previously installed, - the signatures must match." /> - - <target name="-install-no-dex" depends="-debug-no-dex, -install-no-deps" /> + the signatures must match." > + <install-helper /> + </target> <target name="-uninstall-check"> <condition property="uninstall.run"> @@ -290,8 +319,7 @@ </target> <target name="-uninstall-error" depends="-uninstall-check" unless="uninstall.run"> - <echo> - Unable to run 'ant uninstall', application.package is not defined in build.properties + <echo>Unable to run 'ant uninstall', application.package is not defined in build.properties </echo> </target> @@ -310,6 +338,53 @@ <delete dir="${gen.absolute.dir}" /> </target> + <!-- Targets for code-coverage measurement purposes, invoked from external file --> + + <!-- Emma-instruments tested project classes (compiles the tested project if necessary) + and writes instrumented classes to ${instrumentation.absolute.dir}/classes --> + <target name="-emma-instrument" depends="compile"> + <echo>Instrumenting classes from ${out.absolute.dir}/classes...</echo> + <!-- It only instruments class files, not any external libs --> + <emma enabled="true"> + <instr verbosity="verbose" + mode="overwrite" + instrpath="${out.absolute.dir}/classes" + outdir="${out.absolute.dir}/classes"> + </instr> + <!-- TODO: exclusion filters on R*.class and allowing custom exclusion from + user defined file --> + </emma> + </target> + + <target name="-dex-instrumented" depends="-emma-instrument"> + <dex-helper> + <external-libs> + <fileset file="${emma.dir}/emma_device.jar" /> + </external-libs> + </dex-helper> + </target> + + <!-- Invoked from external files for code coverage purposes --> + <target name="-package-with-emma" depends="-dex-instrumented, -package-resources"> + <package-helper> + <extra-jars> + <!-- Injected from external file --> + <jarfile path="${emma.dir}/emma_device.jar" /> + </extra-jars> + </package-helper> + </target> + + <target name="-debug-with-emma" + depends="-debug-sign, -package-with-emma"> + <debug-helper /> + </target> + + <target name="-install-with-emma" depends="-debug-with-emma"> + <install-helper /> + </target> + + <!-- End of targets for code-coverage measurement purposes --> + <target name="help"> <!-- displays starts at col 13 |13 80| --> diff --git a/tools/scripts/android_test_rules.xml b/tools/scripts/android_test_rules.xml index dbad32dc1..15215800c 100644 --- a/tools/scripts/android_test_rules.xml +++ b/tools/scripts/android_test_rules.xml @@ -3,77 +3,17 @@ <import file="android_rules.xml" /> - <!-- Existence of this property in build.properties or build.xml is an assertion for the test - project - <property name="tested.project.dir" value=".." /> --> <property name="tested.project.absolute.dir" location="${tested.project.dir}" /> - <property name="instrumentation.dir" value="instru" /> + <property name="instrumentation.dir" value="instrumented" /> <property name="instrumentation.absolute.dir" location="${instrumentation.dir}" /> <property name="test.runner" value="android.test.InstrumentationTestRunner" /> <property name="application.package.to.instrument" value="${application.package}.tests" /> - <!-- Enables adding tested project classes location to test project classpath --> - <property name="extensible.classpath" value="${tested.project.absolute.dir}/bin/classes" /> - <!-- TODO: make it more configurable in the next CL's - now it is default for auto-generated project --> <property name="emma.dump.file" value="/data/data/${application.package}/files/coverage.ec" /> - <!-- Emma configuration --> - <property name="emma.dir" value="${sdk.dir}/tools/lib" /> - <path id="emma.lib"> - <pathelement location="${emma.dir}/emma.jar" /> - <pathelement location="${emma.dir}/emma_ant.jar" /> - </path> - <taskdef resource="emma_ant.properties" classpathref="emma.lib" /> - <!-- End of emma configuration --> - - <!-- Runs 'compile' target for tested project --> - <target name="-compile-tested-project"> - <subant target="compile"> - <fileset dir="${tested.project.absolute.dir}" includes="build.xml" /> - </subant> - </target> - - <!-- Emma-instruments tested project classes (compiles the tested project if necessary) - and writes instrumented classes to ${instrumentation.absolute.dir}/classes --> - <target name="-emma-instrument" depends="-compile-tested-project"> - <echo>Instrumenting classes from ${instrumentation.dir}/${out.dir}/classes...</echo> - <!-- It only instruments class files, not any external libs --> - <emma enabled="true"> - <instr verbosity="verbose" - mode="copy" - instrpath="${tested.project.absolute.dir}/${out.dir}/classes" - outdir="${instrumentation.absolute.dir}/classes"> - </instr> - <!-- TODO: exclusion filters on R*.class and allowing custom exclusion from - user defined file --> - </emma> - </target> - - <!-- Dexes emma-instrumented classes --> - <target name="-dex-instrumented" depends="-emma-instrument"> - <dex-helper out.absolute.dir="${instrumentation.absolute.dir}/classes" - out.dex.file="${instrumentation.absolute.dir}/${dex.file.name}"> - <external-libs> - <fileset dir="${external.libs.dir}" includes="*.jar" /> - <fileset dir="${emma.dir}"> - <include name="emma_device.jar" /> - </fileset> - </external-libs> - </dex-helper> - </target> - - <!-- Installs instrumented package on the default emulator/device --> - <target name="-install-instrumented" depends="-dex-instrumented"> - <subant target="-install-no-dex"> - <property name="out.absolute.dir" value="${instrumentation.absolute.dir}" /> - <property name="external.jars" location="${emma.dir}/emma_device.jar" /> - <fileset dir="${tested.project.absolute.dir}" includes="build.xml" /> - </subant> - </target> - <macrodef name="run-tests-helper"> <attribute name="emma.enabled" default="false" /> <sequential> @@ -91,6 +31,20 @@ </sequential> </macrodef> + <!-- Invoking this target sets the value of extensible.classpath, which is being added to javac + classpath in target 'compile' (android_rules.xml) --> + <target name="-set-coverage-classpath"> + <property name="extensible.classpath" + location="${instrumentation.absolute.dir}/classes" /> + </target> + + <!-- Invoking this target sets the value of extensible.classpath, which is being added to javac + classpath in target 'compile' (android_rules.xml) --> + <target name="-set-run-tests-classpath"> + <property name="extensible.classpath" + location="${tested.project.absolute.dir}/bin/classes" /> + </target> + <!-- Ensures that tested project is installed on the device before we run the tests. Used for ordinary tests, without coverage measurement --> <target name="-install-tested-project"> @@ -99,13 +53,21 @@ </subant> </target> - <target name="run-tests" depends="-install-tested-project, install" + <target name="run-tests" depends="-set-run-tests-classpath, -install-tested-project, install" description="Runs tests from the package defined in test.package property"> <run-tests-helper /> </target> - <target name="coverage" depends="-install-instrumented, install" - description="Runs test on instrumented code and generates code coverage report"> + <target name="-install-instrumented"> + <subant target="-install-with-emma"> + <property name="out.absolute.dir" value="${instrumentation.absolute.dir}" /> + <fileset dir="${tested.project.absolute.dir}" includes="build.xml" /> + </subant> + </target> + + <target name="coverage" depends="-set-coverage-classpath, -install-instrumented, install" + description="Runs the tests against the instrumented code and generates + code coverage report"> <run-tests-helper emma.enabled="true" /> <echo>Downloading coverage file into project directory...</echo> <exec executable="${adb}" failonerror="true"> |
