aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosiah Gaskin <josiahgaskin@google.com>2011-06-09 15:45:04 -0700
committerJosiah Gaskin <josiahgaskin@google.com>2011-07-18 16:59:48 -0700
commitad94adc4e79ee99741635db328e0b85c4ed712ec (patch)
treee3aa0f9c97ffa1fdfaea0ead1fad02ac5c377345
parent42374d0bbbbc2f37124c31dbcaa282eface0b2dd (diff)
downloadsdk-ad94adc4e79ee99741635db328e0b85c4ed712ec.zip
sdk-ad94adc4e79ee99741635db328e0b85c4ed712ec.tar.gz
sdk-ad94adc4e79ee99741635db328e0b85c4ed712ec.tar.bz2
Adding support to ADT and ant for smart R.java gen
This change lets ADT and ant make use of the new --extra-packages flag in aapt to allow for all the R.java files to be generated using only one call rather than one call per library. Change-Id: Ibc060b1218010cfbae108f4f1aba2c25fe69a964
-rw-r--r--anttasks/src/com/android/ant/AaptExecLoopTask.java34
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java26
2 files changed, 21 insertions, 39 deletions
diff --git a/anttasks/src/com/android/ant/AaptExecLoopTask.java b/anttasks/src/com/android/ant/AaptExecLoopTask.java
index d7d53c9..725f6b6 100644
--- a/anttasks/src/com/android/ant/AaptExecLoopTask.java
+++ b/anttasks/src/com/android/ant/AaptExecLoopTask.java
@@ -253,37 +253,27 @@ public final class AaptExecLoopTask extends Task {
public void execute() throws BuildException {
Project taskProject = getProject();
- // first do a full resource package
- callAapt(null /*customPackage*/);
+ String libPkgProp = null;
// if the parameters indicate generation of the R class, check if
// more R classes need to be created for libraries.
if (mRFolder != null && new File(mRFolder).isDirectory()) {
- String libPkgProp = taskProject.getProperty(AntConstants.PROP_PROJECT_LIBS_PKG);
- if (libPkgProp != null) {
- // get the main package to compare in case the libraries use the same
- String mainPackage = taskProject.getProperty(AntConstants.PROP_MANIFEST_PACKAGE);
-
- String[] libPkgs = libPkgProp.split(";");
- for (String libPkg : libPkgs) {
- if (libPkg.length() > 0 && mainPackage.equals(libPkg) == false) {
- // FIXME: instead of recreating R.java from scratch, maybe copy
- // the files (R.java and manifest.java)? This would force to replace
- // the package line on the fly.
- callAapt(libPkg);
- }
- }
- }
+ libPkgProp = taskProject.getProperty(AntConstants.PROP_PROJECT_LIBS_PKG);
+ // Replace ";" with ":" since that's what aapt expects
+ libPkgProp = libPkgProp.replace(';', ':');
}
+ // Call aapt. If there are libraries, we'll pass a non-null string of libs.
+ callAapt(libPkgProp);
}
/**
* Calls aapt with the given parameters.
* @param resourceFilter the resource configuration filter to pass to aapt (if configName is
* non null)
- * @param customPackage an optional custom package.
+ * @param extraPackages an optional list of colon-separated packages. Can be null
+ * Ex: com.foo.one:com.foo.two:com.foo.lib
*/
- private void callAapt(String customPackage) {
+ private void callAapt(String extraPackages) {
Project taskProject = getProject();
final boolean generateRClass = mRFolder != null && new File(mRFolder).isDirectory();
@@ -351,9 +341,9 @@ public final class AaptExecLoopTask extends Task {
}
}
- if (customPackage != null) {
- task.createArg().setValue("--custom-package");
- task.createArg().setValue(customPackage);
+ if (extraPackages != null) {
+ task.createArg().setValue("--extra-packages");
+ task.createArg().setValue(extraPackages);
}
// if the project contains libraries, force auto-add-overlay
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java
index 943dcfe..e7540da 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java
@@ -611,8 +611,7 @@ public class PreCompilerBuilder extends BaseBuilder {
// handle libraries
ArrayList<IFolder> libResFolders = new ArrayList<IFolder>();
- ArrayList<IFolder> libOutputFolders = new ArrayList<IFolder>();
- ArrayList<String> libJavaPackages = new ArrayList<String>();
+ StringBuilder libJavaPackages = null;
if (libProjects != null) {
for (IProject lib : libProjects) {
IFolder libResFolder = lib.getFolder(SdkConstants.FD_RES);
@@ -623,26 +622,19 @@ public class PreCompilerBuilder extends BaseBuilder {
try {
String libJavaPackage = AndroidManifest.getPackage(new IFolderWrapper(lib));
if (libJavaPackage.equals(javaPackage) == false) {
- libJavaPackages.add(libJavaPackage);
- libOutputFolders.add(getGenManifestPackageFolder(libJavaPackage));
+ if (libJavaPackages == null) {
+ libJavaPackages = new StringBuilder(libJavaPackage);
+ } else {
+ libJavaPackages.append(":");
+ libJavaPackages.append(libJavaPackage);
+ }
}
} catch (Exception e) {
}
}
}
-
execAapt(project, projectTarget, osOutputPath, osResPath, osManifestPath,
- mainPackageFolder, libResFolders, null /* custom java package */);
-
- final int count = libOutputFolders.size();
- if (count > 0) {
- for (int i = 0 ; i < count ; i++) {
- IFolder libFolder = libOutputFolders.get(i);
- String libJavaPackage = libJavaPackages.get(i);
- execAapt(project, projectTarget, osOutputPath, osResPath, osManifestPath,
- libFolder, libResFolders, libJavaPackage);
- }
- }
+ mainPackageFolder, libResFolders, libJavaPackages.toString());
}
}
@@ -686,7 +678,7 @@ public class PreCompilerBuilder extends BaseBuilder {
}
if (customJavaPackage != null) {
- array.add("--custom-package"); //$NON-NLS-1$
+ array.add("--extra-packages"); //$NON-NLS-1$
array.add(customJavaPackage);
}