forked from qt-creator/qt-creator
Android: Hide runAdbCommand in cpp file
Simplify SdkToolResult struct a bit. Change-Id: I77c72216b94a64ace9bbc4cb342462ff2bf10e95 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -43,6 +43,8 @@ using namespace ProjectExplorer;
|
|||||||
using namespace Tasking;
|
using namespace Tasking;
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
|
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
static Q_LOGGING_CATEGORY(androidDeviceLog, "qtc.android.androiddevice", QtWarningMsg)
|
static Q_LOGGING_CATEGORY(androidDeviceLog, "qtc.android.androiddevice", QtWarningMsg)
|
||||||
}
|
}
|
||||||
@@ -56,6 +58,32 @@ static constexpr char wifiDevicePort[] = "5555";
|
|||||||
enum TagModification { CommentOut, Uncomment };
|
enum TagModification { CommentOut, Uncomment };
|
||||||
static class AndroidDeviceManagerInstance *s_instance = nullptr;
|
static class AndroidDeviceManagerInstance *s_instance = nullptr;
|
||||||
|
|
||||||
|
struct SdkToolResult
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
QString stdOut;
|
||||||
|
QString stdErr;
|
||||||
|
QString exitMessage;
|
||||||
|
};
|
||||||
|
|
||||||
|
static SdkToolResult runAdbCommand(const QStringList &args)
|
||||||
|
{
|
||||||
|
Process process;
|
||||||
|
const CommandLine command{AndroidConfig::adbToolPath(), args};
|
||||||
|
qCDebug(androidDeviceLog) << "Running command (sync):" << command.toUserOutput();
|
||||||
|
process.setCommand(command);
|
||||||
|
process.runBlocking(30s, EventLoopMode::On);
|
||||||
|
const bool success = process.result() == ProcessResult::FinishedWithSuccess;
|
||||||
|
const SdkToolResult result = {success,
|
||||||
|
process.cleanedStdOut().trimmed(),
|
||||||
|
process.cleanedStdErr().trimmed(),
|
||||||
|
success ? QString() : process.exitMessage()};
|
||||||
|
qCDebug(androidDeviceLog) << "Command finshed (sync):" << command.toUserOutput()
|
||||||
|
<< "Success:" << success
|
||||||
|
<< "Output:" << process.allRawOutput();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
class AndroidDeviceManagerInstance : public QObject
|
class AndroidDeviceManagerInstance : public QObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -86,10 +114,10 @@ static QString displayNameFromInfo(const AndroidDeviceInfo &info)
|
|||||||
static IDevice::DeviceState getDeviceState(const QString &serial, IDevice::MachineType type)
|
static IDevice::DeviceState getDeviceState(const QString &serial, IDevice::MachineType type)
|
||||||
{
|
{
|
||||||
const QStringList args = AndroidDeviceInfo::adbSelector(serial) << "shell" << "echo 1";
|
const QStringList args = AndroidDeviceInfo::adbSelector(serial) << "shell" << "echo 1";
|
||||||
const SdkToolResult result = AndroidManager::runAdbCommand(args);
|
const SdkToolResult result = runAdbCommand(args);
|
||||||
if (result.success())
|
if (result.success)
|
||||||
return IDevice::DeviceReadyToUse;
|
return IDevice::DeviceReadyToUse;
|
||||||
else if (type == IDevice::Emulator || result.stdErr().contains("unauthorized"))
|
else if (type == IDevice::Emulator || result.stdErr.contains("unauthorized"))
|
||||||
return IDevice::DeviceConnected;
|
return IDevice::DeviceConnected;
|
||||||
return IDevice::DeviceDisconnected;
|
return IDevice::DeviceDisconnected;
|
||||||
}
|
}
|
||||||
@@ -130,7 +158,7 @@ static void setEmulatorArguments(QWidget *parent)
|
|||||||
static QString emulatorName(const QString &serialNumber)
|
static QString emulatorName(const QString &serialNumber)
|
||||||
{
|
{
|
||||||
const QStringList args = AndroidDeviceInfo::adbSelector(serialNumber) << "emu" << "avd" << "name";
|
const QStringList args = AndroidDeviceInfo::adbSelector(serialNumber) << "emu" << "avd" << "name";
|
||||||
return AndroidManager::runAdbCommand(args).stdOut();
|
return runAdbCommand(args).stdOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QString getRunningAvdsSerialNumber(const QString &name)
|
static QString getRunningAvdsSerialNumber(const QString &name)
|
||||||
@@ -213,11 +241,9 @@ static void setupWifiForDevice(const IDevice::Ptr &device, QWidget *parent)
|
|||||||
// prepare port
|
// prepare port
|
||||||
QStringList args = adbSelector;
|
QStringList args = adbSelector;
|
||||||
args.append({"tcpip", wifiDevicePort});
|
args.append({"tcpip", wifiDevicePort});
|
||||||
const SdkToolResult result = AndroidManager::runAdbCommand(args);
|
if (!runAdbCommand(args).success) {
|
||||||
if (!result.success()) {
|
|
||||||
AndroidDeviceWidget::criticalDialog(
|
AndroidDeviceWidget::criticalDialog(
|
||||||
Tr::tr("Opening connection port %1 failed.").arg(wifiDevicePort),
|
Tr::tr("Opening connection port %1 failed.").arg(wifiDevicePort), parent);
|
||||||
parent);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,8 +251,8 @@ static void setupWifiForDevice(const IDevice::Ptr &device, QWidget *parent)
|
|||||||
// Get device IP address
|
// Get device IP address
|
||||||
QStringList args = adbSelector;
|
QStringList args = adbSelector;
|
||||||
args.append({"shell", "ip", "route"});
|
args.append({"shell", "ip", "route"});
|
||||||
const SdkToolResult ipRes = AndroidManager::runAdbCommand(args);
|
const SdkToolResult ipRes = runAdbCommand(args);
|
||||||
if (!ipRes.success()) {
|
if (!ipRes.success) {
|
||||||
AndroidDeviceWidget::criticalDialog(
|
AndroidDeviceWidget::criticalDialog(
|
||||||
Tr::tr("Retrieving the device IP address failed."), parent);
|
Tr::tr("Retrieving the device IP address failed."), parent);
|
||||||
return;
|
return;
|
||||||
@@ -235,7 +261,7 @@ static void setupWifiForDevice(const IDevice::Ptr &device, QWidget *parent)
|
|||||||
// Expected output from "ip route" is:
|
// Expected output from "ip route" is:
|
||||||
// 192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.190
|
// 192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.190
|
||||||
// where the ip of interest is at the end of the line
|
// where the ip of interest is at the end of the line
|
||||||
const QStringList ipParts = ipRes.stdOut().split(" ");
|
const QStringList ipParts = ipRes.stdOut.split(" ");
|
||||||
QString ip;
|
QString ip;
|
||||||
if (!ipParts.isEmpty()) {
|
if (!ipParts.isEmpty()) {
|
||||||
ip = ipParts.last();
|
ip = ipParts.last();
|
||||||
@@ -249,8 +275,7 @@ static void setupWifiForDevice(const IDevice::Ptr &device, QWidget *parent)
|
|||||||
// Connect to device
|
// Connect to device
|
||||||
args = adbSelector;
|
args = adbSelector;
|
||||||
args.append({"connect", QString("%1:%2").arg(ip).arg(wifiDevicePort)});
|
args.append({"connect", QString("%1:%2").arg(ip).arg(wifiDevicePort)});
|
||||||
const SdkToolResult connectRes = AndroidManager::runAdbCommand(args);
|
if (!runAdbCommand(args).success) {
|
||||||
if (!connectRes.success()) {
|
|
||||||
AndroidDeviceWidget::criticalDialog(
|
AndroidDeviceWidget::criticalDialog(
|
||||||
Tr::tr("Connecting to the device IP \"%1\" failed.").arg(ip),
|
Tr::tr("Connecting to the device IP \"%1\" failed.").arg(ip),
|
||||||
parent);
|
parent);
|
||||||
|
@@ -645,29 +645,4 @@ Process *startAdbProcess(const QStringList &args, QString *err)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SdkToolResult runCommand(const CommandLine &command, const QByteArray &writeData,
|
|
||||||
int timeoutS)
|
|
||||||
{
|
|
||||||
Android::SdkToolResult cmdResult;
|
|
||||||
Process cmdProc;
|
|
||||||
cmdProc.setWriteData(writeData);
|
|
||||||
qCDebug(androidManagerLog) << "Running command (sync):" << command.toUserOutput();
|
|
||||||
cmdProc.setCommand(command);
|
|
||||||
cmdProc.runBlocking(std::chrono::seconds(timeoutS), EventLoopMode::On);
|
|
||||||
cmdResult.m_stdOut = cmdProc.cleanedStdOut().trimmed();
|
|
||||||
cmdResult.m_stdErr = cmdProc.cleanedStdErr().trimmed();
|
|
||||||
cmdResult.m_success = cmdProc.result() == ProcessResult::FinishedWithSuccess;
|
|
||||||
qCDebug(androidManagerLog) << "Command finshed (sync):" << command.toUserOutput()
|
|
||||||
<< "Success:" << cmdResult.m_success
|
|
||||||
<< "Output:" << cmdProc.allRawOutput();
|
|
||||||
if (!cmdResult.success())
|
|
||||||
cmdResult.m_exitMessage = cmdProc.exitMessage();
|
|
||||||
return cmdResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
SdkToolResult runAdbCommand(const QStringList &args, const QByteArray &writeData, int timeoutS)
|
|
||||||
{
|
|
||||||
return runCommand({AndroidConfig::adbToolPath(), args}, writeData, timeoutS);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace Android::AndroidManager
|
} // namespace Android::AndroidManager
|
||||||
|
@@ -18,20 +18,6 @@ class Process;
|
|||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
|
|
||||||
class SdkToolResult {
|
|
||||||
public:
|
|
||||||
SdkToolResult() = default;
|
|
||||||
bool success() const { return m_success; }
|
|
||||||
const QString &stdOut() const { return m_stdOut; }
|
|
||||||
const QString &stdErr() const { return m_stdErr; }
|
|
||||||
const QString &exitMessage() const { return m_exitMessage; }
|
|
||||||
|
|
||||||
bool m_success = false;
|
|
||||||
QString m_stdOut;
|
|
||||||
QString m_stdErr;
|
|
||||||
QString m_exitMessage;
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace AndroidManager
|
namespace AndroidManager
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -81,8 +67,6 @@ bool checkCertificateExists(const Utils::FilePath &keystorePath,
|
|||||||
const QString &keystorePasswd, const QString &alias);
|
const QString &keystorePasswd, const QString &alias);
|
||||||
|
|
||||||
Utils::Process *startAdbProcess(const QStringList &args, QString *err = nullptr);
|
Utils::Process *startAdbProcess(const QStringList &args, QString *err = nullptr);
|
||||||
SdkToolResult runAdbCommand(const QStringList &args, const QByteArray &writeData = {},
|
|
||||||
int timeoutS = 30);
|
|
||||||
|
|
||||||
QJsonObject deploymentSettings(const ProjectExplorer::Target *target);
|
QJsonObject deploymentSettings(const ProjectExplorer::Target *target);
|
||||||
bool isQtCreatorGenerated(const Utils::FilePath &deploymentFile);
|
bool isQtCreatorGenerated(const Utils::FilePath &deploymentFile);
|
||||||
|
Reference in New Issue
Block a user