summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2021-08-16 20:19:46 +0300
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2021-08-26 08:03:09 +0000
commitcd8da8fe5f608d4968b90f19f30b515058605b8c (patch)
tree0f89aea523044e8734a6e54bc6330194f14f807d /src
parent34a884a52a8e20ac7f8392494a843581d412bbaa (diff)
downloadqt-creator-cd8da8fe5f608d4968b90f19f30b515058605b8c.tar.gz
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>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/android/androidbuildapkstep.cpp3
-rw-r--r--src/plugins/android/androidconfigurations.cpp4
-rw-r--r--src/plugins/android/androidmanager.cpp9
-rw-r--r--src/plugins/android/androidmanager.h3
-rw-r--r--src/plugins/android/androidmanifesteditorwidget.cpp27
5 files changed, 28 insertions, 18 deletions
diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp
index 1e89531172..d9598d51b4 100644
--- a/src/plugins/android/androidbuildapkstep.cpp
+++ b/src/plugins/android/androidbuildapkstep.cpp
@@ -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();
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 9d5f871300..033fb26958 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -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
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp
index f2e75a5fd4..274b338f80 100644
--- a/src/plugins/android/androidmanager.cpp
+++ b/src/plugins/android/androidmanager.cpp
@@ -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)
diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h
index 62448332ac..97cf937160 100644
--- a/src/plugins/android/androidmanager.h
+++ b/src/plugins/android/androidmanager.h
@@ -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);
diff --git a/src/plugins/android/androidmanifesteditorwidget.cpp b/src/plugins/android/androidmanifesteditorwidget.cpp
index db74a95397..e9c065ddd1 100644
--- a/src/plugins/android/androidmanifesteditorwidget.cpp
+++ b/src/plugins/android/androidmanifesteditorwidget.cpp
@@ -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);
-
- for (int i = apiLevels.first; i < apiLevels.second + 1; ++i)
- m_androidTargetSdkVersion->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 = 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)