Android: Avoid using connectedDevices() in getRunningAvdsSerialNumber()

The connectedDevices() constructs the full list of
AndroidDeviceInfo with details not needed by
getRunningAvdsSerialNumber(). These details were generated by
using 2 excessive process runs. Get rid of them, and deliver
result as soon as the matching device if found.

Change-Id: Idc3d9d3321e471f8eaa0d69287f5e748813fc427
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Jarek Kobus
2024-05-21 21:11:05 +02:00
parent 05d942d488
commit 4ca1edc080

View File

@@ -633,17 +633,30 @@ void AndroidDeviceManager::setEmulatorArguments(QWidget *parent)
QString AndroidDeviceManager::getRunningAvdsSerialNumber(const QString &name) const QString AndroidDeviceManager::getRunningAvdsSerialNumber(const QString &name) const
{ {
for (const AndroidDeviceInfo &dev : AndroidConfig::connectedDevices()) { Process adbProcess;
if (!dev.serialNumber.startsWith("emulator")) adbProcess.setCommand({AndroidConfig::adbToolPath(), {"devices"}});
adbProcess.runBlocking();
if (adbProcess.result() != ProcessResult::FinishedWithSuccess)
return {};
// mid(1) - remove "List of devices attached" header line
const QStringList lines = adbProcess.allOutput().split('\n', Qt::SkipEmptyParts).mid(1);
for (const QString &line : lines) {
// skip the daemon logs
if (line.startsWith("* daemon"))
continue; continue;
const QString stdOut = emulatorName(dev.serialNumber);
const QString serialNumber = line.left(line.indexOf('\t')).trimmed();
if (!serialNumber.startsWith("emulator"))
continue;
const QString stdOut = emulatorName(serialNumber);
if (stdOut.isEmpty()) if (stdOut.isEmpty())
continue; // Not an avd continue; // Not an avd
const QStringList outputLines = stdOut.split('\n');
if (outputLines.size() > 1 && outputLines.first() == name)
return dev.serialNumber;
}
if (stdOut.left(stdOut.indexOf('\n')) == name)
return serialNumber;
}
return {}; return {};
} }