forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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")
|
||||||
|
@@ -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());
|
||||||
|
@@ -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:
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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; }
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user