Android: Remove "ndkPath" entry from sdk_definitions.json

Since a long while, an ndk within an Android SDK installation resides
under a subdirectory "ndk/<ndkversion>". 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 <assam.boudjelthia@qt.io>
This commit is contained in:
Alessandro Portale
2023-01-06 15:39:05 +01:00
parent 4f138c1a21
commit 6d79c5c2b3
5 changed files with 30 additions and 21 deletions

View File

@@ -18,28 +18,23 @@
"specific_qt_versions": [ "specific_qt_versions": [
{ {
"versions": ["default"], "versions": ["default"],
"sdk_essential_packages": ["build-tools;31.0.0", "ndk;25.1.8937393"], "sdk_essential_packages": ["build-tools;31.0.0", "ndk;25.1.8937393"]
"ndk_path": "ndk/25.1.8937393"
}, },
{ {
"versions": ["6.4"], "versions": ["6.4"],
"sdk_essential_packages": ["build-tools;31.0.0", "ndk;23.1.7779620"], "sdk_essential_packages": ["build-tools;31.0.0", "ndk;23.1.7779620"]
"ndk_path": "ndk/23.1.7779620"
}, },
{ {
"versions": ["6.3", "6.2", "5.15.[9-20]"], "versions": ["6.3", "6.2", "5.15.[9-20]"],
"sdk_essential_packages": ["build-tools;31.0.0", "ndk;22.1.7171670"], "sdk_essential_packages": ["build-tools;31.0.0", "ndk;22.1.7171670"]
"ndk_path": "ndk/22.1.7171670"
}, },
{ {
"versions": ["5.15.[0-8]", "5.14.[0-2]", "5.13.2", "6.0", "6.1"], "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"], "sdk_essential_packages": ["build-tools;31.0.0", "ndk;21.3.6528147"]
"ndk_path": "ndk/21.3.6528147"
}, },
{ {
"versions": ["5.12.[0-5]", "5.13.[0-1]"], "versions": ["5.12.[0-5]", "5.13.[0-1]"],
"sdk_essential_packages": ["build-tools;28.0.2", "ndk;19.2.5345600"], "sdk_essential_packages": ["build-tools;28.0.2", "ndk;19.2.5345600"]
"ndk_path": "ndk/19.2.5345600"
} }
] ]
} }

View File

@@ -77,7 +77,7 @@ const char SdkToolsUrlKey[] = "sdk_tools_url";
const char CommonKey[] = "common"; const char CommonKey[] = "common";
const char SdkEssentialPkgsKey[] = "sdk_essential_packages"; const char SdkEssentialPkgsKey[] = "sdk_essential_packages";
const char VersionsKey[] = "versions"; const char VersionsKey[] = "versions";
const char NdkPathKey[] = "ndk_path"; const char NdksSubDir[] = "ndk/";
const char SpecificQtVersionsKey[] = "specific_qt_versions"; const char SpecificQtVersionsKey[] = "specific_qt_versions";
const char DefaultVersionKey[] = "default"; const char DefaultVersionKey[] = "default";
const char LinuxOsKey[] = "linux"; const char LinuxOsKey[] = "linux";
@@ -123,6 +123,11 @@ namespace {
{ {
return Core::ICore::installerResourcePath("android.xml").toString(); 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) { for (const QJsonValue &item : versionsArray) {
QJsonObject itemObj = item.toObject(); QJsonObject itemObj = item.toObject();
SdkForQtVersions specificVersion; SdkForQtVersions specificVersion;
specificVersion.ndkPath = itemObj[NdkPathKey].toString();
const auto pkgs = itemObj[SdkEssentialPkgsKey].toArray(); const auto pkgs = itemObj[SdkEssentialPkgsKey].toArray();
for (const QJsonValue &pkg : pkgs) for (const QJsonValue &pkg : pkgs)
specificVersion.essentialPackages.append(pkg.toString()); specificVersion.essentialPackages.append(pkg.toString());
@@ -850,7 +854,7 @@ FilePath AndroidConfig::ndkLocation(const QtVersion *qtVersion) const
{ {
if (!m_defaultNdk.isEmpty()) if (!m_defaultNdk.isEmpty())
return m_defaultNdk; // A selected default NDK is good for any Qt version 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 QVersionNumber AndroidConfig::ndkVersion(const QtVersion *qtVersion) const
@@ -929,8 +933,8 @@ bool AndroidConfig::allEssentialsInstalled(AndroidSdkManager *sdkManager)
break; break;
} }
if (!m_defaultNdk.isEmpty()) if (!m_defaultNdk.isEmpty())
essentialPkgs = Utils::filtered(essentialPkgs, essentialPkgs = Utils::filtered(essentialPkgs, [] (const QString &p) {
[](const QString &p){ return !p.startsWith("ndk;"); }); return !p.startsWith(ndkPackageMarker()); });
return essentialPkgs.isEmpty() ? true : false; return essentialPkgs.isEmpty() ? true : false;
} }
@@ -952,13 +956,23 @@ QStringList AndroidConfig::essentialsFromQtVersion(const QtVersion &version) con
return m_defaultSdkDepends.essentialPackages; 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) for (const SdkForQtVersions &item : m_specificQtVersions)
if (item.containsVersion(version.qtVersion())) if (item.containsVersion(version.qtVersion()))
return item.ndkPath; return ndkSubPath(item);
return m_defaultSdkDepends.ndkPath; return ndkSubPath(m_defaultSdkDepends);
} }
QStringList AndroidConfig::defaultEssentials() const QStringList AndroidConfig::defaultEssentials() const

View File

@@ -51,7 +51,6 @@ struct SdkForQtVersions
{ {
QList<QVersionNumber> versions; QList<QVersionNumber> versions;
QStringList essentialPackages; QStringList essentialPackages;
QString ndkPath;
public: public:
bool containsVersion(const QVersionNumber &qtVersion) const; bool containsVersion(const QVersionNumber &qtVersion) const;
@@ -80,7 +79,7 @@ public:
QUrl sdkToolsUrl() const { return m_sdkToolsUrl; } QUrl sdkToolsUrl() const { return m_sdkToolsUrl; }
QByteArray getSdkToolsSha256() const { return m_sdkToolsSha256; } 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 defaultEssentials() const;
QStringList essentialsFromQtVersion(const QtSupport::QtVersion &version) const; QStringList essentialsFromQtVersion(const QtSupport::QtVersion &version) const;

View File

@@ -81,6 +81,7 @@ const Utils::Id AndroidAvdPath = "AndroidAvdPath";
// SDK Tools // SDK Tools
const char cmdlineToolsName[] = "cmdline-tools"; const char cmdlineToolsName[] = "cmdline-tools";
const char ndkPackageName[] = "ndk";
} // namespace Constants; } // namespace Constants;
} // namespace Android } // namespace Android

View File

@@ -295,7 +295,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(MarkerTagsType, markerTags, ({
{SdkManagerOutputParser::MarkerTag::CmdlineSdkToolsMarker, Constants::cmdlineToolsName}, {SdkManagerOutputParser::MarkerTag::CmdlineSdkToolsMarker, Constants::cmdlineToolsName},
{SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"}, {SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"},
{SdkManagerOutputParser::MarkerTag::EmulatorToolsMarker, "emulator"}, {SdkManagerOutputParser::MarkerTag::EmulatorToolsMarker, "emulator"},
{SdkManagerOutputParser::MarkerTag::NdkMarker, "ndk"}, {SdkManagerOutputParser::MarkerTag::NdkMarker, Constants::ndkPackageName},
{SdkManagerOutputParser::MarkerTag::ExtrasMarker, "extras"} {SdkManagerOutputParser::MarkerTag::ExtrasMarker, "extras"}
})); }));