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();
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");
}
<!-- ******************** 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
<!-- 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>
<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>