diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-09-05 19:44:16 +0300 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-10-13 14:56:06 +0000 |
commit | 78da7e2922274c429bb677abf63157b8ae679d03 (patch) | |
tree | 902734cd4f666ae49f724ad863b771b8bcc38e29 /src/plugins/android | |
parent | e1a69fccb15a87ffc637898cf2248358edb01258 (diff) |
Move sdkmanager's sdk level parsing to AndroidConfig
Both the sdkmanger and avdmanager (maybe more) need to parse the sdk
level for packages and devices which may contain letters, make them
use the same logic.
Change-Id: Iff7fef3a66e00fac11b833f73f2f334a4cf1a766
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src/plugins/android')
-rw-r--r-- | src/plugins/android/androidconfigurations.cpp | 22 | ||||
-rw-r--r-- | src/plugins/android/androidconfigurations.h | 1 | ||||
-rw-r--r-- | src/plugins/android/androidsdkmanager.cpp | 26 | ||||
-rw-r--r-- | src/plugins/android/avdmanageroutputparser.cpp | 3 |
4 files changed, 27 insertions, 25 deletions
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index c769a744d2..5a09199c9d 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -418,6 +418,28 @@ QString AndroidConfig::apiLevelNameFor(const SdkPlatform *platform) QString("android-%1").arg(platform->apiLevel()) : ""; } +int AndroidConfig::platformNameToApiLevel(const QString &platformName) +{ + int apiLevel = -1; + static const QRegularExpression re("(android-)(?<apiLevel>[0-9A-Z]{1,})", + QRegularExpression::CaseInsensitiveOption); + QRegularExpressionMatch match = re.match(platformName); + if (match.hasMatch()) { + QString apiLevelStr = match.captured("apiLevel"); + bool isUInt; + apiLevel = apiLevelStr.toUInt(&isUInt); + if (!isUInt) { + if (apiLevelStr == 'Q') + apiLevel = 29; + else if (apiLevelStr == 'R') + apiLevel = 30; + else if (apiLevelStr == 'S') + apiLevel = 31; + } + } + return apiLevel; +} + bool AndroidConfig::isCmdlineSdkToolsInstalled() const { QString toolPath("cmdline-tools/latest/bin/sdkmanager"); diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h index 09f7ac85f1..db65168896 100644 --- a/src/plugins/android/androidconfigurations.h +++ b/src/plugins/android/androidconfigurations.h @@ -91,6 +91,7 @@ public: static QStringList apiLevelNamesFor(const SdkPlatformList &platforms); static QString apiLevelNameFor(const SdkPlatform *platform); + static int platformNameToApiLevel(const QString &platformName); Utils::FilePath sdkLocation() const; void setSdkLocation(const Utils::FilePath &sdkLocation); diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index 943e371178..eaa6996014 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -69,28 +69,6 @@ Q_GLOBAL_STATIC_WITH_ARGS(QRegularExpression, assertionReg, using namespace Utils; using SdkCmdFutureInterface = QFutureInterface<AndroidSdkManager::OperationOutput>; -int platformNameToApiLevel(const QString &platformName) -{ - int apiLevel = -1; - QRegularExpression re("(android-)(?<apiLevel>[0-9A-Z]{1,})", - QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(platformName); - if (match.hasMatch()) { - QString apiLevelStr = match.captured("apiLevel"); - bool isUInt; - apiLevel = apiLevelStr.toUInt(&isUInt); - if (!isUInt) { - if (apiLevelStr == 'Q') - apiLevel = 29; - else if (apiLevelStr == 'R') - apiLevel = 30; - else if (apiLevelStr == 'S') - apiLevel = 31; - } - } - return apiLevel; -} - /*! Parses the \a line for a [spaces]key[spaces]value[spaces] pattern and returns \c true if \a key is found, false otherwise. Result is copied into \a value. @@ -714,7 +692,7 @@ AndroidSdkPackage *SdkManagerOutputParser::parsePlatform(const QStringList &data SdkPlatform *platform = nullptr; GenericPackageData packageData; if (parseAbstractData(packageData, data, 2, "Platform")) { - int apiLevel = platformNameToApiLevel(packageData.headerParts.at(1)); + const int apiLevel = AndroidConfig::platformNameToApiLevel(packageData.headerParts.at(1)); if (apiLevel == -1) { qCDebug(sdkManagerLog) << "Platform: Cannot parse api level:"<< data; return nullptr; @@ -734,7 +712,7 @@ QPair<SystemImage *, int> SdkManagerOutputParser::parseSystemImage(const QString QPair <SystemImage *, int> result(nullptr, -1); GenericPackageData packageData; if (parseAbstractData(packageData, data, 4, "System-image")) { - int apiLevel = platformNameToApiLevel(packageData.headerParts.at(1)); + const int apiLevel = AndroidConfig::platformNameToApiLevel(packageData.headerParts.at(1)); if (apiLevel == -1) { qCDebug(sdkManagerLog) << "System-image: Cannot parse api level:"<< data; return result; diff --git a/src/plugins/android/avdmanageroutputparser.cpp b/src/plugins/android/avdmanageroutputparser.cpp index 0ca8a74e73..ac758f41c7 100644 --- a/src/plugins/android/avdmanageroutputparser.cpp +++ b/src/plugins/android/avdmanageroutputparser.cpp @@ -24,6 +24,7 @@ ****************************************************************************/ #include "avdmanageroutputparser.h" +#include "androidconfigurations.h" #include <projectexplorer/projectexplorerconstants.h> #include <utils/algorithm.h> @@ -97,7 +98,7 @@ static Utils::optional<AndroidDeviceInfo> parseAvd(const QStringList &deviceInfo QSettings avdInfo(avdInfoFile.toString(), QSettings::IniFormat); value = avdInfo.value(avdInfoTargetKey).toString(); if (!value.isEmpty()) - avd.sdk = value.section('-', -1).toInt(); + avd.sdk = AndroidConfig::platformNameToApiLevel(value); else qCDebug(avdOutputParserLog) << "Avd Parsing: Cannot find sdk API:" << avdInfoFile.toString(); |