Android: Make api level M known

If we can't convert the string to an int value, than we are going to
read the settings file. If that fails, we fallback to  string
comparation.

Task-number: QTCREATORBUG-14537
Change-Id: I0c4c5811f246ef1835c80837879d815cfa27b5d7
Reviewed-by: BogDan Vatra <bogdan@kde.org>
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
This commit is contained in:
Daniel Teske
2015-06-11 12:35:23 +02:00
committed by BogDan Vatra
parent 8e2370638a
commit 2a049708e7
3 changed files with 23 additions and 6 deletions

View File

@@ -61,6 +61,7 @@ AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step)
// Target sdk combobox // Target sdk combobox
int minApiLevel = 9; int minApiLevel = 9;
QStringList targets = AndroidConfig::apiLevelNamesFor(AndroidConfigurations::currentConfig().sdkTargets(minApiLevel)); QStringList targets = AndroidConfig::apiLevelNamesFor(AndroidConfigurations::currentConfig().sdkTargets(minApiLevel));
targets.removeDuplicates();
m_ui->targetSDKComboBox->addItems(targets); m_ui->targetSDKComboBox->addItems(targets);
m_ui->targetSDKComboBox->setCurrentIndex(targets.indexOf(AndroidManager::buildTargetSDK(step->target()))); m_ui->targetSDKComboBox->setCurrentIndex(targets.indexOf(AndroidManager::buildTargetSDK(step->target())));

View File

@@ -176,6 +176,24 @@ namespace {
return false; return false;
} }
// Some preview sdks use a non integer version
int apiLevelFromAndroidList(const QString &string)
{
bool ok;
int result = string.toInt(&ok);
if (ok)
return result;
Utils::FileName sdkLocation = AndroidConfigurations::currentConfig().sdkLocation();
sdkLocation.appendPath(QLatin1String("/platforms/android-") + string + QLatin1String("/source.properties"));
result = QSettings(sdkLocation.toString(), QSettings::IniFormat).value(QLatin1String("AndroidVersion.ApiLevel")).toInt(&ok);
if (ok)
return result;
if (string == QLatin1String("L"))
return 21;
if (string == QLatin1String("MNC"))
return 22;
return 23; // At least
}
} }
////////////////////////////////// //////////////////////////////////
@@ -397,7 +415,8 @@ void AndroidConfig::updateAvailableSdkPlatforms() const
if (index == -1) if (index == -1)
continue; continue;
QString androidTarget = line.mid(index + 1, line.length() - index - 2); QString androidTarget = line.mid(index + 1, line.length() - index - 2);
platform.apiLevel = androidTarget.mid(androidTarget.lastIndexOf(QLatin1Char('-')) + 1).toInt(); const QString tmp = androidTarget.mid(androidTarget.lastIndexOf(QLatin1Char('-')) + 1);
platform.apiLevel = apiLevelFromAndroidList(tmp);
} else if (line.startsWith(QLatin1String("Name:"))) { } else if (line.startsWith(QLatin1String("Name:"))) {
platform.name = line.mid(6); platform.name = line.mid(6);
} else if (line.startsWith(QLatin1String("Tag/ABIs :"))) { } else if (line.startsWith(QLatin1String("Tag/ABIs :"))) {
@@ -724,10 +743,7 @@ QVector<AndroidDeviceInfo> AndroidConfig::androidVirtualDevices(const QString &a
if (lastIndex == -1) // skip line if (lastIndex == -1) // skip line
break; break;
QString tmp = line.mid(lastIndex).remove(QLatin1Char(')')).trimmed(); QString tmp = line.mid(lastIndex).remove(QLatin1Char(')')).trimmed();
if (tmp == QLatin1String("L")) // HACK for android-L preview dev.sdk = apiLevelFromAndroidList(tmp);
dev.sdk = 20;
else
dev.sdk = tmp.toInt();
} }
if (line.contains(QLatin1String("Tag/ABI:"))) { if (line.contains(QLatin1String("Tag/ABI:"))) {
int lastIndex = line.lastIndexOf(QLatin1Char('/')) + 1; int lastIndex = line.lastIndexOf(QLatin1Char('/')) + 1;

View File

@@ -281,7 +281,7 @@ QString AndroidManager::loadLocalJarsInitClasses(ProjectExplorer::Target *target
QPair<int, int> AndroidManager::apiLevelRange() QPair<int, int> AndroidManager::apiLevelRange()
{ {
return qMakePair(9, 21); return qMakePair(9, 22);
} }
QString AndroidManager::androidNameForApiLevel(int x) QString AndroidManager::androidNameForApiLevel(int x)