diff options
| author | Xavier Ducrohet <xav@android.com> | 2009-07-21 18:34:15 -0700 |
|---|---|---|
| committer | Xavier Ducrohet <xav@android.com> | 2009-07-21 18:34:15 -0700 |
| commit | c37e4b4e59b90bbe0a71ad105732b2968cf63d21 (patch) | |
| tree | 2ba5936bc5a77373a2776710455c20baf980d736 /anttasks/src | |
| parent | df10e0b4e493624f7240a84614db46a11c011019 (diff) | |
| download | sdk-c37e4b4e59b90bbe0a71ad105732b2968cf63d21.zip sdk-c37e4b4e59b90bbe0a71ad105732b2968cf63d21.tar.gz sdk-c37e4b4e59b90bbe0a71ad105732b2968cf63d21.tar.bz2 | |
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 'anttasks/src')
| -rw-r--r-- | anttasks/src/com/android/ant/SetupTask.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/anttasks/src/com/android/ant/SetupTask.java b/anttasks/src/com/android/ant/SetupTask.java index 7af9611..64bf37e 100644 --- a/anttasks/src/com/android/ant/SetupTask.java +++ b/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); + } + } } |
