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