aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--anttasks/src/com/android/ant/AaptExecTask.java2
-rw-r--r--anttasks/src/com/android/ant/NewSetupTask.java21
-rw-r--r--files/ant/build.xml25
3 files changed, 37 insertions, 11 deletions
diff --git a/anttasks/src/com/android/ant/AaptExecTask.java b/anttasks/src/com/android/ant/AaptExecTask.java
index 8731732..c01afe2 100644
--- a/anttasks/src/com/android/ant/AaptExecTask.java
+++ b/anttasks/src/com/android/ant/AaptExecTask.java
@@ -96,7 +96,7 @@ public final class AaptExecTask extends SingleDependencyTask {
private boolean mNonConstantId;
/**
- * Input path that ignores the same file that aapt does.
+ * Input path that ignores the same folders/files that aapt does.
*/
private static class ResFolderInputPath extends InputPath {
public ResFolderInputPath(File file, Set<String> extensionsToCheck) {
diff --git a/anttasks/src/com/android/ant/NewSetupTask.java b/anttasks/src/com/android/ant/NewSetupTask.java
index 165ea08..46f5b14 100644
--- a/anttasks/src/com/android/ant/NewSetupTask.java
+++ b/anttasks/src/com/android/ant/NewSetupTask.java
@@ -452,21 +452,20 @@ public class NewSetupTask extends Task {
System.out.println("\n------------------\nResolving library dependencies:");
+ // get the list of ordered libraries.
ArrayList<File> libraries = getProjectLibraries(antProject);
if (libraries.size() > 0) {
System.out.println("------------------\nOrdered libraries:");
+ // use that same order to return ordered res folders, as well as jars and output.
for (File library : libraries) {
+ // get the root path.
String libRootPath = library.getAbsolutePath();
System.out.println(libRootPath);
- // get the root path.
- PathElement element = rootPath.createPathElement();
- element.setPath(libRootPath);
-
// get the res path. Always $PROJECT/res as well as the crunch cache.
- element = resPath.createPathElement();
+ PathElement element = resPath.createPathElement();
element.setPath(libRootPath + "/" + SdkConstants.FD_OUTPUT +
"/" + SdkConstants.FD_RES);
element = resPath.createPathElement();
@@ -506,6 +505,18 @@ public class NewSetupTask extends Task {
throw new BuildException(e);
}
}
+
+ // now use the reverse order to get the full list of library project.
+ // This is used to compile all the libraries, direct or indirect dependencies,
+ // in a single pass.
+ final int count = libraries.size();
+ for (int i = count - 1 ; i >= 0 ; i--) {
+ File library = libraries.get(i);
+
+ PathElement element = rootPath.createPathElement();
+ element.setPath(library.getAbsolutePath());
+ }
+
} else {
System.out.println("No library dependencies.\n");
}
diff --git a/files/ant/build.xml b/files/ant/build.xml
index 91dbb1f..57effb2 100644
--- a/files/ant/build.xml
+++ b/files/ant/build.xml
@@ -365,6 +365,11 @@
<!-- ******************** Build Targets ******************** -->
<!-- ******************************************************* -->
+ <!-- target to disable building dependencies -->
+ <target name="only">
+ <property name="dont.build.deps" value="true" />
+ </target>
+
<!-- this target simply force running -setup making
the project info be read. To be used as
ant all clean
@@ -466,15 +471,19 @@
<!-- compile the libraries if any -->
<if>
<condition>
- <isreference refid="project.libraries" />
+ <and>
+ <isreference refid="project.libraries" />
+ <not><isset property="dont.build.deps" /></not>
+ </and>
</condition>
<then>
<echo>Building Libraries</echo>
- <subant
+ <subant failonerror="true"
buildpathref="project.libraries"
- antfile="build.xml"
- target="${build.target}"
- failonerror="true"/>
+ antfile="build.xml">
+ <target name="only" />
+ <target name="${build.target}" />
+ </subant>
<echo></echo>
<echo>############################################</echo>
<echo>**** Back to project ${ant.project.name} ****</echo>
@@ -1263,8 +1272,14 @@
<echo> (tested projects and libraries)at the same time</echo>
<echo> using: 'ant all clean'</echo>
<echo> debug: Builds the application and signs it with a debug key.</echo>
+ <echo> The 'only' target can be used to only build the</echo>
+ <echo> current project and ignore the libraries using:</echo>
+ <echo> 'ant only debug'</echo>
<echo> release: Builds the application. The generated apk file must be</echo>
<echo> signed before it is published.</echo>
+ <echo> The 'only' target can be used to only build the</echo>
+ <echo> current project and ignore the libraries using:</echo>
+ <echo> 'ant only release'</echo>
<echo> instrument:Builds an instrumented package and signs it with a</echo>
<echo> debug key.</echo>
<echo> test: Runs the tests. Project must be a test project and</echo>