aboutsummaryrefslogtreecommitdiff
path: root/builder
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2013-01-02 12:10:01 -0800
committerXavier Ducrohet <xav@android.com>2013-01-02 15:55:35 -0800
commit9ae02201d4fdc2ecb3be2c6322279ef4820e104d (patch)
treedac443938f8e67e4612933e5d99a0068d4c28959 /builder
parent0749a476551ad096b7e2436e3f1f758c10caad83 (diff)
downloadbuild-9ae02201d4fdc2ecb3be2c6322279ef4820e104d.tar.gz
Enforce a given version of platform-tools.
Change-Id: I8178b4ec7435a5091fdc1dcb892285ed3ecf55b0
Diffstat (limited to 'builder')
-rw-r--r--builder/src/main/java/com/android/builder/AndroidBuilder.java15
-rw-r--r--builder/src/main/java/com/android/builder/DefaultSdkParser.java39
-rw-r--r--builder/src/main/java/com/android/builder/SdkParser.java12
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