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"} }));