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