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