aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2009-12-18 19:43:15 +0000
committerKenny Root <kenny@the-b.org>2009-12-18 19:43:15 +0000
commitbada2a32d3e215df56ccee2d698c65182373ce9d (patch)
tree94cfa4f658a3976fc0fdb56f046e3cb9b5e1c9c2
parentf258841d5aa686037354f156a57beb601baeaa4d (diff)
downloadconnectbot-bada2a32d3e215df56ccee2d698c65182373ce9d.tar.gz
connectbot-bada2a32d3e215df56ccee2d698c65182373ce9d.tar.bz2
connectbot-bada2a32d3e215df56ccee2d698c65182373ce9d.zip
Update README and build.xml for Eclair
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@446 df292f66-193f-0410-a5fc-6d59da041ff2
-rw-r--r--AndroidManifest.xml2
-rw-r--r--README15
-rw-r--r--build.xml523
3 files changed, 373 insertions, 167 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d21a70a..18db390 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.connectbot"
android:versionName="1.6-dev"
- android:versionCode="223">
+ android:versionCode="224">
<application
android:icon="@drawable/icon"
diff --git a/README b/README
index b0c2f25..9f435f5 100644
--- a/README
+++ b/README
@@ -3,20 +3,7 @@ Compiling
To compile ConnectBot using Ant, you must specify where your Android SDK is via the local.properties file. Insert a line similar to the following with the full path to your SDK:
-sdk-location=/usr/local/android
-
-
-Localization
-------------
-
-To use only a specific localization or localizations in your ConnectBot build using Ant, simply insert lines into default.properties similar to these:
-
-apk-configurations=english,europe,asia
-apk-config-english=en
-apk-config-europe=en,fr,it,de,es
-apk-config-asia=en,zh_CN
-
-You may also configure this via Eclipse via Project Properties -> Android -> Project APK Configurations
+sdk.dir=/usr/local/android
ProGuard Support
diff --git a/build.xml b/build.xml
index 562beff..4ce7314 100644
--- a/build.xml
+++ b/build.xml
@@ -11,12 +11,12 @@
used by the Ant rules.
Here are some properties you may want to change/update:
- application-package
+ application.package
the name of your application package as defined in the manifest. Used by the
'uninstall' rule.
- source-folder
+ source.dir
the name of the source folder. Default is 'src'.
- out-folder
+ out.dir
the name of the output folder. Default is 'bin'.
Properties related to the SDK location or the project target should be updated
@@ -37,16 +37,16 @@
<!-- Custom Android task to deal with the project target, and import the proper rules.
This requires ant 1.6.0 or above. -->
<path id="android.antlibs">
- <pathelement path="${sdk-location}/tools/lib/anttasks.jar" />
- <pathelement path="${sdk-location}/tools/lib/sdklib.jar" />
- <pathelement path="${sdk-location}/tools/lib/androidprefs.jar" />
- <pathelement path="${sdk-location}/tools/lib/apkbuilder.jar" />
- <pathelement path="${sdk-location}/tools/lib/jarutils.jar" />
+ <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
+ <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
+ <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
+ <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
+ <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
</path>
<taskdef name="setup"
classname="com.android.ant.SetupTask"
- classpathref="android.antlibs"/>
+ classpathref="android.antlibs" />
<!-- Execute the Android Setup task that will setup some properties specific to the target,
and import the rules files.
@@ -62,109 +62,240 @@
<!-- Custom tasks -->
<taskdef name="aaptexec"
classname="com.android.ant.AaptExecLoopTask"
- classpathref="android.antlibs"/>
+ classpathref="android.antlibs" />
<taskdef name="apkbuilder"
classname="com.android.ant.ApkBuilderTask"
+ classpathref="android.antlibs" />
+
+ <taskdef name="xpath"
+ classname="com.android.ant.XPathTask"
classpathref="android.antlibs"/>
<!-- Properties -->
- <property name="android-tools" value="${sdk-location}/tools" />
-
- <!-- Input directories -->
- <property name="source-folder" value="src" />
- <property name="gen-folder" value="gen" />
- <property name="resource-folder" value="res" />
- <property name="asset-folder" value="assets" />
- <property name="source-location" value="${basedir}/${source-folder}" />
+ <!-- Tells adb which device to target. You can change this from the command line
+ by invoking "ant -Dadb.device.arg=-d" for device "ant -Dadb.device.arg=-e" for
+ the emulator. -->
+ <property name="adb.device.arg" value="" />
- <!-- folder for the 3rd party java libraries -->
- <property name="external-libs-folder" value="libs" />
+ <property name="android.tools.dir" location="${sdk.dir}/tools" />
+ <!-- Name of the application package extracted from manifest file -->
+ <xpath input="AndroidManifest.xml" expression="/manifest/@package"
+ output="manifest.package" />
- <!-- folder for the native libraries -->
- <property name="native-libs-folder" value="libs" />
+ <!-- Input directories -->
+ <property name="source.dir" value="src" />
+ <property name="source.absolute.dir" location="${source.dir}" />
+ <property name="gen.dir" value="gen" />
+ <property name="gen.absolute.dir" location="${gen.dir}" />
+ <property name="resource.dir" value="res" />
+ <property name="resource.absolute.dir" location="${resource.dir}" />
+ <property name="asset.dir" value="assets" />
+ <property name="asset.absolute.dir" location="${asset.dir}" />
+
+ <!-- Directory for the third party java libraries -->
+ <property name="external.libs.dir" value="libs" />
+ <property name="external.libs.absolute.dir" location="${external.libs.dir}" />
+
+ <!-- Directory for the native libraries -->
+ <property name="native.libs.dir" value="libs" />
+ <property name="native.libs.absolute.dir" location="${native.libs.dir}" />
<!-- Output directories -->
- <property name="gen-folder" value="gen" />
- <property name="out-folder" value="bin" />
- <property name="out-classes" value="${out-folder}/classes" />
- <property name="out-classes-location" value="${basedir}/${out-classes}"/>
- <!-- out folders for a parent project if this project is an instrumentation project -->
- <property name="main-out-folder" value="../${out-folder}" />
- <property name="main-out-classes" value="${main-out-folder}/classes"/>
+ <property name="out.dir" value="bin" />
+ <property name="out.absolute.dir" location="${out.dir}" />
+ <property name="out.classes.dir" value="${out.absolute.dir}/classes" />
+ <property name="out.classes.absolute.dir" location="${out.classes.dir}" />
<!-- Intermediate files -->
- <property name="dex-file" value="classes.dex" />
- <property name="intermediate-dex" value="${out-folder}/${dex-file}" />
- <!-- dx does not properly support incorrect / or \ based on the platform
- and Ant cannot convert them because the parameter is not a valid path.
- Because of this we have to compute different paths depending on the platform. -->
- <condition property="intermediate-dex-location"
- value="${basedir}\${intermediate-dex}"
- else="${basedir}/${intermediate-dex}" >
- <os family="windows"/>
- </condition>
+ <property name="dex.file.name" value="classes.dex" />
+ <property name="intermediate.dex.file" location="${out.absolute.dir}/${dex.file.name}" />
<!-- The final package file to generate -->
- <property name="out-debug-package" value="${out-folder}/${ant.project.name}-debug.apk"/>
+ <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.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" />
+
+ <!-- Verbosity -->
+ <property name="verbose" value="false" />
+ <!-- This is needed by emma as it uses multilevel verbosity instead of simple 'true' or 'false'
+ The property 'verbosity' is not user configurable and depends exclusively on 'verbose'
+ value.-->
+ <condition property="verbosity" value="verbose" else="quiet">
+ <istrue value="${verbose}" />
+ </condition>
+ <!-- This is needed to switch verbosity of zipalign and aapt. Depends exclusively on 'verbose'
+ -->
+ <condition property="v.option" value="-v" else="">
+ <istrue value="${verbose}" />
+ </condition>
+ <!-- This is needed to switch verbosity of dx. Depends exclusively on 'verbose' -->
+ <condition property="verbose.option" value="--verbose" else="">
+ <istrue value="${verbose}" />
+ </condition>
<!-- Tools -->
- <condition property="exe" value=".exe" else=""><os family="windows"/></condition>
- <property name="adb" value="${android-tools}/adb${exe}"/>
-
- <!-- rules -->
-
- <!-- Create the output directories if they don't exist yet. -->
- <target name="dirs">
+ <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" />
+ <element name="extra-parameters" 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}" />
+ <extra-parameters />
+ <arg line="${verbose.option}" />
+ <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">
+ <attribute name="sign.package" />
+ <element name="extra-jars" optional="yes" />
+ <sequential>
+ <apkbuilder
+ outfolder="${out.absolute.dir}"
+ basename="${ant.project.name}"
+ signed="@{sign.package}"
+ verbose="${verbose}">
+ <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 which zipaligns in.package and outputs it to out.package. Used by targets
+ debug, -debug-with-emma and release.-->
+ <macrodef name="zipalign-helper">
+ <attribute name="in.package" />
+ <attribute name="out.package" />
+ <sequential>
+ <echo>Running zip align on final apk...</echo>
+ <exec executable="${zipalign}" failonerror="true">
+ <arg line="${v.option}" />
+ <arg value="-f" />
+ <arg value="4" />
+ <arg path="@{in.package}" />
+ <arg path="@{out.package}" />
+ </exec>
+ </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 line="${adb.device.arg}" />
+ <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. -->
+ <target name="-dirs">
<echo>Creating output directories if needed...</echo>
- <mkdir dir="${resource-folder}" />
- <mkdir dir="${external-libs-folder}" />
- <mkdir dir="${gen-folder}" />
- <mkdir dir="${out-folder}" />
- <mkdir dir="${out-classes}" />
+ <mkdir dir="${resource.absolute.dir}" />
+ <mkdir dir="${external.libs.absolute.dir}" />
+ <mkdir dir="${gen.absolute.dir}" />
+ <mkdir dir="${out.absolute.dir}" />
+ <mkdir dir="${out.classes.absolute.dir}" />
</target>
- <!-- Generate the R.java file for this project's resources. -->
- <target name="resource-src" depends="dirs, update-version">
+ <!-- Generates the R.java file for this project's resources. -->
+ <target name="-resource-src" depends="-dirs, update-version">
<echo>Generating R.java / Manifest.java from the resources...</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
+ <arg line="${v.option}" />
<arg value="-m" />
<arg value="-J" />
- <arg path="${gen-folder}" />
+ <arg path="${gen.absolute.dir}" />
<arg value="-M" />
<arg path="AndroidManifest.xml" />
<arg value="-S" />
- <arg path="${resource-folder}" />
+ <arg path="${resource.absolute.dir}" />
<arg value="-I" />
- <arg path="${android-jar}" />
+ <arg path="${android.jar}" />
</exec>
</target>
- <!-- Generate java classes from .aidl files. -->
- <target name="aidl" depends="dirs">
+ <!-- Generates java classes from .aidl files. -->
+ <target name="-aidl" depends="-dirs">
<echo>Compiling aidl files into Java classes...</echo>
<apply executable="${aidl}" failonerror="true">
- <arg value="-p${android-aidl}" />
- <arg value="-I${source-folder}" />
- <arg value="-o${gen-folder}" />
- <fileset dir="${source-folder}">
- <include name="**/*.aidl"/>
+ <arg value="-p${android.aidl}" />
+ <arg value="-I${source.absolute.dir}" />
+ <arg value="-o${gen.absolute.dir}" />
+ <fileset dir="${source.absolute.dir}">
+ <include name="**/*.aidl" />
</fileset>
</apply>
</target>
- <!-- Compile this project's .java files into .class files. -->
- <target name="compile" depends="resource-src, aidl">
+ <!-- Compiles this project's .java files into .class files. -->
+ <target name="compile" depends="-resource-src, -aidl"
+ description="Compiles project's .java files into .class files">
+ <!-- If android rules are used for a test project, its classpath should include
+ tested project's location -->
+ <condition property="extensible.classpath"
+ value="${tested.project.absolute.dir}/bin/classes" else=".">
+ <isset property="tested.project.absolute.dir" />
+ </condition>
<javac encoding="utf8" target="1.5" debug="true" extdirs=""
- destdir="${out-classes}"
- bootclasspathref="android.target.classpath">
- <src path="${source-folder}" />
- <src path="${gen-folder}" />
+ destdir="${out.classes.absolute.dir}"
+ bootclasspathref="android.target.classpath"
+ verbose="${verbose}" classpath="${extensible.classpath}">
+ <src path="${source.absolute.dir}" />
+ <src path="${gen.absolute.dir}" />
<classpath>
- <fileset dir="${external-libs-folder}" includes="*.jar"/>
- <pathelement path="${main-out-classes}"/>
+ <fileset dir="${external.libs.dir}" includes="*.jar"/>
</classpath>
</javac>
</target>
@@ -181,13 +312,13 @@
<taskdef resource="proguard/ant/task.properties"
classpath="tools/proguard.jar" />
<proguard>
- -injars ${out-classes}
- -outjars ${out-folder}/classes.min.jar
- -libraryjars ${android-jar}
+ -injars ${out.classes.dir}
+ -outjars ${out.dir}/classes.min.jar
+ -libraryjars ${android.jar}
-dontskipnonpubliclibraryclasses
-dontobfuscate
- -dontoptimize
- -printusage ${out-folder}/proguard.usage
+ -dontoptimize
+ -printusage ${out.dir}/proguard.usage
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Service
@@ -199,118 +330,205 @@
<!-- Convert this project's .class files into .dex files. -->
<target name="dex.proguard" depends="proguard.execute" if="have.proguard">
- <echo>Converting compiled files and external libraries into ${out-folder}/${dex-file}...</echo>
+ <echo>Converting compiled files and external libraries into ${out.dir}/${dex.file.name}...</echo>
<apply executable="${dx}" failonerror="true" parallel="true">
<arg value="--dex" />
- <arg value="--output=${intermediate-dex-location}" />
- <fileset dir="${out-folder}" includes="*.min.jar" />
- <fileset dir="${external-libs-folder}" includes="*.jar"/>
+ <arg value="--output=${intermediate.dex.file}" />
+ <fileset dir="${out.classes.absolute.dir}" includes="*.min.jar" />
+ <fileset dir="${external.libs.absolute.dir}" includes="*.jar"/>
</apply>
</target>
<!-- Convert this project's .class files into .dex files. -->
<target name="dex.vanilla" depends="compile" unless="have.proguard">
- <echo>Converting compiled files and external libraries into ${out-folder}/${dex-file}...</echo>
+ <echo>Converting compiled files and external libraries into ${out.dir}/${dex.file.name}...</echo>
<apply executable="${dx}" failonerror="true" parallel="true">
<arg value="--dex" />
- <arg value="--output=${intermediate-dex-location}" />
- <arg path="${out-classes-location}" />
- <fileset dir="${external-libs-folder}" includes="*.jar"/>
+ <arg value="--output=${intermediate.dex.file}" />
+ <arg path="${out.classes.absolute.dir}" />
+ <fileset dir="${external.libs.absolute.dir}" includes="*.jar"/>
</apply>
</target>
- <target name="dex" depends="dex.vanilla, dex.proguard" />
+ <target name="-dex" depends="dex.vanilla, dex.proguard" />
<!-- Put the project's resources into the output package file
This actually can create multiple resource package in case
Some custom apk with specific configuration have been
declared in default.properties.
-->
- <target name="package-resources">
+ <target name="-package-resources">
<echo>Packaging resources</echo>
<aaptexec executable="${aapt}"
command="package"
manifest="AndroidManifest.xml"
- resources="${resource-folder}"
- assets="${asset-folder}"
- androidjar="${android-jar}"
- outfolder="${out-folder}"
+ resources="${resource.absolute.dir}"
+ assets="${asset.absolute.dir}"
+ androidjar="${android.jar}"
+ outfolder="${out.absolute.dir}"
basename="${ant.project.name}" />
</target>
- <!-- Package the application and sign it with a debug key.
- This is the default target when building. It is used for debug. -->
- <target name="debug" depends="dex, package-resources">
- <apkbuilder
- outfolder="${out-folder}"
- basename="${ant.project.name}"
- signed="true"
- verbose="false">
- <file path="${intermediate-dex}" />
- <sourcefolder path="${source-folder}" />
- <jarfolder path="${external-libs-folder}" />
- <nativefolder path="${native-libs-folder}" />
- </apkbuilder>
+ <!-- Packages the application and sign it with a debug key. -->
+ <target name="-package-debug-sign" depends="-dex, -package-resources">
+ <package-helper sign.package="true" />
</target>
- <!-- Package the application without signing it.
- This allows for the application to be signed later with an official publishing key. -->
- <target name="release" depends="dex, package-resources">
- <apkbuilder
- outfolder="${out-folder}"
- basename="${ant.project.name}"
- signed="false"
- verbose="false">
- <file path="${intermediate-dex}" />
- <sourcefolder path="${source-folder}" />
- <jarfolder path="${external-libs-folder}" />
- <nativefolder path="${native-libs-folder}" />
- </apkbuilder>
- <echo>All generated packages need to be signed with jarsigner before they are published.</echo>
+ <!-- Packages the application without signing it. -->
+ <target name="-package-no-sign" depends="-dex, -package-resources">
+ <package-helper sign.package="false" />
</target>
- <!-- Install the package on the default emulator -->
- <target name="install" depends="debug">
- <echo>Installing ${out-debug-package} onto default emulator...</echo>
- <exec executable="${adb}" failonerror="true">
- <arg value="install" />
- <arg path="${out-debug-package}" />
- </exec>
+ <target name="-compile-tested-if-test" if="tested.project.dir" unless="do.not.compile.again">
+ <subant target="compile">
+ <fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
+ </subant>
</target>
- <target name="reinstall" depends="debug">
- <echo>Installing ${out-debug-package} onto default emulator...</echo>
- <exec executable="${adb}" failonerror="true">
- <arg value="install" />
- <arg value="-r" />
- <arg path="${out-debug-package}" />
- </exec>
+ <!-- Builds debug output package, provided all the necessary files are already dexed -->
+ <target name="debug" depends="-compile-tested-if-test, -package-debug-sign"
+ description="Builds the application and signs it with a debug key.">
+ <zipalign-helper in.package="${out.debug.unaligned.package}"
+ out.package="${out.debug.package}" />
+ <echo>Debug Package: ${out.debug.package}</echo>
</target>
- <!-- Uinstall the package from the default emulator -->
- <target name="uninstall">
- <echo>Uninstalling ${application-package} from the default emulator...</echo>
+ <target name="-release-check">
+ <condition property="release.sign">
+ <and>
+ <isset property="key.store" />
+ <isset property="key.alias" />
+ </and>
+ </condition>
+ </target>
+
+ <target name="-release-nosign" depends="-release-check" unless="release.sign">
+ <echo>No key.store and key.alias properties found in build.properties.</echo>
+ <echo>Please sign ${out.unsigned.package} manually</echo>
+ <echo>and run zipalign from the Android SDK tools.</echo>
+ </target>
+
+ <target name="release" depends="-package-no-sign, -release-nosign" if="release.sign"
+ description="Builds the application. The generated apk file must be signed before
+ it is published.">
+ <!-- Gets passwords -->
+ <input
+ message="Please enter keystore password (store:${key.store}):"
+ addproperty="key.store.password" />
+ <input
+ message="Please enter password for alias '${key.alias}':"
+ addproperty="key.alias.password" />
+
+ <!-- Signs the APK -->
+ <echo>Signing final apk...</echo>
+ <signjar
+ jar="${out.unsigned.package}"
+ signedjar="${out.unaligned.package}"
+ keystore="${key.store}"
+ storepass="${key.store.password}"
+ alias="${key.alias}"
+ keypass="${key.alias.password}"
+ verbose="${verbose}" />
+
+ <!-- Zip aligns the APK -->
+ <zipalign-helper in.package="${out.unaligned.package}"
+ out.package="${out.release.package}" />
+ <echo>Release Package: ${out.release.package}</echo>
+ </target>
+
+ <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." >
+ <install-helper />
+ </target>
+
+ <target name="-uninstall-check">
+ <condition property="uninstall.run">
+ <isset property="manifest.package" />
+ </condition>
+ </target>
+ <target name="-uninstall-error" depends="-uninstall-check" unless="uninstall.run">
+ <echo>Unable to run 'ant uninstall', manifest.package property is not defined.
+ </echo>
+ </target>
+
+ <!-- Uninstalls the package from the default emulator/device -->
+ <target name="uninstall" depends="-uninstall-error" if="uninstall.run"
+ description="Uninstalls the application from a running emulator or device.">
+ <echo>Uninstalling ${manifest.package} from the default emulator or device...</echo>
<exec executable="${adb}" failonerror="true">
+ <arg line="${adb.device.arg}" />
<arg value="uninstall" />
- <arg path="${application-package}" />
+ <arg value="${manifest.package}" />
</exec>
</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="${verbosity}"
+ 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>
+ <extra-parameters>
+ <arg value="--no-locals" />
+ </extra-parameters>
+ <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 sign.package="true">
+ <extra-jars>
+ <!-- Injected from external file -->
+ <jarfile path="${emma.dir}/emma_device.jar" />
+ </extra-jars>
+ </package-helper>
+ </target>
+
+ <target name="-debug-with-emma" depends="-package-with-emma">
+ <zipalign-helper in.package="${out.debug.unaligned.package}"
+ out.package="${out.debug.package}" />
+ </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| -->
<echo>Android Ant Build. Available targets:</echo>
<echo> help: Displays this help.</echo>
- <echo> debug: Builds the application and sign it with a debug key.</echo>
+ <echo> clean: Removes output files created by other targets.</echo>
+ <echo> compile: Compiles project's .java files into .class files.</echo>
+ <echo> debug: Builds the application and signs it with a debug key.</echo>
<echo> release: Builds the application. The generated apk file must be</echo>
<echo> signed before it is published.</echo>
- <echo> install: Installs the debug package onto a running emulator or</echo>
- <echo> device. This can only be used if the application has </echo>
- <echo> not yet been installed.</echo>
- <echo> reinstall: Installs the debug package on a running emulator or</echo>
- <echo> device that already has the application.</echo>
- <echo> The signatures must match.</echo>
- <echo> uninstall: uninstall the application from a running emulator or</echo>
+ <echo> install: Installs/reinstalls the debug package onto a running</echo>
+ <echo> emulator or device.</echo>
+ <echo> If the application was previously installed, the</echo>
+ <echo> signatures must match.</echo>
+ <echo> uninstall: Uninstalls the application from a running emulator or</echo>
<echo> device.</echo>
<echo> proguard: use before build statements like "debug" and "release"</echo>
<echo> to enable proguard dead code removal. NOTE: You must</echo>
@@ -325,7 +543,8 @@
</tstamp>
<!-- Get the version name from the android manifest, will en up in property ${manifest.android:versionName} -->
- <xmlproperty file="${basedir}/AndroidManifest.xml" collapseAttributes="true"/>
+ <xpath input="AndroidManifest.xml" expression="/manifest/@android:versionName"
+ output="manifest.version.name" />
<!-- find out svn.revision of HEAD, need svn.exe installed on local machine will en up in property ${Revision} -->
<exec executable="svn" output="svnlog.out">
@@ -342,16 +561,16 @@
<delete file="svnlog.out"/>
- <replaceregexp file="${resource-folder}/values/notrans.xml" encoding="utf8" match='(\x3Cstring name="msg_version">)[^\x3C]*(\x3C/string>)'
- replace='\1${ant.project.name} ${manifest.android:versionName} (r${Revision} ${build.date})\2' />
+ <replaceregexp file="${resource.absolute.dir}/values/notrans.xml" encoding="utf8" match='(\x3Cstring name="msg_version">)[^\x3C]*(\x3C/string>)'
+ replace='\1${ant.project.name} ${manifest.version.name} (r${Revision} ${build.date})\2' />
- <echo>Updated "msg_version" to: ${ant.project.name} ${manifest.android:versionName} (r${Revision} ${build.date})</echo>
+ <echo>Updated "msg_version" to: ${ant.project.name} ${manifest.version.name} (r${Revision} ${build.date})</echo>
</target>
<target name="clean"
description="Clean up the result of the build process">
- <delete dir="${out-folder}"/>
- <delete dir="${gen-folder}"/>
+ <delete dir="${out.absolute.dir}"/>
+ <delete dir="${gen.absolute.dir}"/>
<exec executable="ant" failonerror="true">
<arg value="-f" />
<arg value="tests/build.xml" />
@@ -359,12 +578,12 @@
</exec>
</target>
- <target name="tests" depends="reinstall">
+ <target name="tests" depends="install">
<echo>Building and installing tests...</echo>
<exec executable="ant" failonerror="true">
<arg value="-f" />
<arg value="tests/build.xml" />
- <arg value="reinstall"/>
+ <arg value="install"/>
</exec>
<echo>Running test cases...</echo>
<exec executable="${adb}">