From ded34daa2b62358368a592a8aa39accdc5be1620 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 9 May 2018 09:55:37 +0200 Subject: [PATCH] QmakeAndroid: Introduce two new functions in QmakeAndroidQtSupport ... and use them to remove direct dependency of the QmakeAndroidBuildApkStep on qmake, so it can be merged into the base AndroidApkStep, leaving less build system dependent code in the QmakeAndroid plugin. Change-Id: Id7c6a9cb0e51d6b38850a0ad0e0e83a602f53338 Reviewed-by: Vikas Pachdha --- src/plugins/android/androidbuildapkstep.cpp | 3 ++- src/plugins/android/androidbuildapkstep.h | 2 -- src/plugins/android/androidmanager.cpp | 17 ++++++------ src/plugins/android/androidqtsupport.h | 2 ++ .../qmakeandroidbuildapkstep.cpp | 24 +---------------- .../qmakeandroidbuildapkstep.h | 1 - .../qmakeandroidsupport.cpp | 27 +++++++++++++++++++ .../qmakeandroidsupport/qmakeandroidsupport.h | 2 ++ 8 files changed, 43 insertions(+), 35 deletions(-) diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index 4eb37d306d4..3ebbcb2dbc5 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -148,7 +148,8 @@ bool AndroidBuildApkStep::init(QList &earlierSteps) JavaParser *parser = new JavaParser; parser->setProjectFileList(Utils::transform(target()->project()->files(ProjectExplorer::Project::AllFiles), &Utils::FileName::toString)); - parser->setSourceDirectory(androidPackageSourceDir()); + + parser->setSourceDirectory(AndroidManager::androidQtSupport(target())->packageSourceDir(target())); parser->setBuildDirectory(Utils::FileName::fromString(bc->buildDirectory().appendPath(Constants::ANDROID_BUILDDIRECTORY).toString())); setOutputParser(parser); diff --git a/src/plugins/android/androidbuildapkstep.h b/src/plugins/android/androidbuildapkstep.h index 022c4b8bc29..b7d5e5d179c 100644 --- a/src/plugins/android/androidbuildapkstep.h +++ b/src/plugins/android/androidbuildapkstep.h @@ -72,8 +72,6 @@ public: QString buildTargetSdk() const; void setBuildTargetSdk(const QString &sdk); - virtual Utils::FileName androidPackageSourceDir() const = 0; - protected: Q_INVOKABLE void showInGraphicalShell(); diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 7a757d7f07a..de927adc41c 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -33,7 +33,6 @@ #include "androiddeployqtstep.h" #include "androidqtsupport.h" #include "androidqtversion.h" -#include "androidbuildapkstep.h" #include "androidavdmanager.h" #include "androidsdkmanager.h" @@ -542,13 +541,15 @@ bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target) if (!version) return false; - AndroidBuildApkStep *buildApkStep - = AndroidGlobal::buildStep(target->activeBuildConfiguration()); - - if (!buildApkStep || !buildApkStep->androidPackageSourceDir().appendPath(QLatin1String("gradlew")).exists()) + AndroidQtSupport *qtSupport = androidQtSupport(target); + if (!qtSupport) return false; - Utils::FileName wrapperProps(buildApkStep->androidPackageSourceDir()); + Utils::FileName packageSourceDir = qtSupport->packageSourceDir(target); + if (!packageSourceDir.appendPath("gradlew").exists()) + return false; + + Utils::FileName wrapperProps = packageSourceDir; wrapperProps.appendPath(QLatin1String("gradle/wrapper/gradle-wrapper.properties")); if (wrapperProps.exists()) { GradleProperties wrapperProperties = readGradleProperties(wrapperProps.toString()); @@ -562,10 +563,10 @@ bool AndroidManager::updateGradleProperties(ProjectExplorer::Target *target) GradleProperties localProperties; localProperties["sdk.dir"] = AndroidConfigurations::currentConfig().sdkLocation().toString().toLocal8Bit(); - if (!mergeGradleProperties(buildApkStep->androidPackageSourceDir().appendPath(QLatin1String("local.properties")).toString(), localProperties)) + if (!mergeGradleProperties(packageSourceDir.appendPath("local.properties").toString(), localProperties)) return false; - QString gradlePropertiesPath = buildApkStep->androidPackageSourceDir().appendPath(QLatin1String("gradle.properties")).toString(); + QString gradlePropertiesPath = packageSourceDir.appendPath("gradle.properties").toString(); GradleProperties gradleProperties = readGradleProperties(gradlePropertiesPath); gradleProperties["qt5AndroidDir"] = version->qmakeProperty("QT_INSTALL_PREFIX") .append(QLatin1String("/src/android/java")).toLocal8Bit(); diff --git a/src/plugins/android/androidqtsupport.h b/src/plugins/android/androidqtsupport.h index 83cd3eb0d37..e039061ce9a 100644 --- a/src/plugins/android/androidqtsupport.h +++ b/src/plugins/android/androidqtsupport.h @@ -65,6 +65,8 @@ public: virtual Utils::FileName androiddeployJsonPath(const ProjectExplorer::Target *target) const = 0; virtual void manifestSaved(const ProjectExplorer::Target *target) = 0; virtual Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) = 0; + virtual QString deploySettingsFile(const ProjectExplorer::Target *target) const = 0; + virtual Utils::FileName packageSourceDir(const ProjectExplorer::Target *target) const = 0; }; } // namespace Android diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp index d861af7aee3..1f409ebd3a3 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp @@ -39,15 +39,11 @@ #include #include -#include -#include #include #include using namespace Android; -using QmakeProjectManager::QmakeProject; -using QmakeProjectManager::QmakeProFileNode; namespace QmakeAndroidSupport { namespace Internal { @@ -82,18 +78,6 @@ Utils::FileName QmakeAndroidBuildApkStep::proFilePathForInputFile() const return Utils::FileName(); } -Utils::FileName QmakeAndroidBuildApkStep::androidPackageSourceDir() const -{ - QmakeProjectManager::QmakeProject *pro = static_cast(project()); - const QmakeProjectManager::QmakeProFileNode *node - = pro->rootProjectNode()->findProFileFor(proFilePathForInputFile()); - if (!node) - return Utils::FileName(); - - QFileInfo sourceDirInfo(node->singleVariableValue(QmakeProjectManager::Variable::AndroidPackageSourceDir)); - return Utils::FileName::fromString(sourceDirInfo.canonicalFilePath()); -} - bool QmakeAndroidBuildApkStep::init(QList &earlierSteps) { if (AndroidManager::checkForQt51Files(project()->projectDirectory())) @@ -116,13 +100,7 @@ bool QmakeAndroidBuildApkStep::init(QList &earlierSteps) ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); QString outputDir = bc->buildDirectory().appendPath(Constants::ANDROID_BUILDDIRECTORY).toString(); - const auto *pro = static_cast(project()); - const QmakeProjectManager::QmakeProFileNode *node = pro->rootProjectNode()->findProFileFor(proFilePathForInputFile()); - m_skipBuilding = !node; - if (m_skipBuilding) - return true; - - QString inputFile = node->singleVariableValue(QmakeProjectManager::Variable::AndroidDeploySettingsFile); + QString inputFile = AndroidManager::androidQtSupport(target())->deploySettingsFile(target()); if (inputFile.isEmpty()) { m_skipBuilding = true; return true; diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h index 1a127283469..6435a8486aa 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h +++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.h @@ -47,7 +47,6 @@ public: Utils::FileName proFilePathForInputFile() const; protected: - Utils::FileName androidPackageSourceDir() const override; bool init(QList &earlierSteps) override; void run(QFutureInterface &fi) override; void processStarted() override; diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp index ed2e2e75716..63d7d50fd59 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.cpp @@ -40,7 +40,9 @@ #include #include +using namespace ProjectExplorer; using namespace QmakeProjectManager; +using namespace Utils; namespace QmakeAndroidSupport { namespace Internal { @@ -176,5 +178,30 @@ Utils::FileName QmakeAndroidSupport::manifestSourcePath(const ProjectExplorer::T return Utils::FileName(); } +static QmakeProFileNode *activeNodeForTarget(const Target *target) +{ + FileName proFilePathForInputFile; + if (RunConfiguration *rc = target->activeRunConfiguration()) + proFilePathForInputFile = FileName::fromString(rc->buildKey()); + const auto pro = static_cast(target->project()); + return pro->rootProjectNode()->findProFileFor(proFilePathForInputFile); +} + +QString QmakeAndroidSupport::deploySettingsFile(const Target *target) const +{ + if (QmakeProFileNode *node = activeNodeForTarget(target)) + return node->singleVariableValue(Variable::AndroidDeploySettingsFile); + return QString(); +} + +FileName QmakeAndroidSupport::packageSourceDir(const Target *target) const +{ + if (QmakeProFileNode *node = activeNodeForTarget(target)) { + QFileInfo sourceDirInfo(node->singleVariableValue(Variable::AndroidPackageSourceDir)); + return FileName::fromString(sourceDirInfo.canonicalFilePath()); + } + return FileName(); +} + } // namespace Internal } // namespace QmakeAndroidSupport diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h index a5a3cef3492..51ac3907028 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h +++ b/src/plugins/qmakeandroidsupport/qmakeandroidsupport.h @@ -44,6 +44,8 @@ public: void manifestSaved(const ProjectExplorer::Target *target) override; Utils::FileName manifestSourcePath(const ProjectExplorer::Target *target) override; + Utils::FileName packageSourceDir(const ProjectExplorer::Target *target) const override; + QString deploySettingsFile(const ProjectExplorer::Target *target) const override; }; } // namespace Internal