From 1d683dcc0730eecdf1054ecc7cbe86695bae3f1d Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 23 Nov 2018 10:08:35 +0100 Subject: [PATCH] Android: Correct setting ANDROID_NDK_PLATFORM Instead of using always just the minimum SDK version we need to differentiate between SDK and NDK version. Fixes: QTCREATORBUG-21536 Change-Id: I2f99c9d40ab05ccd2a4b8efeb2cd0300ecf0cf3a Reviewed-by: BogDan Vatra Reviewed-by: Eike Ziller Reviewed-by: Vikas Pachdha --- src/plugins/android/androidmanager.cpp | 7 +++++++ src/plugins/android/androidmanager.h | 1 + src/plugins/android/androidqtversion.cpp | 16 ++++++++++++++++ src/plugins/android/androidqtversion.h | 2 ++ .../androidqmakebuildconfigurationfactory.cpp | 3 ++- 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 336a1befd29..88778a989a8 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -249,6 +249,13 @@ int AndroidManager::minimumSDK(const ProjectExplorer::Kit *kit) return minSDKVersion; } +int AndroidManager::minimumNDK(ProjectExplorer::Target *target) +{ + auto qt = static_cast( + QtSupport::QtKitInformation::qtVersion(target->kit())); + return qt->mininmumNDK(); +} + QString AndroidManager::buildTargetSDK(ProjectExplorer::Target *target) { auto androidBuildApkStep diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h index 444710ac918..00b1fd12154 100644 --- a/src/plugins/android/androidmanager.h +++ b/src/plugins/android/androidmanager.h @@ -71,6 +71,7 @@ public: static int minimumSDK(ProjectExplorer::Target *target); static int minimumSDK(const ProjectExplorer::Kit *kit); + static int minimumNDK(ProjectExplorer::Target *target); static QString targetArch(ProjectExplorer::Target *target); diff --git a/src/plugins/android/androidqtversion.cpp b/src/plugins/android/androidqtversion.cpp index eaf47f6481f..a1a6d047bab 100644 --- a/src/plugins/android/androidqtversion.cpp +++ b/src/plugins/android/androidqtversion.cpp @@ -123,9 +123,25 @@ QString AndroidQtVersion::targetArch() const return m_targetArch; } +int AndroidQtVersion::mininmumNDK() const +{ + ensureMkSpecParsed(); + return m_minNdk; +} + void AndroidQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const { m_targetArch = evaluator->value(QLatin1String("ANDROID_TARGET_ARCH")); + const QString androidPlatform = evaluator->value(QLatin1String("ANDROID_PLATFORM")); + if (!androidPlatform.isEmpty()) { + const QRegExp regex("android-(\\d+)"); + if (regex.exactMatch(androidPlatform)) { + bool ok = false; + int tmp = regex.cap(1).toInt(&ok); + if (ok) + m_minNdk = tmp; + } + } BaseQtVersion::parseMkSpec(evaluator); } diff --git a/src/plugins/android/androidqtversion.h b/src/plugins/android/androidqtversion.h index 62bbd930c60..d009c68ceb3 100644 --- a/src/plugins/android/androidqtversion.h +++ b/src/plugins/android/androidqtversion.h @@ -55,10 +55,12 @@ public: QString description() const override; QString targetArch() const; + int mininmumNDK() const; protected: void parseMkSpec(ProFileEvaluator *) const override; private: mutable QString m_targetArch; + mutable int m_minNdk = -1; }; } // namespace Internal diff --git a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp index 308caa4719b..f32330916d0 100644 --- a/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp +++ b/src/plugins/qmakeandroidsupport/androidqmakebuildconfigurationfactory.cpp @@ -77,7 +77,8 @@ void AndroidQmakeBuildConfiguration::initialize(const BuildInfo *info) void AndroidQmakeBuildConfiguration::addToEnvironment(Utils::Environment &env) const { - QString androidNdkPlatform = AndroidConfigurations::currentConfig().bestNdkPlatformMatch(AndroidManager::minimumSDK(target())); + QString androidNdkPlatform = AndroidConfigurations::currentConfig().bestNdkPlatformMatch( + qMax(AndroidManager::minimumNDK(target()), AndroidManager::minimumSDK(target()))); env.set(QLatin1String("ANDROID_NDK_PLATFORM"), androidNdkPlatform); }