diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index c8660af96ff..84532676f99 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -51,6 +51,9 @@ #include #include +#include + +#include #include #include @@ -253,10 +256,29 @@ FilePath AndroidManager::androidBuildDirectory(const Target *target) return buildDirectory(target) / Constants::ANDROID_BUILD_DIRECTORY; } +bool AndroidManager::isQt5CmakeProject(const ProjectExplorer::Target *target) +{ + const QtSupport::BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target->kit()); + const bool isQt5 = qt && qt->qtVersion() < QtSupport::QtVersionNumber{6, 0, 0}; + const Core::Context cmakeCtx = Core::Context(CMakeProjectManager::Constants::CMAKE_PROJECT_ID); + const bool isCmakeProject = (target->project()->projectContext() == cmakeCtx); + return isQt5 && isCmakeProject; +} + FilePath AndroidManager::buildDirectory(const Target *target) { - if (const BuildSystem *bs = target->buildSystem()) - return bs->buildTarget(target->activeBuildKey()).workingDirectory; + if (const BuildSystem *bs = target->buildSystem()) { + const QString buildKey = target->activeBuildKey(); + const FilePath buildDir = bs->buildTarget(target->activeBuildKey()).workingDirectory; + if (isQt5CmakeProject(target)) { + // Return the main build dir and not the android libs dir + const QString libsDir = QString(Constants::ANDROID_BUILD_DIRECTORY) + "/libs"; + Utils::FilePath parentDuildDir = buildDir.parentDir(); + if (parentDuildDir.endsWith(libsDir) || libsDir.endsWith(libsDir + "/")) + return parentDuildDir.parentDir().parentDir(); + } + return buildDir; + } return {}; } diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h index a65b51677e3..a1ac936bfaf 100644 --- a/src/plugins/android/androidmanager.h +++ b/src/plugins/android/androidmanager.h @@ -93,6 +93,8 @@ public: static QStringList applicationAbis(const ProjectExplorer::Target *target); static QString archTriplet(const QString &abi); + static bool isQt5CmakeProject(const ProjectExplorer::Target *target); + // TODO: remove this on 6.0 branch, kept here for binary compatibility for 5.0 release. static Utils::FilePath dirPath(const ProjectExplorer::Target *target); static Utils::FilePath androidBuildDirectory(const ProjectExplorer::Target *target); diff --git a/src/plugins/android/androidqtversion.cpp b/src/plugins/android/androidqtversion.cpp index 24a9a235f46..3cc9b06ccd4 100644 --- a/src/plugins/android/androidqtversion.cpp +++ b/src/plugins/android/androidqtversion.cpp @@ -43,7 +43,6 @@ #include #include #include -#include #include @@ -183,18 +182,15 @@ Utils::FilePath AndroidQtVersion::androidDeploymentSettings(const Target *target } // If unavailable, construct the name by ourselves (CMake) - const BaseQtVersion *qt = QtSupport::QtKitAspect::qtVersion(target->kit()); - const bool isQt5 = qt && qt->qtVersion() < QtSupport::QtVersionNumber{6, 0, 0}; - const Core::Context cmakeCtx = Core::Context(CMakeProjectManager::Constants::CMAKE_PROJECT_ID); - const bool isCmakeProject = (target->project()->projectContext() == cmakeCtx); const BuildSystem *bs = target->buildSystem(); if (!bs) return {}; - const BuildTargetInfo buildTarget = bs->buildTarget(buildKey); - return buildTarget.workingDirectory.pathAppended((isQt5 && isCmakeProject) - ? QLatin1String("android_deployment_settings.json") - : QString::fromLatin1("android-%1-deployment-settings.json") - .arg(buildTarget.displayName)); + const QString displayName = bs->buildTarget(buildKey).displayName; + return AndroidManager::buildDirectory(target).pathAppended( + AndroidManager::isQt5CmakeProject(target) + ? QLatin1String("android_deployment_settings.json") + : QString::fromLatin1("android-%1-deployment-settings.json") + .arg(displayName)); } void AndroidQtVersion::parseMkSpec(ProFileEvaluator *evaluator) const