diff options
author | Josiah Gaskin <josiahgaskin@google.com> | 2011-06-09 15:45:04 -0700 |
---|---|---|
committer | Josiah Gaskin <josiahgaskin@google.com> | 2011-07-18 16:59:48 -0700 |
commit | ad94adc4e79ee99741635db328e0b85c4ed712ec (patch) | |
tree | e3aa0f9c97ffa1fdfaea0ead1fad02ac5c377345 | |
parent | 42374d0bbbbc2f37124c31dbcaa282eface0b2dd (diff) | |
download | sdk-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.java | 34 | ||||
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PreCompilerBuilder.java | 26 |
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); } |