aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android')
-rw-r--r--src/plugins/android/android.pro2
-rw-r--r--src/plugins/android/android.qbs2
-rw-r--r--src/plugins/android/androidavdmanager.cpp1
-rw-r--r--src/plugins/android/androidconfigurations.h1
-rw-r--r--src/plugins/android/androidconstants.h9
-rw-r--r--src/plugins/android/androidrunconfiguration.cpp12
-rw-r--r--src/plugins/android/androidrunnable.cpp37
-rw-r--r--src/plugins/android/androidrunnable.h57
-rw-r--r--src/plugins/android/androidrunner.cpp22
-rw-r--r--src/plugins/android/androidrunner.h5
-rw-r--r--src/plugins/android/androidrunnerworker.cpp50
-rw-r--r--src/plugins/android/androidrunnerworker.h10
12 files changed, 60 insertions, 148 deletions
diff --git a/src/plugins/android/android.pro b/src/plugins/android/android.pro
index d26264df20..e17c7e284b 100644
--- a/src/plugins/android/android.pro
+++ b/src/plugins/android/android.pro
@@ -46,7 +46,6 @@ HEADERS += \
android_global.h \
androidbuildapkstep.h \
androidbuildapkwidget.h \
- androidrunnable.h \
androidtoolmanager.h \
androidsdkmanager.h \
androidavdmanager.h \
@@ -94,7 +93,6 @@ SOURCES += \
androidbuildapkstep.cpp \
androidbuildapkwidget.cpp \
androidqtsupport.cpp \
- androidrunnable.cpp \
androidtoolmanager.cpp \
androidsdkmanager.cpp \
androidavdmanager.cpp \
diff --git a/src/plugins/android/android.qbs b/src/plugins/android/android.qbs
index 4b9ce0545e..b573d3883b 100644
--- a/src/plugins/android/android.qbs
+++ b/src/plugins/android/android.qbs
@@ -86,8 +86,6 @@ Project {
"androidrunconfiguration.h",
"androidruncontrol.cpp",
"androidruncontrol.h",
- "androidrunnable.cpp",
- "androidrunnable.h",
"androidrunner.cpp",
"androidrunner.h",
"androidrunnerworker.cpp",
diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp
index 85351e3228..44ed85b170 100644
--- a/src/plugins/android/androidavdmanager.cpp
+++ b/src/plugins/android/androidavdmanager.cpp
@@ -297,6 +297,7 @@ bool AndroidAvdManager::startAvdAsync(const QString &avdName) const
return false;
}
QProcess *avdProcess = new QProcess();
+ avdProcess->setReadChannelMode(QProcess::MergedChannels);
QObject::connect(avdProcess,
static_cast<void (QProcess::*)(int)>(&QProcess::finished),
avdProcess,
diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h
index 15d27413bd..58dde7479b 100644
--- a/src/plugins/android/androidconfigurations.h
+++ b/src/plugins/android/androidconfigurations.h
@@ -232,3 +232,4 @@ private:
} // namespace Android
+Q_DECLARE_METATYPE(Android::AndroidDeviceInfo)
diff --git a/src/plugins/android/androidconstants.h b/src/plugins/android/androidconstants.h
index 0015c69ff5..2ff36be77e 100644
--- a/src/plugins/android/androidconstants.h
+++ b/src/plugins/android/androidconstants.h
@@ -51,9 +51,11 @@ const char ANDROID_SETTINGS_ID[] = "BB.Android Configurations";
const char ANDROID_TOOLCHAIN_ID[] = "Qt4ProjectManager.ToolChain.Android";
const char ANDROIDQT[] = "Qt4ProjectManager.QtVersion.Android";
-const char ANDROID_AMSTARTARGS_ASPECT[] = "Android.AmStartArgs";
-const char ANDROID_PRESTARTSHELLCMDLIST_ASPECT[] = "Android.PreStartShellCmdList";
-const char ANDROID_POSTSTARTSHELLCMDLIST_ASPECT[] = "Android.PostStartShellCmdList";
+const char ANDROID_AMSTARTARGS[] = "Android.AmStartArgs";
+// Note: Can be set on RunConfiguration using an aspect and/or
+// the AndroidRunnerWorker using recordData()
+const char ANDROID_PRESTARTSHELLCMDLIST[] = "Android.PreStartShellCmdList";
+const char ANDROID_POSTFINISHSHELLCMDLIST[] = "Android.PostFinishShellCmdList";
const char ANDROID_DEVICE_TYPE[] = "Android.Device.Type";
const char ANDROID_DEVICE_ID[] = "Android Device";
@@ -69,6 +71,7 @@ const char ANDROID_DEPLOY_SETTINGS_FILE[] = "AndroidDeploySettingsFile";
const char ANDROID_PACKAGE_SOURCE_DIR[] = "AndroidPackageSourceDir";
const char ANDROID_EXTRA_LIBS[] = "AndroidExtraLibs";
+const char ANDROID_PACKAGENAME[] = "Android.PackageName";
const char ANDROID_PACKAGE_INSTALLATION_STEP_ID[] = "Qt4ProjectManager.AndroidPackageInstallationStep";
} // namespace Constants;
diff --git a/src/plugins/android/androidrunconfiguration.cpp b/src/plugins/android/androidrunconfiguration.cpp
index ac44a54698..ac1a6858be 100644
--- a/src/plugins/android/androidrunconfiguration.cpp
+++ b/src/plugins/android/androidrunconfiguration.cpp
@@ -111,20 +111,20 @@ AndroidRunConfiguration::AndroidRunConfiguration(Target *target, Core::Id id)
: RunConfiguration(target, id)
{
auto amStartArgsAspect = new BaseStringAspect(this);
- amStartArgsAspect->setId(Constants::ANDROID_AMSTARTARGS_ASPECT);
+ amStartArgsAspect->setId(Constants::ANDROID_AMSTARTARGS);
amStartArgsAspect->setSettingsKey("Android.AmStartArgsKey");
amStartArgsAspect->setLabelText(tr("Activity manager start options:"));
amStartArgsAspect->setDisplayStyle(BaseStringAspect::LineEditDisplay);
addExtraAspect(amStartArgsAspect);
auto preStartShellCmdAspect = new BaseStringListAspect(this);
- preStartShellCmdAspect->setId(Constants::ANDROID_PRESTARTSHELLCMDLIST_ASPECT);
+ preStartShellCmdAspect->setId(Constants::ANDROID_PRESTARTSHELLCMDLIST);
preStartShellCmdAspect->setSettingsKey("Android.PreStartShellCmdListKey");
preStartShellCmdAspect->setLabel(tr("Shell commands to run on Android device before application launch."));
addExtraAspect(preStartShellCmdAspect);
auto postStartShellCmdAspect = new BaseStringListAspect(this);
- postStartShellCmdAspect->setId(Constants::ANDROID_POSTSTARTSHELLCMDLIST_ASPECT);
+ postStartShellCmdAspect->setId(Constants::ANDROID_POSTFINISHSHELLCMDLIST);
postStartShellCmdAspect->setSettingsKey("Android.PostStartShellCmdListKey");
postStartShellCmdAspect->setLabel(tr("Shell commands to run on Android device after application quits."));
addExtraAspect(postStartShellCmdAspect);
@@ -140,7 +140,7 @@ QWidget *AndroidRunConfiguration::createConfigurationWidget()
auto widget = new QWidget;
auto layout = new QFormLayout(widget);
- extraAspect(Constants::ANDROID_AMSTARTARGS_ASPECT)->addToConfigurationLayout(layout);
+ extraAspect(Constants::ANDROID_AMSTARTARGS)->addToConfigurationLayout(layout);
auto warningIconLabel = new QLabel;
warningIconLabel->setPixmap(Utils::Icons::WARNING.pixmap());
@@ -148,8 +148,8 @@ QWidget *AndroidRunConfiguration::createConfigurationWidget()
auto warningLabel = new QLabel(tr("If the \"am start\" options conflict, the application might not start."));
layout->addRow(warningIconLabel, warningLabel);
- extraAspect(Constants::ANDROID_PRESTARTSHELLCMDLIST_ASPECT)->addToConfigurationLayout(layout);
- extraAspect(Constants::ANDROID_POSTSTARTSHELLCMDLIST_ASPECT)->addToConfigurationLayout(layout);
+ extraAspect(Constants::ANDROID_PRESTARTSHELLCMDLIST)->addToConfigurationLayout(layout);
+ extraAspect(Constants::ANDROID_POSTFINISHSHELLCMDLIST)->addToConfigurationLayout(layout);
auto wrapped = wrapWidget(widget);
auto detailsWidget = qobject_cast<DetailsWidget *>(wrapped);
diff --git a/src/plugins/android/androidrunnable.cpp b/src/plugins/android/androidrunnable.cpp
deleted file mode 100644
index ae70bd71dd..0000000000
--- a/src/plugins/android/androidrunnable.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "androidrunnable.h"
-
-namespace Android {
-
-void *AndroidRunnable::staticTypeId = &AndroidRunnable::staticTypeId;
-
-AndroidRunnable::AndroidRunnable()
-{
- qRegisterMetaType<AndroidRunnable>("AndroidRunnable");
-}
-
-} // namespace Android
diff --git a/src/plugins/android/androidrunnable.h b/src/plugins/android/androidrunnable.h
deleted file mode 100644
index e549acf590..0000000000
--- a/src/plugins/android/androidrunnable.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 BogDan Vatra <bog_dan_ro@yahoo.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include "android_global.h"
-#include <projectexplorer/runnables.h>
-
-namespace Android {
-
-struct ANDROID_EXPORT AndroidRunnable
-{
- AndroidRunnable();
- QString packageName;
- QStringList beforeStartAdbCommands;
- QStringList afterFinishAdbCommands;
-
- QString displayName() const { return packageName; }
- static void *staticTypeId;
-};
-
-inline bool operator==(const AndroidRunnable &r1, const AndroidRunnable &r2)
-{
- return r1.packageName == r2.packageName
- && r1.beforeStartAdbCommands == r2.beforeStartAdbCommands
- && r1.afterFinishAdbCommands == r2.afterFinishAdbCommands;
-}
-
-inline bool operator!=(const AndroidRunnable &r1, const AndroidRunnable &r2)
-{
- return !(r1 == r2);
-}
-
-} // namespace Android
-Q_DECLARE_METATYPE(Android::AndroidRunnable)
diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp
index ce4a0c918c..4ea111aeb3 100644
--- a/src/plugins/android/androidrunner.cpp
+++ b/src/plugins/android/androidrunner.cpp
@@ -120,7 +120,8 @@ AndroidRunner::AndroidRunner(RunControl *runControl,
setDisplayName("AndroidRunner");
static const int metaTypes[] = {
qRegisterMetaType<QVector<QStringList> >("QVector<QStringList>"),
- qRegisterMetaType<Utils::Port>("Utils::Port")
+ qRegisterMetaType<Utils::Port>("Utils::Port"),
+ qRegisterMetaType<AndroidDeviceInfo>("Android::AndroidDeviceInfo")
};
Q_UNUSED(metaTypes);
@@ -128,21 +129,10 @@ AndroidRunner::AndroidRunner(RunControl *runControl,
connect(&m_checkAVDTimer, &QTimer::timeout, this, &AndroidRunner::checkAVD);
QString intent = intentName.isEmpty() ? AndroidManager::intentName(m_target) : intentName;
- m_androidRunnable.packageName = intent.left(intent.indexOf('/'));
-
- RunConfiguration *rc = runControl->runConfiguration();
- if (auto aspect = rc->extraAspect(Constants::ANDROID_PRESTARTSHELLCMDLIST_ASPECT)) {
- for (QString shellCmd : static_cast<BaseStringListAspect *>(aspect)->value())
- m_androidRunnable.beforeStartAdbCommands.append(QString("shell %1").arg(shellCmd));
- }
-
- if (auto aspect = rc->extraAspect(Constants::ANDROID_POSTSTARTSHELLCMDLIST_ASPECT)) {
- for (QString shellCmd : static_cast<BaseStringListAspect *>(aspect)->value())
- m_androidRunnable.afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd));
- }
+ m_packageName = intent.left(intent.indexOf('/'));
const int apiLevel = AndroidManager::deviceApiLevel(m_target);
- m_worker.reset(new AndroidRunnerWorker(this, m_androidRunnable));
+ m_worker.reset(new AndroidRunnerWorker(this, m_packageName));
m_worker->setIntentName(intent);
m_worker->setIsPreNougat(apiLevel <= 23);
m_worker->setExtraAppParams(extraAppParams);
@@ -193,7 +183,7 @@ void AndroidRunner::stop()
{
if (m_checkAVDTimer.isActive()) {
m_checkAVDTimer.stop();
- appendMessage("\n\n" + tr("\"%1\" terminated.").arg(m_androidRunnable.packageName),
+ appendMessage("\n\n" + tr("\"%1\" terminated.").arg(m_packageName),
Utils::DebugFormat);
return;
}
@@ -258,7 +248,7 @@ void AndroidRunner::launchAVD()
emit androidDeviceInfoChanged(info);
if (info.isValid()) {
AndroidAvdManager avdManager;
- if (avdManager.findAvd(info.avdname).isEmpty()) {
+ if (!info.avdname.isEmpty() && avdManager.findAvd(info.avdname).isEmpty()) {
bool launched = avdManager.startAvdAsync(info.avdname);
m_launchedAVDName = launched ? info.avdname:"";
} else {
diff --git a/src/plugins/android/androidrunner.h b/src/plugins/android/androidrunner.h
index 28212a08db..c1cd170c68 100644
--- a/src/plugins/android/androidrunner.h
+++ b/src/plugins/android/androidrunner.h
@@ -26,7 +26,6 @@
#pragma once
#include "androidconfigurations.h"
-#include "androidrunnable.h"
#include <projectexplorer/runconfiguration.h>
#include <qmldebug/qmldebugcommandlinearguments.h>
@@ -67,7 +66,7 @@ signals:
void asyncStart();
void asyncStop();
void qmlServerReady(const QUrl &serverUrl);
- void androidDeviceInfoChanged(const AndroidDeviceInfo &deviceInfo);
+ void androidDeviceInfoChanged(const Android::AndroidDeviceInfo &deviceInfo);
void avdDetected();
private:
@@ -80,7 +79,7 @@ private:
void checkAVD();
void launchAVD();
- AndroidRunnable m_androidRunnable;
+ QString m_packageName;
QString m_launchedAVDName;
QThread m_thread;
QTimer m_checkAVDTimer;
diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp
index 05071d1d06..62eedaa4c3 100644
--- a/src/plugins/android/androidrunnerworker.cpp
+++ b/src/plugins/android/androidrunnerworker.cpp
@@ -140,8 +140,8 @@ static void deleter(QProcess *p)
p->deleteLater();
}
-AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const AndroidRunnable &runnable)
- : m_androidRunnable(runnable)
+AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packageName)
+ : m_packageName(packageName)
, m_adbLogcatProcess(nullptr, deleter)
, m_psIsAlive(nullptr, deleter)
, m_logCatRegExp(regExpLogcat)
@@ -181,8 +181,22 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const AndroidRunnabl
m_deviceSerialNumber = AndroidManager::deviceSerialNumber(target);
m_apiLevel = AndroidManager::deviceApiLevel(target);
- if (auto aspect = runConfig->extraAspect(Constants::ANDROID_AMSTARTARGS_ASPECT))
+ if (auto aspect = runConfig->extraAspect(Constants::ANDROID_AMSTARTARGS))
m_amStartExtraArgs = static_cast<BaseStringAspect *>(aspect)->value().split(' ');
+
+ if (auto aspect = runConfig->extraAspect(Constants::ANDROID_PRESTARTSHELLCMDLIST)) {
+ for (const QString &shellCmd : static_cast<BaseStringListAspect *>(aspect)->value())
+ m_beforeStartAdbCommands.append(QString("shell %1").arg(shellCmd));
+ }
+ for (const QString &shellCmd : runner->recordedData(Constants::ANDROID_PRESTARTSHELLCMDLIST).toStringList())
+ m_beforeStartAdbCommands.append(QString("shell %1").arg(shellCmd));
+
+ if (auto aspect = runConfig->extraAspect(Constants::ANDROID_POSTFINISHSHELLCMDLIST)) {
+ for (const QString &shellCmd : static_cast<BaseStringListAspect *>(aspect)->value())
+ m_afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd));
+ }
+ for (const QString &shellCmd : runner->recordedData(Constants::ANDROID_POSTFINISHSHELLCMDLIST).toStringList())
+ m_afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd));
}
AndroidRunnerWorker::~AndroidRunnerWorker()
@@ -229,7 +243,7 @@ bool AndroidRunnerWorker::runAdb(const QStringList &args, int timeoutS)
void AndroidRunnerWorker::adbKill(qint64 pid)
{
runAdb({"shell", "kill", "-9", QString::number(pid)});
- runAdb({"shell", "run-as", m_androidRunnable.packageName, "kill", "-9", QString::number(pid)});
+ runAdb({"shell", "run-as", m_packageName, "kill", "-9", QString::number(pid)});
}
QStringList AndroidRunnerWorker::selector() const
@@ -239,14 +253,14 @@ QStringList AndroidRunnerWorker::selector() const
void AndroidRunnerWorker::forceStop()
{
- runAdb({"shell", "am", "force-stop", m_androidRunnable.packageName}, 30);
+ runAdb({"shell", "am", "force-stop", m_packageName}, 30);
// try killing it via kill -9
const QByteArray out = Utils::SynchronousProcess()
.runBlocking(m_adb, selector() << QStringLiteral("shell") << pidScriptPreNougat)
.allRawOutput();
- qint64 pid = extractPID(out.simplified(), m_androidRunnable.packageName);
+ qint64 pid = extractPID(out.simplified(), m_packageName);
if (pid != -1) {
adbKill(pid);
}
@@ -346,7 +360,7 @@ void AndroidRunnerWorker::asyncStartHelper()
QTC_ASSERT(!m_adbLogcatProcess, /**/);
m_adbLogcatProcess = std::move(logcatProcess);
- for (const QString &entry: m_androidRunnable.beforeStartAdbCommands)
+ for (const QString &entry : m_beforeStartAdbCommands)
runAdb(entry.split(' ', QString::SkipEmptyParts));
QStringList args({"shell", "am", "start"});
@@ -356,14 +370,14 @@ void AndroidRunnerWorker::asyncStartHelper()
args << "-D";
QString gdbServerSocket;
// run-as <package-name> pwd fails on API 22 so route the pwd through shell.
- if (!runAdb({"shell", "run-as", m_androidRunnable.packageName, "/system/bin/sh", "-c", "pwd"})) {
+ if (!runAdb({"shell", "run-as", m_packageName, "/system/bin/sh", "-c", "pwd"})) {
emit remoteProcessFinished(tr("Failed to get process path. Reason: %1.").arg(m_lastRunAdbError));
return;
}
gdbServerSocket = QString::fromUtf8(m_lastRunAdbRawOutput.trimmed()) + "/debug-socket";
QString gdbServerExecutable;
- if (!runAdb({"shell", "run-as", m_androidRunnable.packageName, "ls", "lib/"})) {
+ if (!runAdb({"shell", "run-as", m_packageName, "ls", "lib/"})) {
emit remoteProcessFinished(tr("Failed to get process path. Reason: %1.").arg(m_lastRunAdbError));
return;
}
@@ -380,11 +394,11 @@ void AndroidRunnerWorker::asyncStartHelper()
return;
}
- runAdb({"shell", "run-as", m_androidRunnable.packageName, "killall", gdbServerExecutable});
- runAdb({"shell", "run-as", m_androidRunnable.packageName, "rm", gdbServerSocket});
+ runAdb({"shell", "run-as", m_packageName, "killall", gdbServerExecutable});
+ runAdb({"shell", "run-as", m_packageName, "rm", gdbServerSocket});
std::unique_ptr<QProcess, Deleter> gdbServerProcess(new QProcess, deleter);
gdbServerProcess->start(m_adb, selector() << "shell" << "run-as"
- << m_androidRunnable.packageName << "lib/" + gdbServerExecutable
+ << m_packageName << "lib/" + gdbServerExecutable
<< "--multi" << "+" + gdbServerSocket);
if (!gdbServerProcess->waitForStarted()) {
emit remoteProcessFinished(tr("Failed to start C++ debugger."));
@@ -398,7 +412,7 @@ void AndroidRunnerWorker::asyncStartHelper()
emit remoteProcessFinished(tr("Failed to forward C++ debugging ports. Reason: %1.").arg(m_lastRunAdbError));
return;
}
- m_androidRunnable.afterFinishAdbCommands.push_back(removeForward.join(' '));
+ m_afterFinishAdbCommands.push_back(removeForward.join(' '));
}
if (m_qmlDebugServices != QmlDebug::NoQmlDebugServices) {
@@ -411,7 +425,7 @@ void AndroidRunnerWorker::asyncStartHelper()
.arg(m_lastRunAdbError));
return;
}
- m_androidRunnable.afterFinishAdbCommands.push_back(removeForward.join(' '));
+ m_afterFinishAdbCommands.push_back(removeForward.join(' '));
args << "-e" << "qml_debug" << "true"
<< "-e" << "qmljsdebugger"
@@ -442,7 +456,7 @@ void AndroidRunnerWorker::asyncStart()
asyncStartHelper();
m_pidFinder = Utils::onResultReady(Utils::runAsync(findProcessPID, m_adb, selector(),
- m_androidRunnable.packageName, m_isPreNougat),
+ m_packageName, m_isPreNougat),
bind(&AndroidRunnerWorker::onProcessIdChanged, this, _1));
}
@@ -467,7 +481,7 @@ void AndroidRunnerWorker::handleJdbWaiting()
emit remoteProcessFinished(tr("Failed to forward jdb debugging ports. Reason: %1.").arg(m_lastRunAdbError));
return;
}
- m_androidRunnable.afterFinishAdbCommands.push_back(removeForward.join(' '));
+ m_afterFinishAdbCommands.push_back(removeForward.join(' '));
auto jdbPath = AndroidConfigurations::currentConfig().openJDKLocation().appendPath("bin");
if (Utils::HostOsInfo::isWindowsHost())
@@ -527,7 +541,7 @@ void AndroidRunnerWorker::onProcessIdChanged(qint64 pid)
m_processPID = pid;
if (pid == -1) {
emit remoteProcessFinished(QLatin1String("\n\n") + tr("\"%1\" died.")
- .arg(m_androidRunnable.packageName));
+ .arg(m_packageName));
// App died/killed. Reset log, monitor, jdb & gdb processes.
m_adbLogcatProcess.reset();
m_psIsAlive.reset();
@@ -535,7 +549,7 @@ void AndroidRunnerWorker::onProcessIdChanged(qint64 pid)
m_gdbServerProcess.reset();
// Run adb commands after application quit.
- for (const QString &entry: m_androidRunnable.afterFinishAdbCommands)
+ for (const QString &entry: m_afterFinishAdbCommands)
runAdb(entry.split(' ', QString::SkipEmptyParts));
} else {
// In debugging cases this will be funneled to the engine to actually start
diff --git a/src/plugins/android/androidrunnerworker.h b/src/plugins/android/androidrunnerworker.h
index 768b34a19c..e34207bf03 100644
--- a/src/plugins/android/androidrunnerworker.h
+++ b/src/plugins/android/androidrunnerworker.h
@@ -26,12 +26,12 @@
#pragma once
+#include <projectexplorer/runconfiguration.h>
+
#include <qmldebug/qmldebugcommandlinearguments.h>
#include <QFuture>
-#include "androidrunnable.h"
-
namespace Android {
class AndroidDeviceInfo;
@@ -44,7 +44,7 @@ class AndroidRunnerWorker : public QObject
{
Q_OBJECT
public:
- AndroidRunnerWorker(ProjectExplorer::RunWorker *runner, const AndroidRunnable &runnable);
+ AndroidRunnerWorker(ProjectExplorer::RunWorker *runner, const QString &packageName);
~AndroidRunnerWorker() override;
bool adbShellAmNeedsQuotes();
bool runAdb(const QStringList &args, int timeoutS = 10);
@@ -85,8 +85,10 @@ protected:
// Create the processes and timer in the worker thread, for correct thread affinity
bool m_isPreNougat = false;
- AndroidRunnable m_androidRunnable;
+ QString m_packageName;
QString m_intentName;
+ QStringList m_beforeStartAdbCommands;
+ QStringList m_afterFinishAdbCommands;
QString m_adb;
QStringList m_amStartExtraArgs;
qint64 m_processPID = -1;