From 6d79c5c2b35c8d0f033bb4c16443723c9e8fbf5f Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 6 Jan 2023 15:39:05 +0100 Subject: [PATCH] Android: Remove "ndkPath" entry from sdk_definitions.json Since a long while, an ndk within an Android SDK installation resides under a subdirectory "ndk/". The "ndk_path" entry in sdk_definitions.json is therefore redundant, since the ndk version is already present. Qt 6.5+ will provide the ndk version number (see QTCREATORBUG-28629), without such ndk_path, and therefore it is helpful to contruct the ndk subpath directly from that version number. For all Qt versions. This change removes the "ndkPath" entry and the code that handles it. Task-number: QTCREATORBUG-28629 Change-Id: I5a8f204f87a53a610dbeb9d4c39633582ef209c1 Reviewed-by: Assam Boudjelthia --- share/qtcreator/android/sdk_definitions.json | 15 ++++------ src/plugins/android/androidconfigurations.cpp | 30 ++++++++++++++----- src/plugins/android/androidconfigurations.h | 3 +- src/plugins/android/androidconstants.h | 1 + src/plugins/android/androidsdkmanager.cpp | 2 +- 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/share/qtcreator/android/sdk_definitions.json b/share/qtcreator/android/sdk_definitions.json index 21e3ac99543..22e4a322d84 100644 --- a/share/qtcreator/android/sdk_definitions.json +++ b/share/qtcreator/android/sdk_definitions.json @@ -18,28 +18,23 @@ "specific_qt_versions": [ { "versions": ["default"], - "sdk_essential_packages": ["build-tools;31.0.0", "ndk;25.1.8937393"], - "ndk_path": "ndk/25.1.8937393" + "sdk_essential_packages": ["build-tools;31.0.0", "ndk;25.1.8937393"] }, { "versions": ["6.4"], - "sdk_essential_packages": ["build-tools;31.0.0", "ndk;23.1.7779620"], - "ndk_path": "ndk/23.1.7779620" + "sdk_essential_packages": ["build-tools;31.0.0", "ndk;23.1.7779620"] }, { "versions": ["6.3", "6.2", "5.15.[9-20]"], - "sdk_essential_packages": ["build-tools;31.0.0", "ndk;22.1.7171670"], - "ndk_path": "ndk/22.1.7171670" + "sdk_essential_packages": ["build-tools;31.0.0", "ndk;22.1.7171670"] }, { "versions": ["5.15.[0-8]", "5.14.[0-2]", "5.13.2", "6.0", "6.1"], - "sdk_essential_packages": ["build-tools;31.0.0", "ndk;21.3.6528147"], - "ndk_path": "ndk/21.3.6528147" + "sdk_essential_packages": ["build-tools;31.0.0", "ndk;21.3.6528147"] }, { "versions": ["5.12.[0-5]", "5.13.[0-1]"], - "sdk_essential_packages": ["build-tools;28.0.2", "ndk;19.2.5345600"], - "ndk_path": "ndk/19.2.5345600" + "sdk_essential_packages": ["build-tools;28.0.2", "ndk;19.2.5345600"] } ] } diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index ba2bb7dfec5..6239a0d4bad 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -77,7 +77,7 @@ const char SdkToolsUrlKey[] = "sdk_tools_url"; const char CommonKey[] = "common"; const char SdkEssentialPkgsKey[] = "sdk_essential_packages"; const char VersionsKey[] = "versions"; -const char NdkPathKey[] = "ndk_path"; +const char NdksSubDir[] = "ndk/"; const char SpecificQtVersionsKey[] = "specific_qt_versions"; const char DefaultVersionKey[] = "default"; const char LinuxOsKey[] = "linux"; @@ -123,6 +123,11 @@ namespace { { return Core::ICore::installerResourcePath("android.xml").toString(); } + + static QString ndkPackageMarker() + { + return QLatin1String(Constants::ndkPackageName) + ";"; + } } ////////////////////////////////// @@ -312,7 +317,6 @@ void AndroidConfig::parseDependenciesJson() for (const QJsonValue &item : versionsArray) { QJsonObject itemObj = item.toObject(); SdkForQtVersions specificVersion; - specificVersion.ndkPath = itemObj[NdkPathKey].toString(); const auto pkgs = itemObj[SdkEssentialPkgsKey].toArray(); for (const QJsonValue &pkg : pkgs) specificVersion.essentialPackages.append(pkg.toString()); @@ -850,7 +854,7 @@ FilePath AndroidConfig::ndkLocation(const QtVersion *qtVersion) const { if (!m_defaultNdk.isEmpty()) return m_defaultNdk; // A selected default NDK is good for any Qt version - return sdkLocation().pathAppended(ndkPathFromQtVersion(*qtVersion)); + return sdkLocation().resolvePath(ndkSubPathFromQtVersion(*qtVersion)); } QVersionNumber AndroidConfig::ndkVersion(const QtVersion *qtVersion) const @@ -929,8 +933,8 @@ bool AndroidConfig::allEssentialsInstalled(AndroidSdkManager *sdkManager) break; } if (!m_defaultNdk.isEmpty()) - essentialPkgs = Utils::filtered(essentialPkgs, - [](const QString &p){ return !p.startsWith("ndk;"); }); + essentialPkgs = Utils::filtered(essentialPkgs, [] (const QString &p) { + return !p.startsWith(ndkPackageMarker()); }); return essentialPkgs.isEmpty() ? true : false; } @@ -952,13 +956,23 @@ QStringList AndroidConfig::essentialsFromQtVersion(const QtVersion &version) con return m_defaultSdkDepends.essentialPackages; } -QString AndroidConfig::ndkPathFromQtVersion(const QtVersion &version) const +static FilePath ndkSubPath(const SdkForQtVersions &packages) +{ + const QString ndkPrefix = ndkPackageMarker(); + for (const QString &package : packages.essentialPackages) + if (package.startsWith(ndkPrefix)) + return FilePath::fromString(NdksSubDir) / package.sliced(ndkPrefix.length()); + + return {}; +} + +FilePath AndroidConfig::ndkSubPathFromQtVersion(const QtVersion &version) const { for (const SdkForQtVersions &item : m_specificQtVersions) if (item.containsVersion(version.qtVersion())) - return item.ndkPath; + return ndkSubPath(item); - return m_defaultSdkDepends.ndkPath; + return ndkSubPath(m_defaultSdkDepends); } QStringList AndroidConfig::defaultEssentials() const diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h index c0b531bed52..b7d86b80820 100644 --- a/src/plugins/android/androidconfigurations.h +++ b/src/plugins/android/androidconfigurations.h @@ -51,7 +51,6 @@ struct SdkForQtVersions { QList versions; QStringList essentialPackages; - QString ndkPath; public: bool containsVersion(const QVersionNumber &qtVersion) const; @@ -80,7 +79,7 @@ public: QUrl sdkToolsUrl() const { return m_sdkToolsUrl; } QByteArray getSdkToolsSha256() const { return m_sdkToolsSha256; } - QString ndkPathFromQtVersion(const QtSupport::QtVersion &version) const; + Utils::FilePath ndkSubPathFromQtVersion(const QtSupport::QtVersion &version) const; // relative! QStringList defaultEssentials() const; QStringList essentialsFromQtVersion(const QtSupport::QtVersion &version) const; diff --git a/src/plugins/android/androidconstants.h b/src/plugins/android/androidconstants.h index b8a0c419ac5..9fff3a29ab7 100644 --- a/src/plugins/android/androidconstants.h +++ b/src/plugins/android/androidconstants.h @@ -81,6 +81,7 @@ const Utils::Id AndroidAvdPath = "AndroidAvdPath"; // SDK Tools const char cmdlineToolsName[] = "cmdline-tools"; +const char ndkPackageName[] = "ndk"; } // namespace Constants; } // namespace Android diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index d50c72628f1..6a05ff1752a 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -295,7 +295,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(MarkerTagsType, markerTags, ({ {SdkManagerOutputParser::MarkerTag::CmdlineSdkToolsMarker, Constants::cmdlineToolsName}, {SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"}, {SdkManagerOutputParser::MarkerTag::EmulatorToolsMarker, "emulator"}, - {SdkManagerOutputParser::MarkerTag::NdkMarker, "ndk"}, + {SdkManagerOutputParser::MarkerTag::NdkMarker, Constants::ndkPackageName}, {SdkManagerOutputParser::MarkerTag::ExtrasMarker, "extras"} }));