forked from qt-creator/qt-creator
Android: Get the minimum sdk level based on the used Qt version
Currently, Creator gets the minimum sdk version from a hard-coded value (16) which is used for all projects. However, this is not ideal because some Qt versions require a specific sdk level to build and run properly. So, this change ensures that the minimum sdk value is obtained based the Qt version used in the project. Fixes: QTCREATORBUG-26127 Change-Id: I948dd18d16c3d9ca587ad7712aa4c9a1bfd53972 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -176,7 +176,8 @@ AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step)
|
||||
|
||||
QWidget *AndroidBuildApkWidget::createApplicationGroup()
|
||||
{
|
||||
const int minApiSupported = AndroidManager::apiLevelRange().first;
|
||||
QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_step->target()->kit());
|
||||
const int minApiSupported = AndroidManager::defaultMinimumSDK(qt);
|
||||
QStringList targets = AndroidConfig::apiLevelNamesFor(AndroidConfigurations::sdkManager()->
|
||||
filteredSdkPlatforms(minApiSupported));
|
||||
targets.removeDuplicates();
|
||||
|
@@ -778,12 +778,12 @@ bool AndroidConfig::isValidNdk(const QString &ndkLocation) const
|
||||
|
||||
QString AndroidConfig::bestNdkPlatformMatch(int target, const BaseQtVersion *qtVersion) const
|
||||
{
|
||||
target = std::max(AndroidManager::apiLevelRange().first, target);
|
||||
target = std::max(AndroidManager::defaultMinimumSDK(qtVersion), target);
|
||||
foreach (int apiLevel, availableNdkPlatforms(qtVersion)) {
|
||||
if (apiLevel <= target)
|
||||
return QString::fromLatin1("android-%1").arg(apiLevel);
|
||||
}
|
||||
return QString("android-%1").arg(AndroidManager::apiLevelRange().first);
|
||||
return QString("android-%1").arg(AndroidManager::defaultMinimumSDK(qtVersion));
|
||||
}
|
||||
|
||||
FilePath AndroidConfig::sdkLocation() const
|
||||
|
@@ -399,9 +399,14 @@ void AndroidManager::setDeviceApiLevel(Target *target, int level)
|
||||
target->setNamedSettings(ApiLevelKey, level);
|
||||
}
|
||||
|
||||
QPair<int, int> AndroidManager::apiLevelRange()
|
||||
int AndroidManager::defaultMinimumSDK(const QtSupport::BaseQtVersion *qtVersion)
|
||||
{
|
||||
return qMakePair(16, 29);
|
||||
if (qtVersion && qtVersion->qtVersion() >= QtSupport::QtVersionNumber{6, 0})
|
||||
return 23;
|
||||
else if (qtVersion && qtVersion->qtVersion() >= QtSupport::QtVersionNumber{5, 13})
|
||||
return 21;
|
||||
else
|
||||
return 16;
|
||||
}
|
||||
|
||||
QString AndroidManager::androidNameForApiLevel(int x)
|
||||
|
@@ -31,6 +31,7 @@
|
||||
#include <QObject>
|
||||
#include <QVersionNumber>
|
||||
|
||||
#include <qtsupport/baseqtversion.h>
|
||||
#include <projectexplorer/abi.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
@@ -87,6 +88,7 @@ public:
|
||||
|
||||
static int minimumSDK(const ProjectExplorer::Target *target);
|
||||
static int minimumSDK(const ProjectExplorer::Kit *kit);
|
||||
static int defaultMinimumSDK(const QtSupport::BaseQtVersion *qtVersion);
|
||||
|
||||
static QStringList applicationAbis(const ProjectExplorer::Target *target);
|
||||
static QString archTriplet(const QString &abi);
|
||||
@@ -100,7 +102,6 @@ public:
|
||||
static QString devicePreferredAbi(const QStringList &deviceAbis, const QStringList &appAbis);
|
||||
static ProjectExplorer::Abi androidAbi2Abi(const QString &androidAbi);
|
||||
|
||||
static QPair<int, int> apiLevelRange();
|
||||
static QString androidNameForApiLevel(int x);
|
||||
|
||||
static void installQASIPackage(ProjectExplorer::Target *target, const QString &packagePath);
|
||||
|
@@ -720,18 +720,21 @@ void AndroidManifestEditorWidget::updateInfoBar()
|
||||
|
||||
void AndroidManifestEditorWidget::updateSdkVersions()
|
||||
{
|
||||
QPair<int, int> apiLevels = AndroidManager::apiLevelRange();
|
||||
for (int i = apiLevels.first; i < apiLevels.second + 1; ++i)
|
||||
m_androidMinSdkVersion->addItem(tr("API %1: %2")
|
||||
.arg(i)
|
||||
.arg(AndroidManager::androidNameForApiLevel(i)),
|
||||
i);
|
||||
static const QPair<int, int> sdkPair = qMakePair(16, 31);
|
||||
int minSdk = sdkPair.first;
|
||||
const int targetSdk = sdkPair.second;
|
||||
const Target *target = androidTarget(m_textEditorWidget->textDocument()->filePath());
|
||||
if (target) {
|
||||
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target->kit());
|
||||
minSdk = AndroidManager::defaultMinimumSDK(qt);
|
||||
}
|
||||
|
||||
for (int i = apiLevels.first; i < apiLevels.second + 1; ++i)
|
||||
m_androidTargetSdkVersion->addItem(tr("API %1: %2")
|
||||
.arg(i)
|
||||
.arg(AndroidManager::androidNameForApiLevel(i)),
|
||||
i);
|
||||
for (int i = minSdk; i <= targetSdk; ++i) {
|
||||
const QString apiStr = tr("API %1: %2").arg(i)
|
||||
.arg(AndroidManager::androidNameForApiLevel(i));
|
||||
m_androidMinSdkVersion->addItem(apiStr, i);
|
||||
m_androidTargetSdkVersion->addItem(apiStr, i);
|
||||
}
|
||||
}
|
||||
|
||||
void AndroidManifestEditorWidget::updateInfoBar(const QString &errorMessage, int line, int column)
|
||||
|
Reference in New Issue
Block a user