forked from qt-creator/qt-creator
Android: Support the extraenvvars and extraappparams options
The Qt/Android runtime does support passing parameters to the application. We have to pass '-e extraappparams <base64 string>' and '-e extraenvvars <base64 strings, concatenated by ";">'. This is very handy and should actually be exposed in the GUI. Change-Id: I8c84a53ab8f6f07ea5b6e01c902f53385df8b35f Reviewed-by: Vikas Pachdha <vikas.pachdha@qt.io>
This commit is contained in:
@@ -93,11 +93,13 @@ static QString toNdkArch(const QString &arch)
|
|||||||
return QLatin1String("arch-") + arch;
|
return QLatin1String("arch-") + arch;
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidDebugSupport::AndroidDebugSupport(RunControl *runControl)
|
AndroidDebugSupport::AndroidDebugSupport(RunControl *runControl, const QString &intentName,
|
||||||
|
const QString &extraAppParams,
|
||||||
|
const Utils::Environment &extraEnvVars)
|
||||||
: Debugger::DebuggerRunTool(runControl)
|
: Debugger::DebuggerRunTool(runControl)
|
||||||
{
|
{
|
||||||
setDisplayName("AndroidDebugger");
|
setDisplayName("AndroidDebugger");
|
||||||
m_runner = new AndroidRunner(runControl);
|
m_runner = new AndroidRunner(runControl, intentName, extraAppParams, extraEnvVars);
|
||||||
addStartDependency(m_runner);
|
addStartDependency(m_runner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,10 @@ class AndroidDebugSupport : public Debugger::DebuggerRunTool
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AndroidDebugSupport(ProjectExplorer::RunControl *runControl);
|
AndroidDebugSupport(ProjectExplorer::RunControl *runControl,
|
||||||
|
const QString &intentName = QString(),
|
||||||
|
const QString &extraAppParams = QString(),
|
||||||
|
const Utils::Environment &extraEnvVars = Utils::Environment());
|
||||||
|
|
||||||
void start() override;
|
void start() override;
|
||||||
void stop() override;
|
void stop() override;
|
||||||
|
|||||||
@@ -31,12 +31,14 @@ using namespace ProjectExplorer;
|
|||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
AndroidQmlToolingSupport::AndroidQmlToolingSupport(RunControl *runControl)
|
AndroidQmlToolingSupport::AndroidQmlToolingSupport(
|
||||||
|
RunControl *runControl, const QString &intentName, const QString &extraAppParams,
|
||||||
|
const Utils::Environment &extraEnvVars)
|
||||||
: RunWorker(runControl)
|
: RunWorker(runControl)
|
||||||
{
|
{
|
||||||
setDisplayName("AndroidQmlToolingSupport");
|
setDisplayName("AndroidQmlToolingSupport");
|
||||||
|
|
||||||
auto runner = new AndroidRunner(runControl);
|
auto runner = new AndroidRunner(runControl, intentName, extraAppParams, extraEnvVars);
|
||||||
addStartDependency(runner);
|
addStartDependency(runner);
|
||||||
|
|
||||||
auto profiler = runControl->createWorker(runControl->runMode());
|
auto profiler = runControl->createWorker(runControl->runMode());
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <projectexplorer/runconfiguration.h>
|
#include <projectexplorer/runconfiguration.h>
|
||||||
|
#include <utils/environment.h>
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -35,7 +36,10 @@ class AndroidQmlToolingSupport : public ProjectExplorer::RunWorker
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AndroidQmlToolingSupport(ProjectExplorer::RunControl *runControl);
|
explicit AndroidQmlToolingSupport(
|
||||||
|
ProjectExplorer::RunControl *runControl, const QString &intentName = QString(),
|
||||||
|
const QString &extraAppParams = QString(),
|
||||||
|
const Utils::Environment &extraEnvVars = Utils::Environment());
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void start() override;
|
void start() override;
|
||||||
|
|||||||
@@ -38,8 +38,10 @@ using namespace ProjectExplorer;
|
|||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
AndroidRunSupport::AndroidRunSupport(RunControl *runControl)
|
AndroidRunSupport::AndroidRunSupport(RunControl *runControl, const QString &intentName,
|
||||||
: AndroidRunner(runControl)
|
const QString &extraAppParams,
|
||||||
|
const Utils::Environment &extraEnvVars)
|
||||||
|
: AndroidRunner(runControl, intentName, extraAppParams, extraEnvVars)
|
||||||
{
|
{
|
||||||
runControl->setIcon(Utils::Icons::RUN_SMALL_TOOLBAR);
|
runControl->setIcon(Utils::Icons::RUN_SMALL_TOOLBAR);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,10 @@ class AndroidRunSupport : public AndroidRunner
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AndroidRunSupport(ProjectExplorer::RunControl *runControl);
|
explicit AndroidRunSupport(ProjectExplorer::RunControl *runControl,
|
||||||
|
const QString &intentName = QString(),
|
||||||
|
const QString &extraAppParams = QString(),
|
||||||
|
const Utils::Environment &extraEnvVars = Utils::Environment());
|
||||||
~AndroidRunSupport() override;
|
~AndroidRunSupport() override;
|
||||||
|
|
||||||
void start() override;
|
void start() override;
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ struct ANDROID_EXPORT AndroidRunnable
|
|||||||
QStringList beforeStartAdbCommands;
|
QStringList beforeStartAdbCommands;
|
||||||
QStringList afterFinishAdbCommands;
|
QStringList afterFinishAdbCommands;
|
||||||
QString deviceSerialNumber;
|
QString deviceSerialNumber;
|
||||||
|
QString extraAppParams;
|
||||||
|
Utils::Environment extraEnvVars;
|
||||||
|
|
||||||
QString displayName() const { return packageName; }
|
QString displayName() const { return packageName; }
|
||||||
static void *staticTypeId;
|
static void *staticTypeId;
|
||||||
|
|||||||
@@ -429,6 +429,17 @@ void AndroidRunnerWorker::asyncStart()
|
|||||||
.arg(m_qmlServer.port()).arg(QmlDebug::qmlDebugServices(m_qmlDebugServices));
|
.arg(m_qmlServer.port()).arg(QmlDebug::qmlDebugServices(m_qmlDebugServices));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!m_androidRunnable.extraAppParams.isEmpty()) {
|
||||||
|
args << "-e" << "extraappparams"
|
||||||
|
<< QString::fromLatin1(m_androidRunnable.extraAppParams.toUtf8().toBase64());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_androidRunnable.extraEnvVars.size() > 0) {
|
||||||
|
args << "-e" << "extraenvvars"
|
||||||
|
<< QString::fromLatin1(m_androidRunnable.extraEnvVars.toStringList().join('\t')
|
||||||
|
.toUtf8().toBase64());
|
||||||
|
}
|
||||||
|
|
||||||
if (!runAdb(args, &errorMessage)) {
|
if (!runAdb(args, &errorMessage)) {
|
||||||
emit remoteProcessFinished(tr("Failed to start the activity. Reason: %1.")
|
emit remoteProcessFinished(tr("Failed to start the activity. Reason: %1.")
|
||||||
.arg(errorMessage));
|
.arg(errorMessage));
|
||||||
@@ -676,7 +687,8 @@ QStringList AndroidRunnerWorker::selector() const
|
|||||||
return AndroidDeviceInfo::adbSelector(m_androidRunnable.deviceSerialNumber);
|
return AndroidDeviceInfo::adbSelector(m_androidRunnable.deviceSerialNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidRunner::AndroidRunner(RunControl *runControl)
|
AndroidRunner::AndroidRunner(RunControl *runControl, const QString &intentName,
|
||||||
|
const QString &extraAppParams, const Utils::Environment &extraEnvVars)
|
||||||
: RunWorker(runControl), m_target(runControl->runConfiguration()->target())
|
: RunWorker(runControl), m_target(runControl->runConfiguration()->target())
|
||||||
{
|
{
|
||||||
setDisplayName("AndroidRunner");
|
setDisplayName("AndroidRunner");
|
||||||
@@ -689,9 +701,13 @@ AndroidRunner::AndroidRunner(RunControl *runControl)
|
|||||||
m_checkAVDTimer.setInterval(2000);
|
m_checkAVDTimer.setInterval(2000);
|
||||||
connect(&m_checkAVDTimer, &QTimer::timeout, this, &AndroidRunner::checkAVD);
|
connect(&m_checkAVDTimer, &QTimer::timeout, this, &AndroidRunner::checkAVD);
|
||||||
|
|
||||||
m_androidRunnable.intentName = AndroidManager::intentName(m_target);
|
m_androidRunnable.intentName = intentName.isEmpty() ? AndroidManager::intentName(m_target)
|
||||||
|
: intentName;
|
||||||
m_androidRunnable.packageName = m_androidRunnable.intentName.left(
|
m_androidRunnable.packageName = m_androidRunnable.intentName.left(
|
||||||
m_androidRunnable.intentName.indexOf(QLatin1Char('/')));
|
m_androidRunnable.intentName.indexOf(QLatin1Char('/')));
|
||||||
|
|
||||||
|
m_androidRunnable.extraAppParams = extraAppParams;
|
||||||
|
m_androidRunnable.extraEnvVars = extraEnvVars;
|
||||||
m_androidRunnable.deviceSerialNumber = AndroidManager::deviceSerialNumber(m_target);
|
m_androidRunnable.deviceSerialNumber = AndroidManager::deviceSerialNumber(m_target);
|
||||||
|
|
||||||
if (auto androidRunConfig = qobject_cast<AndroidRunConfiguration *>(
|
if (auto androidRunConfig = qobject_cast<AndroidRunConfiguration *>(
|
||||||
|
|||||||
@@ -50,7 +50,10 @@ class AndroidRunner : public ProjectExplorer::RunWorker
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AndroidRunner(ProjectExplorer::RunControl *runControl);
|
explicit AndroidRunner(ProjectExplorer::RunControl *runControl,
|
||||||
|
const QString &intentName = QString(),
|
||||||
|
const QString &extraAppParams = QString(),
|
||||||
|
const Utils::Environment &extraEnvVars = Utils::Environment());
|
||||||
~AndroidRunner() override;
|
~AndroidRunner() override;
|
||||||
|
|
||||||
void setRunnable(const AndroidRunnable &runnable);
|
void setRunnable(const AndroidRunnable &runnable);
|
||||||
|
|||||||
Reference in New Issue
Block a user