diff options
Diffstat (limited to 'src/plugins/android')
-rw-r--r-- | src/plugins/android/android.pro | 2 | ||||
-rw-r--r-- | src/plugins/android/android.qbs | 2 | ||||
-rw-r--r-- | src/plugins/android/androidavdmanager.cpp | 1 | ||||
-rw-r--r-- | src/plugins/android/androidconfigurations.h | 1 | ||||
-rw-r--r-- | src/plugins/android/androidconstants.h | 9 | ||||
-rw-r--r-- | src/plugins/android/androidrunconfiguration.cpp | 12 | ||||
-rw-r--r-- | src/plugins/android/androidrunnable.cpp | 37 | ||||
-rw-r--r-- | src/plugins/android/androidrunnable.h | 57 | ||||
-rw-r--r-- | src/plugins/android/androidrunner.cpp | 22 | ||||
-rw-r--r-- | src/plugins/android/androidrunner.h | 5 | ||||
-rw-r--r-- | src/plugins/android/androidrunnerworker.cpp | 50 | ||||
-rw-r--r-- | src/plugins/android/androidrunnerworker.h | 10 |
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; |