diff options
author | Raphael Moll <ralf@android.com> | 2010-04-23 11:06:20 -0700 |
---|---|---|
committer | Android Code Review <code-review@android.com> | 2010-04-23 11:06:20 -0700 |
commit | 2661b50f66a9b86a2950279736e0b968c3b7252f (patch) | |
tree | 071f4ba1e7887b5673bc247dc120451f432dc54f | |
parent | 2ef80f2c633bbaa1a5b647fda83a59c33fbf232e (diff) | |
parent | 06f1db5f1e0dc01f7a318b2fabbbd24f00823ca3 (diff) | |
download | sdk-2661b50f66a9b86a2950279736e0b968c3b7252f.zip sdk-2661b50f66a9b86a2950279736e0b968c3b7252f.tar.gz sdk-2661b50f66a9b86a2950279736e0b968c3b7252f.tar.bz2 |
Merge "Fix auto launch config to respect minSdkVersion"
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/AndroidLaunchController.java | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/AndroidLaunchController.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/AndroidLaunchController.java index 4c8621e..2f959ff 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/AndroidLaunchController.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/AndroidLaunchController.java @@ -313,7 +313,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } // get the project target - final IAndroidTarget projectTarget = currentSdk.getTarget(project); + IAndroidTarget projectTarget = currentSdk.getTarget(project); // FIXME: check errors on missing sdk, AVD manager, or project target. @@ -358,6 +358,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener if (preferredAvd != null) { // look for a matching device + for (IDevice d : devices) { String deviceAvd = d.getAvdName(); if (deviceAvd != null && deviceAvd.equals(config.mAvdName)) { @@ -385,6 +386,47 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } // no (valid) preferred AVD? look for one. + + // If the API level requested in the manifest is lower than the current project + // target, when we will iterate devices/avds later ideally we will want to find + // a device/avd which target is as close to the manifest as possible (instead of + // a device which target is the same as the project's target) and use it as the + // new default. + + int reqApiLevel = 0; + try { + reqApiLevel = Integer.parseInt(requiredApiVersionNumber); + + if (reqApiLevel > 0 && reqApiLevel < projectTarget.getVersion().getApiLevel()) { + int maxDist = projectTarget.getVersion().getApiLevel() - reqApiLevel; + IAndroidTarget candidate = null; + + for (IAndroidTarget target : currentSdk.getTargets()) { + if (target.canRunOn(projectTarget)) { + int currDist = target.getVersion().getApiLevel() - reqApiLevel; + if (currDist >= 0 && currDist < maxDist) { + maxDist = currDist; + candidate = target; + if (maxDist == 0) { + // Found a perfect match + break; + } + } + } + } + + if (candidate != null) { + // We found a better SDK target candidate, that is closer to the + // API level from minSdkVersion than the one currently used by the + // project. Below (in the for...devices loop) we'll try to find + // a device/AVD for it. + projectTarget = candidate; + } + } + } catch (NumberFormatException e) { + // pass + } + HashMap<IDevice, AvdInfo> compatibleRunningAvds = new HashMap<IDevice, AvdInfo>(); boolean hasDevice = false; // if there's 1+ device running, we may force manual mode, // as we cannot always detect proper compatibility with @@ -507,6 +549,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } // bring up the device chooser. + final IAndroidTarget desiredProjectTarget = projectTarget; AdtPlugin.getDisplay().asyncExec(new Runnable() { public void run() { try { @@ -514,7 +557,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener // or the AVD to launch. DeviceChooserDialog dialog = new DeviceChooserDialog( AdtPlugin.getDisplay().getActiveShell(), - response, launchInfo.getPackageName(), projectTarget); + response, launchInfo.getPackageName(), desiredProjectTarget); if (dialog.open() == Dialog.OK) { AndroidLaunchController.this.continueLaunch(response, project, launch, launchInfo, config); |