Android: Support commandline arguments for Android app

Change-Id: I3910b68ebbf00e1b62da663a3e58224413a1929e
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Vikas Pachdha
2018-07-31 12:21:47 +02:00
parent e9eb1a6437
commit 1b12da2493
12 changed files with 19 additions and 23 deletions

View File

@@ -100,12 +100,11 @@ static QString toNdkArch(const QString &arch)
} }
AndroidDebugSupport::AndroidDebugSupport(RunControl *runControl, const QString &intentName, AndroidDebugSupport::AndroidDebugSupport(RunControl *runControl, const QString &intentName,
const QString &extraAppParams,
const Utils::Environment &extraEnvVars) const Utils::Environment &extraEnvVars)
: Debugger::DebuggerRunTool(runControl) : Debugger::DebuggerRunTool(runControl)
{ {
setDisplayName("AndroidDebugger"); setDisplayName("AndroidDebugger");
m_runner = new AndroidRunner(runControl, intentName, extraAppParams, extraEnvVars); m_runner = new AndroidRunner(runControl, intentName, extraEnvVars);
addStartDependency(m_runner); addStartDependency(m_runner);
} }

View File

@@ -38,7 +38,6 @@ class AndroidDebugSupport : public Debugger::DebuggerRunTool
public: public:
AndroidDebugSupport(ProjectExplorer::RunControl *runControl, AndroidDebugSupport(ProjectExplorer::RunControl *runControl,
const QString &intentName = QString(), const QString &intentName = QString(),
const QString &extraAppParams = QString(),
const Utils::Environment &extraEnvVars = Utils::Environment()); const Utils::Environment &extraEnvVars = Utils::Environment());
void start() override; void start() override;

View File

@@ -107,7 +107,7 @@ bool AndroidPlugin::initialize(const QStringList &arguments, QString *errorMessa
RunControl::registerWorker(QML_PREVIEW_RUN_MODE, [](RunControl *runControl) -> RunWorker* { RunControl::registerWorker(QML_PREVIEW_RUN_MODE, [](RunControl *runControl) -> RunWorker* {
const Runnable runnable = runControl->runConfiguration()->runnable(); const Runnable runnable = runControl->runConfiguration()->runnable();
return new AndroidQmlToolingSupport(runControl, runnable.executable, runnable.commandLineArguments); return new AndroidQmlToolingSupport(runControl, runnable.executable);
}, [](RunConfiguration *runConfig) { }, [](RunConfiguration *runConfig) {
return runConfig->isEnabled() return runConfig->isEnabled()
&& runConfig->id().name().startsWith("QmlProjectManager.QmlRunConfiguration") && runConfig->id().name().startsWith("QmlProjectManager.QmlRunConfiguration")

View File

@@ -31,14 +31,14 @@ using namespace ProjectExplorer;
namespace Android { namespace Android {
namespace Internal { namespace Internal {
AndroidQmlToolingSupport::AndroidQmlToolingSupport( AndroidQmlToolingSupport::AndroidQmlToolingSupport(RunControl *runControl,
RunControl *runControl, const QString &intentName, const QString &extraAppParams, const QString &intentName,
const Utils::Environment &extraEnvVars) const Utils::Environment &extraEnvVars)
: RunWorker(runControl) : RunWorker(runControl)
{ {
setDisplayName("AndroidQmlToolingSupport"); setDisplayName("AndroidQmlToolingSupport");
auto runner = new AndroidRunner(runControl, intentName, extraAppParams, extraEnvVars); auto runner = new AndroidRunner(runControl, intentName, extraEnvVars);
addStartDependency(runner); addStartDependency(runner);
auto profiler = runControl->createWorker(runControl->runMode()); auto profiler = runControl->createWorker(runControl->runMode());

View File

@@ -38,7 +38,6 @@ class AndroidQmlToolingSupport : public ProjectExplorer::RunWorker
public: public:
explicit AndroidQmlToolingSupport( explicit AndroidQmlToolingSupport(
ProjectExplorer::RunControl *runControl, const QString &intentName = QString(), ProjectExplorer::RunControl *runControl, const QString &intentName = QString(),
const QString &extraAppParams = QString(),
const Utils::Environment &extraEnvVars = Utils::Environment()); const Utils::Environment &extraEnvVars = Utils::Environment());
private: private:

View File

@@ -110,6 +110,8 @@ void BaseStringListAspect::setLabel(const QString &label)
AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Core::Id id) AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Core::Id id)
: RunConfiguration(target, id) : RunConfiguration(target, id)
{ {
addExtraAspect(new ArgumentsAspect(this));
auto amStartArgsAspect = new BaseStringAspect(this); auto amStartArgsAspect = new BaseStringAspect(this);
amStartArgsAspect->setId(Constants::ANDROID_AMSTARTARGS); amStartArgsAspect->setId(Constants::ANDROID_AMSTARTARGS);
amStartArgsAspect->setSettingsKey("Android.AmStartArgsKey"); amStartArgsAspect->setSettingsKey("Android.AmStartArgsKey");
@@ -141,6 +143,7 @@ QWidget *AndroidRunConfiguration::createConfigurationWidget()
auto widget = new QWidget; auto widget = new QWidget;
auto layout = new QFormLayout(widget); auto layout = new QFormLayout(widget);
extraAspect<ArgumentsAspect>()->addToConfigurationLayout(layout);
extraAspect(Constants::ANDROID_AMSTARTARGS)->addToConfigurationLayout(layout); extraAspect(Constants::ANDROID_AMSTARTARGS)->addToConfigurationLayout(layout);
auto warningIconLabel = new QLabel; auto warningIconLabel = new QLabel;

View File

@@ -39,9 +39,8 @@ namespace Android {
namespace Internal { namespace Internal {
AndroidRunSupport::AndroidRunSupport(RunControl *runControl, const QString &intentName, AndroidRunSupport::AndroidRunSupport(RunControl *runControl, const QString &intentName,
const QString &extraAppParams,
const Utils::Environment &extraEnvVars) const Utils::Environment &extraEnvVars)
: AndroidRunner(runControl, intentName, extraAppParams, extraEnvVars) : AndroidRunner(runControl, intentName, extraEnvVars)
{ {
runControl->setIcon(Utils::Icons::RUN_SMALL_TOOLBAR); runControl->setIcon(Utils::Icons::RUN_SMALL_TOOLBAR);
} }

View File

@@ -41,7 +41,6 @@ class AndroidRunSupport : public AndroidRunner
public: public:
explicit AndroidRunSupport(ProjectExplorer::RunControl *runControl, explicit AndroidRunSupport(ProjectExplorer::RunControl *runControl,
const QString &intentName = QString(), const QString &intentName = QString(),
const QString &extraAppParams = QString(),
const Utils::Environment &extraEnvVars = Utils::Environment()); const Utils::Environment &extraEnvVars = Utils::Environment());
~AndroidRunSupport() override; ~AndroidRunSupport() override;

View File

@@ -120,7 +120,6 @@ namespace Internal {
AndroidRunner::AndroidRunner(RunControl *runControl, AndroidRunner::AndroidRunner(RunControl *runControl,
const QString &intentName, const QString &intentName,
const QString &extraAppParams,
const Utils::Environment &extraEnvVars) const Utils::Environment &extraEnvVars)
: RunWorker(runControl), m_target(runControl->runConfiguration()->target()) : RunWorker(runControl), m_target(runControl->runConfiguration()->target())
{ {
@@ -145,7 +144,6 @@ AndroidRunner::AndroidRunner(RunControl *runControl,
m_worker.reset(new AndroidRunnerWorker(this, m_packageName)); m_worker.reset(new AndroidRunnerWorker(this, m_packageName));
m_worker->setIntentName(intent); m_worker->setIntentName(intent);
m_worker->setIsPreNougat(apiLevel <= 23); m_worker->setIsPreNougat(apiLevel <= 23);
m_worker->setExtraAppParams(extraAppParams);
m_worker->setExtraEnvVars(extraEnvVars); m_worker->setExtraEnvVars(extraEnvVars);
m_worker->moveToThread(&m_thread); m_worker->moveToThread(&m_thread);

View File

@@ -51,7 +51,6 @@ class AndroidRunner : public ProjectExplorer::RunWorker
public: public:
explicit AndroidRunner(ProjectExplorer::RunControl *runControl, explicit AndroidRunner(ProjectExplorer::RunControl *runControl,
const QString &intentName = QString(), const QString &intentName = QString(),
const QString &extraAppParams = QString(),
const Utils::Environment &extraEnvVars = Utils::Environment()); const Utils::Environment &extraEnvVars = Utils::Environment());
~AndroidRunner() override; ~AndroidRunner() override;

View File

@@ -31,6 +31,7 @@
#include "androidrunconfiguration.h" #include "androidrunconfiguration.h"
#include <debugger/debuggerrunconfigurationaspect.h> #include <debugger/debuggerrunconfigurationaspect.h>
#include <projectexplorer/runconfigurationaspects.h>
#include <projectexplorer/target.h> #include <projectexplorer/target.h>
#include <qtsupport/baseqtversion.h> #include <qtsupport/baseqtversion.h>
#include <qtsupport/qtkitinformation.h> #include <qtsupport/qtkitinformation.h>
@@ -38,6 +39,7 @@
#include <utils/runextensions.h> #include <utils/runextensions.h>
#include <utils/synchronousprocess.h> #include <utils/synchronousprocess.h>
#include <utils/temporaryfile.h> #include <utils/temporaryfile.h>
#include <utils/qtcprocess.h>
#include <utils/url.h> #include <utils/url.h>
#include <QLoggingCategory> #include <QLoggingCategory>
@@ -191,6 +193,8 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa
m_deviceSerialNumber = AndroidManager::deviceSerialNumber(target); m_deviceSerialNumber = AndroidManager::deviceSerialNumber(target);
m_apiLevel = AndroidManager::deviceApiLevel(target); m_apiLevel = AndroidManager::deviceApiLevel(target);
m_extraAppParams = runConfig->runnable().commandLineArguments;
if (auto aspect = runConfig->extraAspect(Constants::ANDROID_AMSTARTARGS)) if (auto aspect = runConfig->extraAspect(Constants::ANDROID_AMSTARTARGS))
m_amStartExtraArgs = static_cast<BaseStringAspect *>(aspect)->value().split(' '); m_amStartExtraArgs = static_cast<BaseStringAspect *>(aspect)->value().split(' ');
@@ -456,9 +460,13 @@ void AndroidRunnerWorker::asyncStartHelper()
.arg(m_qmlServer.port()).arg(QmlDebug::qmlDebugServices(m_qmlDebugServices)); .arg(m_qmlServer.port()).arg(QmlDebug::qmlDebugServices(m_qmlDebugServices));
} }
if (!m_extraAppParams.isEmpty()) { if (!m_extraAppParams.isEmpty()) {
QStringList appArgs =
Utils::QtcProcess::splitArgs(m_extraAppParams, Utils::OsType::OsTypeLinux);
qCDebug(androidRunWorkerLog) << "Using application arguments: " << appArgs;
args << "-e" << "extraappparams" args << "-e" << "extraappparams"
<< QString::fromLatin1(m_extraAppParams.toUtf8().toBase64()); << QString::fromLatin1(appArgs.join(' ').toUtf8().toBase64());
} }
if (m_extraEnvVars.size() > 0) { if (m_extraEnvVars.size() > 0) {
@@ -606,11 +614,5 @@ void AndroidRunnerWorker::setExtraEnvVars(const Utils::Environment &extraEnvVars
<< extraEnvVars.toStringList(); << extraEnvVars.toStringList();
} }
void AndroidRunnerWorker::setExtraAppParams(const QString &extraAppParams)
{
m_extraAppParams = extraAppParams;
}
} // namespace Internal } // namespace Internal
} // namespace Android } // namespace Android

View File

@@ -56,7 +56,6 @@ public:
void logcatProcess(const QByteArray &text, QByteArray &buffer, bool onlyError); void logcatProcess(const QByteArray &text, QByteArray &buffer, bool onlyError);
void setAndroidDeviceInfo(const AndroidDeviceInfo &info); void setAndroidDeviceInfo(const AndroidDeviceInfo &info);
void setExtraEnvVars(const Utils::Environment &extraEnvVars); void setExtraEnvVars(const Utils::Environment &extraEnvVars);
void setExtraAppParams(const QString &extraAppParams);
void setIsPreNougat(bool isPreNougat) { m_isPreNougat = isPreNougat; } void setIsPreNougat(bool isPreNougat) { m_isPreNougat = isPreNougat; }
void setIntentName(const QString &intentName) { m_intentName = intentName; } void setIntentName(const QString &intentName) { m_intentName = intentName; }