diff options
author | Xavier Ducrohet <xav@android.com> | 2013-03-19 18:23:54 -0700 |
---|---|---|
committer | Xavier Ducrohet <xav@android.com> | 2013-03-21 12:53:11 -0700 |
commit | a5a0de47100d63fedf525dfb7d861c0db944a291 (patch) | |
tree | b6dd5d159a468c6f22c32a4219dbc26c7eea53b6 /eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders | |
parent | ee82464bb385af1160a84daa5055322334520995 (diff) | |
download | device_generic_opengl-transport-a5a0de47100d63fedf525dfb7d861c0db944a291.tar.gz device_generic_opengl-transport-a5a0de47100d63fedf525dfb7d861c0db944a291.tar.bz2 device_generic_opengl-transport-a5a0de47100d63fedf525dfb7d861c0db944a291.zip |
Add support for build-tools in ADT.
To be compatible with older projects, the projects do not
have to declare which build-tools to use and instead use the lastest.
Change-Id: Ic09a4a8f53109f36c4fed60b8f848f9b4db686c4
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders')
4 files changed, 64 insertions, 30 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/BaseBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/BaseBuilder.java index f58af561a..1cbf7f2a4 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/BaseBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/BaseBuilder.java @@ -16,19 +16,24 @@ package com.android.ide.eclipse.adt.internal.build.builders; +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; import com.android.ide.common.sdk.LoadStatus; import com.android.ide.eclipse.adt.AdtConstants; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.ide.eclipse.adt.internal.build.BuildHelper; import com.android.ide.eclipse.adt.internal.build.Messages; +import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs.BuildVerbosity; import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; import com.android.ide.eclipse.adt.internal.project.ProjectHelper; import com.android.ide.eclipse.adt.internal.project.XmlErrorHandler; import com.android.ide.eclipse.adt.internal.project.XmlErrorHandler.XmlErrorListener; +import com.android.ide.eclipse.adt.internal.sdk.ProjectState; import com.android.ide.eclipse.adt.internal.sdk.Sdk; import com.android.ide.eclipse.adt.io.IFileWrapper; import com.android.io.IAbstractFile; import com.android.io.StreamException; +import com.android.sdklib.BuildToolInfo; import com.android.sdklib.IAndroidTarget; import org.eclipse.core.resources.IContainer; @@ -64,6 +69,13 @@ public abstract class BaseBuilder extends IncrementalProjectBuilder { private SAXParserFactory mParserFactory; /** + * The build tool to use to build. This is guaranteed to be non null after a call to + * {@link #abortOnBadSetup(IJavaProject, ProjectState)} since this will throw if it can't be + * queried. + */ + protected BuildToolInfo mBuildToolInfo; + + /** * Base Resource Delta Visitor to handle XML error */ protected static class BaseDeltaVisitor implements XmlErrorListener { @@ -293,9 +305,11 @@ public abstract class BaseBuilder extends IncrementalProjectBuilder { * display any errors. * * @param javaProject The {@link IJavaProject} being compiled. + * @param projectState the project state, optional. will be queried if null. * @throws CoreException */ - protected void abortOnBadSetup(IJavaProject javaProject) throws AbortBuildException { + protected void abortOnBadSetup(@NonNull IJavaProject javaProject, + @Nullable ProjectState projectState) throws AbortBuildException, CoreException { IProject iProject = javaProject.getProject(); // check if we have finished loading the project target. Sdk sdk = Sdk.getCurrent(); @@ -303,8 +317,12 @@ public abstract class BaseBuilder extends IncrementalProjectBuilder { throw new AbortBuildException(); } + if (projectState == null) { + projectState = Sdk.getProjectState(javaProject.getProject()); + } + // get the target for the project - IAndroidTarget target = sdk.getTarget(javaProject.getProject()); + IAndroidTarget target = projectState.getTarget(); if (target == null) { throw new AbortBuildException(); @@ -315,6 +333,20 @@ public abstract class BaseBuilder extends IncrementalProjectBuilder { throw new AbortBuildException(); } + mBuildToolInfo = projectState.getBuildToolInfo(); + if (mBuildToolInfo == null) { + mBuildToolInfo = sdk.getLatestBuildTool(); + + if (mBuildToolInfo == null) { + throw new AbortBuildException(); + } else { + AdtPlugin.printBuildToConsole(BuildVerbosity.VERBOSE, iProject, + String.format("Using default Build Tools revision %s", + mBuildToolInfo.getRevision()) + ); + } + } + // abort if there are TARGET or ADT type markers stopOnMarker(iProject, AdtConstants.MARKER_TARGET, IResource.DEPTH_ZERO, false /*checkSeverity*/); diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java index 6e3dce38c..baeb15490 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/PostCompilerBuilder.java @@ -341,7 +341,7 @@ public class PostCompilerBuilder extends BaseBuilder { // Top level check to make sure the build can move forward. Only do this after recording // delta changes. - abortOnBadSetup(javaProject); + abortOnBadSetup(javaProject, projectState); // Get the output stream. Since the builder is created for the life of the // project, they can be kept around. @@ -369,7 +369,7 @@ public class PostCompilerBuilder extends BaseBuilder { if (DEBUG_LOG) { AdtPlugin.log(IStatus.INFO, "%s running crunch!", project.getName()); } - BuildHelper helper = new BuildHelper(project, + BuildHelper helper = new BuildHelper(project, mBuildToolInfo, mOutStream, mErrStream, false /*jumbo mode doesn't matter here*/, false /*dex merger doesn't matter here*/, @@ -484,7 +484,7 @@ public class PostCompilerBuilder extends BaseBuilder { AdtConstants.DEX_OPTIONS_DISABLE_MERGER); Boolean dexMerger = Boolean.valueOf(dexMergerStr); - BuildHelper helper = new BuildHelper(project, + BuildHelper helper = new BuildHelper(project, mBuildToolInfo, mOutStream, mErrStream, jumbo.booleanValue(), dexMerger.booleanValue(), @@ -913,8 +913,9 @@ public class PostCompilerBuilder extends BaseBuilder { } @Override - protected void abortOnBadSetup(IJavaProject javaProject) throws AbortBuildException { - super.abortOnBadSetup(javaProject); + protected void abortOnBadSetup(IJavaProject javaProject, ProjectState projectState) + throws AbortBuildException, CoreException { + super.abortOnBadSetup(javaProject, projectState); IProject iProject = getProject(); 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 0f0cbccbd..ae6b3f54e 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 @@ -47,6 +47,7 @@ import com.android.io.StreamException; import com.android.manifmerger.ManifestMerger; import com.android.manifmerger.MergerLog; import com.android.sdklib.AndroidVersion; +import com.android.sdklib.BuildToolInfo; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.internal.build.BuildConfigGenerator; import com.android.sdklib.internal.build.SymbolLoader; @@ -95,7 +96,6 @@ import javax.xml.parsers.ParserConfigurationException; * </ul> * */ -@SuppressWarnings("deprecation") public class PreCompilerBuilder extends BaseBuilder { /** This ID is used in plugin.xml and in each project's .project file. @@ -144,6 +144,7 @@ public class PreCompilerBuilder extends BaseBuilder { */ private DerivedProgressMonitor mDerivedProgressMonitor; + private AidlProcessor mAidlProcessor; private RenderScriptProcessor mRenderScriptProcessor; /** @@ -276,7 +277,9 @@ public class PreCompilerBuilder extends BaseBuilder { IJavaProject javaProject = JavaCore.create(project); // Top level check to make sure the build can move forward. - abortOnBadSetup(javaProject); + abortOnBadSetup(javaProject, projectState); + + setupSourceProcessors(javaProject, projectState); // now we need to get the classpath list List<IPath> sourceFolderPathList = BaseProjectHelper.getSourceClasspaths(javaProject); @@ -707,8 +710,8 @@ public class PreCompilerBuilder extends BaseBuilder { proguardFile = androidOutputFolder.getFile(AdtConstants.FN_AAPT_PROGUARD); } - handleResources(project, javaPackage, projectTarget, manifestFile, libProjects, - isLibrary, proguardFile); + handleResources(project, javaPackage, projectTarget, manifestFile, + libProjects, isLibrary, proguardFile); } if (processorStatus == SourceProcessor.COMPILE_STATUS_NONE && @@ -796,18 +799,25 @@ public class PreCompilerBuilder extends BaseBuilder { mLastBuildConfigMode = v; } - IJavaProject javaProject = JavaCore.create(project); - - // load the source processors - SourceProcessor aidlProcessor = new AidlProcessor(javaProject, mGenFolder); - mRenderScriptProcessor = new RenderScriptProcessor(javaProject, mGenFolder); - mProcessors.add(aidlProcessor); - mProcessors.add(mRenderScriptProcessor); } catch (Throwable throwable) { AdtPlugin.log(throwable, "Failed to finish PrecompilerBuilder#startupOnInitialize()"); } } + private void setupSourceProcessors(@NonNull IJavaProject javaProject, + @NonNull ProjectState projectState) { + if (mAidlProcessor == null) { + mAidlProcessor = new AidlProcessor(javaProject, mBuildToolInfo, mGenFolder); + mRenderScriptProcessor = new RenderScriptProcessor(javaProject, mBuildToolInfo, + mGenFolder); + mProcessors.add(mAidlProcessor); + mProcessors.add(mRenderScriptProcessor); + } else { + mAidlProcessor.setBuildToolInfo(mBuildToolInfo); + mRenderScriptProcessor.setBuildToolInfo(mBuildToolInfo); + } + } + @SuppressWarnings("deprecation") private void handleBuildConfig(@SuppressWarnings("rawtypes") Map args) throws IOException, CoreException { @@ -916,7 +926,7 @@ public class PreCompilerBuilder extends BaseBuilder { outFile.getLocation().toFile(), manifest.getLocation().toFile(), libManifests, - null /*injectAttributes*/) == false) { + null /*injectAttributes*/, null /*packageOverride*/) == false) { if (errors.size() > 1) { StringBuilder sb = new StringBuilder(); for (String s : errors) { @@ -1054,7 +1064,7 @@ public class PreCompilerBuilder extends BaseBuilder { // launch aapt: create the command line ArrayList<String> array = new ArrayList<String>(); - String aaptPath = projectTarget.getPath(IAndroidTarget.AAPT); + String aaptPath = mBuildToolInfo.getPath(BuildToolInfo.PathId.AAPT); array.add(aaptPath); array.add("package"); //$NON-NLS-1$ diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java index 39f7d1ffe..770710db3 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/build/builders/ResourceManagerBuilder.java @@ -24,8 +24,6 @@ import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs; import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs.BuildVerbosity; import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; import com.android.ide.eclipse.adt.internal.project.ProjectHelper; -import com.android.ide.eclipse.adt.internal.sdk.Sdk; -import com.android.sdklib.IAndroidTarget; import com.android.utils.Pair; import org.eclipse.core.resources.IFolder; @@ -87,7 +85,7 @@ public class ResourceManagerBuilder extends BaseBuilder { // check for existing target marker, in which case we abort. // (this means: no SDK, no target, or unresolvable target.) try { - abortOnBadSetup(javaProject); + abortOnBadSetup(javaProject, null); } catch (AbortBuildException e) { return null; } @@ -129,13 +127,6 @@ public class ResourceManagerBuilder extends BaseBuilder { return null; } - // check the project has a target - IAndroidTarget projectTarget = Sdk.getCurrent().getTarget(project); - if (projectTarget == null) { - // no target. marker has been set by the container initializer: exit silently. - return null; - } - // check the 'gen' source folder is present boolean hasGenSrcFolder = false; // whether the project has a 'gen' source folder setup |