diff options
10 files changed, 96 insertions, 17 deletions
diff --git a/anttasks/src/com/android/ant/SetupTask.java b/anttasks/src/com/android/ant/SetupTask.java index bf6a162..790c068 100644 --- a/anttasks/src/com/android/ant/SetupTask.java +++ b/anttasks/src/com/android/ant/SetupTask.java @@ -167,7 +167,7 @@ public final class SetupTask extends ImportTask { } // look for referenced libraries. - processReferencedLibraries(antProject); + processReferencedLibraries(antProject, androidTarget); // display it System.out.println("Project Target: " + androidTarget.getName()); @@ -354,7 +354,7 @@ public final class SetupTask extends ImportTask { } } - private void processReferencedLibraries(Project antProject) { + private void processReferencedLibraries(Project antProject, IAndroidTarget androidTarget) { // prepare several paths for future tasks Path sourcePath = new Path(antProject); Path resPath = new Path(antProject); @@ -368,6 +368,10 @@ public final class SetupTask extends ImportTask { } }; + // get the build version for the current target. It'll be tested if there's at least + // one library. + int antBuildVersion = androidTarget.getAntBuildRevision(); + int index = 1; while (true) { String propName = ProjectProperties.PROPERTY_LIB_REF + Integer.toString(index++); @@ -377,6 +381,12 @@ public final class SetupTask extends ImportTask { break; } + if (antBuildVersion < SdkConstants.ANT_REV_LIBRARY) { + throw new BuildException(String.format( + "The build system for this project target (%1$s) does not support libraries", + androidTarget.getFullName())); + } + // get the source path. default is src but can be overriden by the property // "source.dir" in build.properties. PathElement element = sourcePath.createPathElement(); diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/.classpath b/eclipse/plugins/com.android.ide.eclipse.tests/.classpath index f74212c..17d578d 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/.classpath +++ b/eclipse/plugins/com.android.ide.eclipse.tests/.classpath @@ -1,4 +1,3 @@ - <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> diff --git a/sdkmanager/app/src/com/android/sdkmanager/Main.java b/sdkmanager/app/src/com/android/sdkmanager/Main.java index e9992a2..334928b 100644 --- a/sdkmanager/app/src/com/android/sdkmanager/Main.java +++ b/sdkmanager/app/src/com/android/sdkmanager/Main.java @@ -296,7 +296,7 @@ public class Main { } IAndroidTarget target = targets[targetId - 1]; // target id is 1-based - ProjectCreator creator = new ProjectCreator(mOsSdkFolder, + ProjectCreator creator = new ProjectCreator(mSdkManager, mOsSdkFolder, mSdkCommandLine.isVerbose() ? OutputLevel.VERBOSE : mSdkCommandLine.isSilent() ? OutputLevel.SILENT : OutputLevel.NORMAL, @@ -441,7 +441,7 @@ public class Main { mSdkLog.printf("Found main project target: %1$s\n", target.getFullName()); - ProjectCreator creator = new ProjectCreator(mOsSdkFolder, + ProjectCreator creator = new ProjectCreator(mSdkManager, mOsSdkFolder, mSdkCommandLine.isVerbose() ? OutputLevel.VERBOSE : mSdkCommandLine.isSilent() ? OutputLevel.SILENT : OutputLevel.NORMAL, @@ -488,7 +488,7 @@ public class Main { target = targets[targetId - 1]; // target id is 1-based } - ProjectCreator creator = new ProjectCreator(mOsSdkFolder, + ProjectCreator creator = new ProjectCreator(mSdkManager, mOsSdkFolder, mSdkCommandLine.isVerbose() ? OutputLevel.VERBOSE : mSdkCommandLine.isSilent() ? OutputLevel.SILENT : OutputLevel.NORMAL, @@ -540,7 +540,7 @@ public class Main { * Updates an existing test project with a new path to the main project. */ private void updateTestProject() { - ProjectCreator creator = new ProjectCreator(mOsSdkFolder, + ProjectCreator creator = new ProjectCreator(mSdkManager, mOsSdkFolder, mSdkCommandLine.isVerbose() ? OutputLevel.VERBOSE : mSdkCommandLine.isSilent() ? OutputLevel.SILENT : OutputLevel.NORMAL, diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/AddOnTarget.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/AddOnTarget.java index 9237b76..00c5ceb 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/AddOnTarget.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/AddOnTarget.java @@ -216,6 +216,14 @@ final class AddOnTarget implements IAndroidTarget { return mBasePlatform.getProperties(); } + public int getAntBuildRevision() { + return mBasePlatform.getAntBuildRevision(); + } + + public int getAntTemplatesRevision() { + return mBasePlatform.getAntTemplatesRevision(); + } + public int getUsbVendorId() { return mVendorId; } diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/IAndroidTarget.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/IAndroidTarget.java index d3ce965..8035ab0 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/IAndroidTarget.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/IAndroidTarget.java @@ -186,6 +186,15 @@ public interface IAndroidTarget extends Comparable<IAndroidTarget> { */ Map<String, String> getProperties(); + /** + * Returns the revision number of the Ant build system supported by this target. + */ + int getAntBuildRevision(); + + /** + * Returns the revision number of the Ant templates supported by this target. + */ + int getAntTemplatesRevision(); /** * Returns the USB Vendor ID for the vendor of this target. diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java index c529610..53e7127 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/PlatformTarget.java @@ -262,6 +262,28 @@ final class PlatformTarget implements IAndroidTarget { return mProperties; // mProperties is unmodifiable. } + public int getAntBuildRevision() { + try { + String value = getProperty("ant.build.revision"); + return Integer.parseInt(value); + } catch (NumberFormatException e) { + // ignore, return 1; + } + + return 1; + } + + public int getAntTemplatesRevision() { + try { + String value = getProperty("ant.templates.revision"); + return Integer.parseInt(value); + } catch (NumberFormatException e) { + // ignore, return 1; + } + + return 1; + } + // ---- platform only methods. void setSkins(String[] skins) { diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java index ff1c63a..847e3d1 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/SdkConstants.java @@ -268,10 +268,13 @@ public final class SdkConstants { * This is an OS path, ending with a separator. */ public final static String OS_ADDON_LIBS_FOLDER = FD_ADDON_LIBS + File.separator; - /** Skin default **/ public final static String SKIN_DEFAULT = "default"; + /** Ant revision value: Library support introduction */ + public final static int ANT_REV_LIBRARY = 2; + + /** Returns the appropriate name for the 'android' command, which is 'android.bat' for * Windows and 'android' for all other platforms. */ public static String androidCmdName() { diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/project/ProjectCreator.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/project/ProjectCreator.java index 5b9bb60..97f84bb 100644 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/project/ProjectCreator.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/project/ProjectCreator.java @@ -132,8 +132,10 @@ public class ProjectCreator { private final ISdkLog mLog; private final String mSdkFolder; + private final SdkManager mSdkManager; - public ProjectCreator(String sdkFolder, OutputLevel level, ISdkLog log) { + public ProjectCreator(SdkManager sdkManager, String sdkFolder, OutputLevel level, ISdkLog log) { + mSdkManager = sdkManager; mSdkFolder = sdkFolder; mLevel = level; mLog = log; @@ -415,14 +417,28 @@ public class ProjectCreator { File projectFolder = androidManifest.getParentFile(); // Check there's a default.properties with a target *or* --target was specified + IAndroidTarget originalTarget = null; ProjectProperties props = ProjectProperties.load(folderPath, PropertyType.DEFAULT); - if (props == null || props.getProperty(ProjectProperties.PROPERTY_TARGET) == null) { - if (target == null) { + if (props != null) { + String targetHash = props.getProperty(ProjectProperties.PROPERTY_TARGET); + originalTarget = mSdkManager.getTargetFromHashString(targetHash); + } + + if (originalTarget == null && target == null) { + mLog.error(null, + "The project either has no target set or the target is invalid.\n" + + "Please provide a --target to the '%1$s update' command.", + SdkConstants.androidCmdName()); + return false; + } + + // before doing anything, make sure library (if present) can be applied. + if (libraryPath != null) { + IAndroidTarget finalTarget = target != null ? target : originalTarget; + if (finalTarget.getAntBuildRevision() < SdkConstants.ANT_REV_LIBRARY) { mLog.error(null, - "There is no %1$s file in '%2$s'. Please provide a --target to the '%3$s update' command.", - PropertyType.DEFAULT.getFilename(), - folderPath, - SdkConstants.androidCmdName()); + "The build system for this project target (%1$s) does not support libraries", + finalTarget.getFullName()); return false; } } diff --git a/sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/MockAddonPackage.java b/sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/MockAddonPackage.java index a922131..051a7cb 100755 --- a/sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/MockAddonPackage.java +++ b/sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/MockAddonPackage.java @@ -141,6 +141,12 @@ public class MockAddonPackage extends AddonPackage { throw new UnsupportedOperationException("Implement this as needed for tests");
}
- }
+ public int getAntBuildRevision() {
+ return 1;
+ }
+ public int getAntTemplatesRevision() {
+ return 1;
+ }
+ }
}
diff --git a/sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/MockPlatformPackage.java b/sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/MockPlatformPackage.java index 42b2d44..35817f2 100755 --- a/sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/MockPlatformPackage.java +++ b/sdkmanager/libs/sdklib/tests/com/android/sdklib/internal/repository/MockPlatformPackage.java @@ -173,6 +173,12 @@ public class MockPlatformPackage extends PlatformPackage { throw new UnsupportedOperationException("Implement this as needed for tests");
}
- }
+ public int getAntBuildRevision() {
+ return 1;
+ }
+ public int getAntTemplatesRevision() {
+ return 1;
+ }
+ }
}
|