diff options
author | Xavier Ducrohet <xav@android.com> | 2013-01-02 12:10:01 -0800 |
---|---|---|
committer | Xavier Ducrohet <xav@android.com> | 2013-01-02 15:55:35 -0800 |
commit | 9ae02201d4fdc2ecb3be2c6322279ef4820e104d (patch) | |
tree | dac443938f8e67e4612933e5d99a0068d4c28959 /builder | |
parent | 0749a476551ad096b7e2436e3f1f758c10caad83 (diff) | |
download | build-9ae02201d4fdc2ecb3be2c6322279ef4820e104d.tar.gz |
Enforce a given version of platform-tools.
Change-Id: I8178b4ec7435a5091fdc1dcb892285ed3ecf55b0
Diffstat (limited to 'builder')
3 files changed, 65 insertions, 1 deletions
diff --git a/builder/src/main/java/com/android/builder/AndroidBuilder.java b/builder/src/main/java/com/android/builder/AndroidBuilder.java index 04f7e3c..11629be 100644 --- a/builder/src/main/java/com/android/builder/AndroidBuilder.java +++ b/builder/src/main/java/com/android/builder/AndroidBuilder.java @@ -40,6 +40,7 @@ import com.android.manifmerger.MergerLog; import com.android.prefs.AndroidLocation.AndroidLocationException; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.IAndroidTarget.IOptionalLibrary; +import com.android.sdklib.internal.repository.packages.FullRevision; import com.android.utils.ILogger; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -79,6 +80,8 @@ import static com.google.common.base.Preconditions.checkState; */ public class AndroidBuilder { + private static final FullRevision MIN_PLATFORM_TOOLS_REV = new FullRevision(16, 0, 2); + private final SdkParser mSdkParser; private final ILogger mLogger; private final CommandLineRunner mCmdLineRunner; @@ -107,6 +110,18 @@ public class AndroidBuilder { mLogger = checkNotNull(logger); mVerboseExec = verboseExec; mCmdLineRunner = new CommandLineRunner(mLogger); + + FullRevision platformToolsRevision = mSdkParser.getPlatformToolsRevision(); + if (platformToolsRevision == null) { + throw new IllegalArgumentException( + "The SDK Platform Tools revision could not be found. Make sure the component is installed."); + } + if (platformToolsRevision.compareTo(MIN_PLATFORM_TOOLS_REV) < 0) { + throw new IllegalArgumentException(String.format( + "The SDK Platform Tools revision (%1$s) is too low. Minimum required is %2$s", + platformToolsRevision, MIN_PLATFORM_TOOLS_REV)); + + } } @VisibleForTesting diff --git a/builder/src/main/java/com/android/builder/DefaultSdkParser.java b/builder/src/main/java/com/android/builder/DefaultSdkParser.java index f8ef418..ebf7ef7 100644 --- a/builder/src/main/java/com/android/builder/DefaultSdkParser.java +++ b/builder/src/main/java/com/android/builder/DefaultSdkParser.java @@ -20,9 +20,17 @@ import com.android.SdkConstants; import com.android.annotations.NonNull; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkManager; +import com.android.sdklib.internal.repository.packages.FullRevision; +import com.android.sdklib.repository.PkgProps; import com.android.utils.ILogger; +import com.google.common.io.Closeables; import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.util.Properties; /** * Default implementation of {@link SdkParser} for a normal Android SDK distribution. @@ -58,4 +66,35 @@ public class DefaultSdkParser implements SdkParser { '/' + SdkConstants.FD_SUPPORT + '/' + SdkConstants.FN_ANNOTATIONS_JAR; } + + @Override + public FullRevision getPlatformToolsRevision() { + File platformTools = new File(mSdkLocation, SdkConstants.FD_PLATFORM_TOOLS); + if (!platformTools.isDirectory()) { + return null; + } + + + Reader reader = null; + try { + reader = new FileReader(new File(platformTools, SdkConstants.FN_SOURCE_PROP)); + Properties props = new Properties(); + props.load(reader); + + String value = props.getProperty(PkgProps.PKG_REVISION); + + return FullRevision.parseRevision(value); + + } catch (FileNotFoundException ignore) { + // return null below. + } catch (IOException ignore) { + // return null below. + } catch (NumberFormatException ignore) { + // return null below. + } finally { + Closeables.closeQuietly(reader); + } + + return null; + } } diff --git a/builder/src/main/java/com/android/builder/SdkParser.java b/builder/src/main/java/com/android/builder/SdkParser.java index 497d7a5..09c9abd 100644 --- a/builder/src/main/java/com/android/builder/SdkParser.java +++ b/builder/src/main/java/com/android/builder/SdkParser.java @@ -18,6 +18,7 @@ package com.android.builder; import com.android.annotations.NonNull; import com.android.sdklib.IAndroidTarget; +import com.android.sdklib.internal.repository.packages.FullRevision; import com.android.utils.ILogger; /** @@ -38,6 +39,15 @@ public interface SdkParser { */ IAndroidTarget resolveTarget(@NonNull String target, @NonNull ILogger logger); + /** + * Returns the location of the annotations jar for compilation targets that are <= 15. + */ String getAnnotationsJar(); -} + /** + * Returns the revision of the installed platform tools component. + * + * @return the FullRevision or null if the revision couldn't not be found + */ + FullRevision getPlatformToolsRevision(); +}
\ No newline at end of file |