From e9c944065301b66c3434dc5d26c365190b67c39e Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Mon, 24 Aug 2020 09:24:22 +0300 Subject: [PATCH] Android: allow passing apps arguments via manifest on non-debug mode Uses 00a1e5da7e1aea373a7e6be1d51e1573ff167dd8. Task-number: QTCREATORBUG-23712 Change-Id: I9a7e134420b608815589578f3851abf150674fd3 Reviewed-by: Ville Voutilainen --- src/plugins/android/androidconstants.h | 1 + src/plugins/android/androidrunconfiguration.cpp | 11 ++++++++++- src/plugins/android/androidrunnerworker.cpp | 4 +++- src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp | 3 +++ src/plugins/qmakeprojectmanager/qmakenodes.cpp | 2 ++ src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp | 1 + src/plugins/qmakeprojectmanager/qmakeparsernodes.h | 1 + 7 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androidconstants.h b/src/plugins/android/androidconstants.h index 7c402fea127..14534979ae7 100644 --- a/src/plugins/android/androidconstants.h +++ b/src/plugins/android/androidconstants.h @@ -65,6 +65,7 @@ const char ANDROID_ARCHITECTURE[] = "Android.Architecture"; const char ANDROID_PACKAGE_SOURCE_DIR[] = "AndroidPackageSourceDir"; const char ANDROID_EXTRA_LIBS[] = "AndroidExtraLibs"; const char ANDROID_ABIS[] = "ANDROID_ABIS"; +const char ANDROID_APPLICATION_ARGUMENTS[] = "ANDROID_APPLICATION_ARGUMENTS"; const char ANDROID_PACKAGENAME[] = "Android.PackageName"; const char ANDROID_PACKAGE_INSTALLATION_STEP_ID[] diff --git a/src/plugins/android/androidrunconfiguration.cpp b/src/plugins/android/androidrunconfiguration.cpp index 7b642f036e7..6803ffaa1a2 100644 --- a/src/plugins/android/androidrunconfiguration.cpp +++ b/src/plugins/android/androidrunconfiguration.cpp @@ -112,7 +112,16 @@ AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Utils::Id id) auto envAspect = addAspect(); envAspect->addSupportedBaseEnvironment(tr("Clean Environment"), {}); - addAspect(); + auto extraAppArgsAspect = addAspect(); + + connect(extraAppArgsAspect, &ArgumentsAspect::argumentsChanged, this, [target](const QString &arguments) { + if (target->buildConfigurations().first()->buildType() == BuildConfiguration::BuildType::Release) { + const QString buildKey = target->activeBuildKey(); + target->buildSystem()->setExtraData(buildKey, + Android::Constants::ANDROID_APPLICATION_ARGUMENTS, + arguments); + } + }); auto amStartArgsAspect = addAspect(); amStartArgsAspect->setId(Constants::ANDROID_AMSTARTARGS); diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index a1ec359a81b..cd3d07362ee 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -286,7 +286,9 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa qCDebug(androidRunWorkerLog) << "Environment variables for the app" << m_extraEnvVars.toStringList(); - m_extraAppParams = runControl->runnable().commandLineArguments; + if (target->buildConfigurations().first()->buildType() != BuildConfiguration::BuildType::Release) { + m_extraAppParams = runControl->runnable().commandLineArguments; + } if (auto aspect = runControl->aspect(Constants::ANDROID_AMSTARTARGS)) { const QString startArgs = static_cast(aspect)->value(); diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp index 1b487a5a6c5..b505de7eb4d 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectnodes.cpp @@ -136,6 +136,9 @@ QVariant CMakeTargetNode::data(Utils::Id role) const if (role == Android::Constants::AndroidExtraLibs) return value("ANDROID_EXTRA_LIBS"); + if (role == Android::Constants::ANDROID_APPLICATION_ARGUMENTS) + return value("QT_ANDROID_APPLICATION_ARGUMENTS"); + if (role == Android::Constants::AndroidArch) return value("ANDROID_ABI"); diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index e298519316d..cecdea57303 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -436,6 +436,8 @@ bool QmakeProFileNode::setData(Utils::Id role, const QVariant &value) const return pro->setProVariable("ANDROID_PACKAGE_SOURCE_DIR", {value.toString()}, scope, flags); if (role == Android::Constants::ANDROID_ABIS) return pro->setProVariable("ANDROID_ABIS", {value.toStringList()}, scope, flags); + if (role == Android::Constants::ANDROID_APPLICATION_ARGUMENTS) + return pro->setProVariable("ANDROID_APPLICATION_ARGUMENTS", {value.toString()}, scope, flags); return false; } diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index fec1da97553..6a18b68f8f0 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -1589,6 +1589,7 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input) result->newVarValues[Variable::AndroidDeploySettingsFile] = exactReader->values(QLatin1String("ANDROID_DEPLOYMENT_SETTINGS_FILE")); result->newVarValues[Variable::AndroidPackageSourceDir] = exactReader->values(QLatin1String("ANDROID_PACKAGE_SOURCE_DIR")); result->newVarValues[Variable::AndroidAbis] = exactReader->values(QLatin1String("ANDROID_ABIS")); + result->newVarValues[Variable::AndroidApplicationArguments] = exactReader->values(QLatin1String("ANDROID_APPLICATION_ARGUMENTS")); result->newVarValues[Variable::AndroidExtraLibs] = exactReader->values(QLatin1String("ANDROID_EXTRA_LIBS")); result->newVarValues[Variable::AppmanPackageDir] = exactReader->values(QLatin1String("AM_PACKAGE_DIR")); result->newVarValues[Variable::AppmanManifest] = exactReader->values(QLatin1String("AM_MANIFEST")); diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 28a92dce377..a5dcae96d69 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -101,6 +101,7 @@ enum class Variable { AndroidAbis, AndroidPackageSourceDir, AndroidExtraLibs, + AndroidApplicationArguments, AppmanPackageDir, AppmanManifest, IsoIcons,