diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-08-16 20:19:46 +0300 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-08-26 08:03:09 +0000 |
commit | cd8da8fe5f608d4968b90f19f30b515058605b8c (patch) | |
tree | 0f89aea523044e8734a6e54bc6330194f14f807d /src | |
parent | 34a884a52a8e20ac7f8392494a843581d412bbaa (diff) | |
download | qt-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.cpp | 3 | ||||
-rw-r--r-- | src/plugins/android/androidconfigurations.cpp | 4 | ||||
-rw-r--r-- | src/plugins/android/androidmanager.cpp | 9 | ||||
-rw-r--r-- | src/plugins/android/androidmanager.h | 3 | ||||
-rw-r--r-- | src/plugins/android/androidmanifesteditorwidget.cpp | 27 |
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) |