Android: Use packageName directly in AndroidRunnerWorker

That was the only remaining field of the AndroidRunnable, passing
the packageName as single string is sufficient.

Change-Id: I73333e58a0719df09d6905eb212007ce421f600e
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This commit is contained in:
hjk
2018-05-15 12:50:41 +02:00
parent 099f8c7e80
commit 130b08925d
4 changed files with 20 additions and 20 deletions

View File

@@ -128,10 +128,10 @@ AndroidRunner::AndroidRunner(RunControl *runControl,
connect(&m_checkAVDTimer, &QTimer::timeout, this, &AndroidRunner::checkAVD); connect(&m_checkAVDTimer, &QTimer::timeout, this, &AndroidRunner::checkAVD);
QString intent = intentName.isEmpty() ? AndroidManager::intentName(m_target) : intentName; QString intent = intentName.isEmpty() ? AndroidManager::intentName(m_target) : intentName;
m_androidRunnable.packageName = intent.left(intent.indexOf('/')); m_packageName = intent.left(intent.indexOf('/'));
const int apiLevel = AndroidManager::deviceApiLevel(m_target); 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->setIntentName(intent);
m_worker->setIsPreNougat(apiLevel <= 23); m_worker->setIsPreNougat(apiLevel <= 23);
m_worker->setExtraAppParams(extraAppParams); m_worker->setExtraAppParams(extraAppParams);
@@ -182,7 +182,7 @@ void AndroidRunner::stop()
{ {
if (m_checkAVDTimer.isActive()) { if (m_checkAVDTimer.isActive()) {
m_checkAVDTimer.stop(); m_checkAVDTimer.stop();
appendMessage("\n\n" + tr("\"%1\" terminated.").arg(m_androidRunnable.packageName), appendMessage("\n\n" + tr("\"%1\" terminated.").arg(m_packageName),
Utils::DebugFormat); Utils::DebugFormat);
return; return;
} }

View File

@@ -80,7 +80,7 @@ private:
void checkAVD(); void checkAVD();
void launchAVD(); void launchAVD();
AndroidRunnable m_androidRunnable; QString m_packageName;
QString m_launchedAVDName; QString m_launchedAVDName;
QThread m_thread; QThread m_thread;
QTimer m_checkAVDTimer; QTimer m_checkAVDTimer;

View File

@@ -140,8 +140,8 @@ static void deleter(QProcess *p)
p->deleteLater(); p->deleteLater();
} }
AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const AndroidRunnable &runnable) AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packageName)
: m_androidRunnable(runnable) : m_packageName(packageName)
, m_adbLogcatProcess(nullptr, deleter) , m_adbLogcatProcess(nullptr, deleter)
, m_psIsAlive(nullptr, deleter) , m_psIsAlive(nullptr, deleter)
, m_logCatRegExp(regExpLogcat) , m_logCatRegExp(regExpLogcat)
@@ -243,7 +243,7 @@ bool AndroidRunnerWorker::runAdb(const QStringList &args, int timeoutS)
void AndroidRunnerWorker::adbKill(qint64 pid) void AndroidRunnerWorker::adbKill(qint64 pid)
{ {
runAdb({"shell", "kill", "-9", QString::number(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 QStringList AndroidRunnerWorker::selector() const
@@ -253,14 +253,14 @@ QStringList AndroidRunnerWorker::selector() const
void AndroidRunnerWorker::forceStop() 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 // try killing it via kill -9
const QByteArray out = Utils::SynchronousProcess() const QByteArray out = Utils::SynchronousProcess()
.runBlocking(m_adb, selector() << QStringLiteral("shell") << pidScriptPreNougat) .runBlocking(m_adb, selector() << QStringLiteral("shell") << pidScriptPreNougat)
.allRawOutput(); .allRawOutput();
qint64 pid = extractPID(out.simplified(), m_androidRunnable.packageName); qint64 pid = extractPID(out.simplified(), m_packageName);
if (pid != -1) { if (pid != -1) {
adbKill(pid); adbKill(pid);
} }
@@ -370,14 +370,14 @@ void AndroidRunnerWorker::asyncStartHelper()
args << "-D"; args << "-D";
QString gdbServerSocket; QString gdbServerSocket;
// run-as <package-name> pwd fails on API 22 so route the pwd through shell. // 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)); emit remoteProcessFinished(tr("Failed to get process path. Reason: %1.").arg(m_lastRunAdbError));
return; return;
} }
gdbServerSocket = QString::fromUtf8(m_lastRunAdbRawOutput.trimmed()) + "/debug-socket"; gdbServerSocket = QString::fromUtf8(m_lastRunAdbRawOutput.trimmed()) + "/debug-socket";
QString gdbServerExecutable; 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)); emit remoteProcessFinished(tr("Failed to get process path. Reason: %1.").arg(m_lastRunAdbError));
return; return;
} }
@@ -394,11 +394,11 @@ void AndroidRunnerWorker::asyncStartHelper()
return; return;
} }
runAdb({"shell", "run-as", m_androidRunnable.packageName, "killall", gdbServerExecutable}); runAdb({"shell", "run-as", m_packageName, "killall", gdbServerExecutable});
runAdb({"shell", "run-as", m_androidRunnable.packageName, "rm", gdbServerSocket}); runAdb({"shell", "run-as", m_packageName, "rm", gdbServerSocket});
std::unique_ptr<QProcess, Deleter> gdbServerProcess(new QProcess, deleter); std::unique_ptr<QProcess, Deleter> gdbServerProcess(new QProcess, deleter);
gdbServerProcess->start(m_adb, selector() << "shell" << "run-as" gdbServerProcess->start(m_adb, selector() << "shell" << "run-as"
<< m_androidRunnable.packageName << "lib/" + gdbServerExecutable << m_packageName << "lib/" + gdbServerExecutable
<< "--multi" << "+" + gdbServerSocket); << "--multi" << "+" + gdbServerSocket);
if (!gdbServerProcess->waitForStarted()) { if (!gdbServerProcess->waitForStarted()) {
emit remoteProcessFinished(tr("Failed to start C++ debugger.")); emit remoteProcessFinished(tr("Failed to start C++ debugger."));
@@ -456,7 +456,7 @@ void AndroidRunnerWorker::asyncStart()
asyncStartHelper(); asyncStartHelper();
m_pidFinder = Utils::onResultReady(Utils::runAsync(findProcessPID, m_adb, selector(), m_pidFinder = Utils::onResultReady(Utils::runAsync(findProcessPID, m_adb, selector(),
m_androidRunnable.packageName, m_isPreNougat), m_packageName, m_isPreNougat),
bind(&AndroidRunnerWorker::onProcessIdChanged, this, _1)); bind(&AndroidRunnerWorker::onProcessIdChanged, this, _1));
} }
@@ -541,7 +541,7 @@ void AndroidRunnerWorker::onProcessIdChanged(qint64 pid)
m_processPID = pid; m_processPID = pid;
if (pid == -1) { if (pid == -1) {
emit remoteProcessFinished(QLatin1String("\n\n") + tr("\"%1\" died.") emit remoteProcessFinished(QLatin1String("\n\n") + tr("\"%1\" died.")
.arg(m_androidRunnable.packageName)); .arg(m_packageName));
// App died/killed. Reset log, monitor, jdb & gdb processes. // App died/killed. Reset log, monitor, jdb & gdb processes.
m_adbLogcatProcess.reset(); m_adbLogcatProcess.reset();
m_psIsAlive.reset(); m_psIsAlive.reset();

View File

@@ -26,12 +26,12 @@
#pragma once #pragma once
#include <projectexplorer/runconfiguration.h>
#include <qmldebug/qmldebugcommandlinearguments.h> #include <qmldebug/qmldebugcommandlinearguments.h>
#include <QFuture> #include <QFuture>
#include "androidrunnable.h"
namespace Android { namespace Android {
class AndroidDeviceInfo; class AndroidDeviceInfo;
@@ -44,7 +44,7 @@ class AndroidRunnerWorker : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
AndroidRunnerWorker(ProjectExplorer::RunWorker *runner, const AndroidRunnable &runnable); AndroidRunnerWorker(ProjectExplorer::RunWorker *runner, const QString &packageName);
~AndroidRunnerWorker() override; ~AndroidRunnerWorker() override;
bool adbShellAmNeedsQuotes(); bool adbShellAmNeedsQuotes();
bool runAdb(const QStringList &args, int timeoutS = 10); bool runAdb(const QStringList &args, int timeoutS = 10);
@@ -85,7 +85,7 @@ protected:
// Create the processes and timer in the worker thread, for correct thread affinity // Create the processes and timer in the worker thread, for correct thread affinity
bool m_isPreNougat = false; bool m_isPreNougat = false;
AndroidRunnable m_androidRunnable; QString m_packageName;
QString m_intentName; QString m_intentName;
QStringList m_beforeStartAdbCommands; QStringList m_beforeStartAdbCommands;
QStringList m_afterFinishAdbCommands; QStringList m_afterFinishAdbCommands;