summaryrefslogtreecommitdiffstats
path: root/tools/anttasks
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2009-07-21 18:34:15 -0700
committerXavier Ducrohet <xav@android.com>2009-07-21 18:34:15 -0700
commit5adc2f64034b578e7199beb95b5421e6c8463512 (patch)
treec313f6fe87a0eaf24c0144c478c669c2517f309c /tools/anttasks
parent8c78ba643862731c603677284ae88089a959cc52 (diff)
downloadandroid_development-5adc2f64034b578e7199beb95b5421e6c8463512.tar.gz
android_development-5adc2f64034b578e7199beb95b5421e6c8463512.tar.bz2
android_development-5adc2f64034b578e7199beb95b5421e6c8463512.zip
Enforce codename value for minSdkVersion in the Ant build.
If the Ant project is targetting a preview platform, the manifest must declare minSdkVersion to be the platform codename.
Diffstat (limited to 'tools/anttasks')
-rw-r--r--tools/anttasks/src/com/android/ant/SetupTask.java60
1 files changed, 60 insertions, 0 deletions
diff --git a/tools/anttasks/src/com/android/ant/SetupTask.java b/tools/anttasks/src/com/android/ant/SetupTask.java
index 7af9611db..64bf37ec6 100644
--- a/tools/anttasks/src/com/android/ant/SetupTask.java
+++ b/tools/anttasks/src/com/android/ant/SetupTask.java
@@ -18,6 +18,7 @@ package com.android.ant;
import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.ISdkLog;
+import com.android.sdklib.SdkConstants;
import com.android.sdklib.SdkManager;
import com.android.sdklib.IAndroidTarget.IOptionalLibrary;
import com.android.sdklib.internal.project.ProjectProperties;
@@ -27,10 +28,20 @@ import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.ImportTask;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Path.PathElement;
+import org.xml.sax.InputSource;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.Iterator;
+
+import javax.xml.XMLConstants;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
/**
* Setup/Import Ant task. This task accomplishes:
@@ -134,6 +145,12 @@ public final class SetupTask extends ImportTask {
}
System.out.println("API level: " + androidTarget.getVersion().getApiString());
+ // if needed check the manifest so that it matches the target
+ if (androidTarget.getVersion().isPreview()) {
+ // for preview, the manifest minSdkVersion node *must* match the target codename
+ checkManifest(antProject, androidTarget.getVersion().getCodename());
+ }
+
// sets up the properties to find android.jar/framework.aidl/target tools
String androidJar = androidTarget.getPath(IAndroidTarget.ANDROID_JAR);
antProject.setProperty(PROPERTY_ANDROID_JAR, androidJar);
@@ -205,4 +222,47 @@ public final class SetupTask extends ImportTask {
public void setImport(boolean value) {
mDoImport = value;
}
+
+ private void checkManifest(Project antProject, String codename) {
+ try {
+ File manifest = new File(antProject.getBaseDir(), "AndroidManifest.xml");
+
+ XPath xPath = XPathFactory.newInstance().newXPath();
+ xPath.setNamespaceContext(new NamespaceContext() {
+ public String getNamespaceURI(String prefix) {
+ if (prefix != null) {
+ if (prefix.equals("android")) {
+ return SdkConstants.NS_RESOURCES;
+ }
+ }
+
+ return XMLConstants.NULL_NS_URI;
+ }
+
+ public String getPrefix(String namespaceURI) {
+ // This isn't necessary for our use.
+ assert false;
+ return null;
+ }
+
+ public Iterator getPrefixes(String namespaceURI) {
+ // This isn't necessary for our use.
+ assert false;
+ return null;
+ }
+ });
+
+ String value = xPath.evaluate("/manifest/uses-sdk/@android:minSdkVersion",
+ new InputSource(new FileInputStream(manifest)));
+
+ if (codename.equals(value) == false) {
+ throw new BuildException(String.format("For '%1$s' SDK Preview, application manifest must declare minSdkVersion to '%1$s'",
+ codename));
+ }
+ } catch (XPathExpressionException e) {
+ throw new BuildException(e);
+ } catch (FileNotFoundException e) {
+ throw new BuildException(e);
+ }
+ }
}