diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 5a09199c9de..38396d21de0 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -712,15 +712,37 @@ QString AndroidConfig::getAvdName(const QString &serialnumber) return QString::fromLatin1(name).trimmed(); } +static SdkToolResult emulatorNameAdbCommand(const QString &serialNumber) +{ + QStringList args = AndroidDeviceInfo::adbSelector(serialNumber); + args.append({"emu", "avd", "name"}); + return AndroidManager::runAdbCommand(args); +} + +QString AndroidConfig::getRunningAvdsSerialNumber(const QString &name) const +{ + for (const AndroidDeviceInfo &dev : connectedDevices()) { + if (!dev.serialNumber.startsWith("emulator")) + continue; + SdkToolResult result = emulatorNameAdbCommand(dev.serialNumber); + const QString stdOut = result.stdOut(); + if (stdOut.isEmpty()) + continue; // Not an avd + const QStringList outputLines = stdOut.split('\n'); + if (outputLines.size() > 1 && outputLines.first() == name) + return dev.serialNumber; + } + + return {}; +} + QStringList AndroidConfig::getRunningAvdsFromDevices(const QVector &devs) { QStringList runningDevs; for (const AndroidDeviceInfo &dev : devs) { if (!dev.serialNumber.startsWith("emulator")) continue; - QStringList args = AndroidDeviceInfo::adbSelector(dev.serialNumber); - args.append({"emu", "avd", "name"}); - SdkToolResult result = AndroidManager::runAdbCommand(args); + SdkToolResult result = emulatorNameAdbCommand(dev.serialNumber); const QString stdOut = result.stdOut(); if (stdOut.isEmpty()) continue; // Not an avd diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h index db65168896e..54017219032 100644 --- a/src/plugins/android/androidconfigurations.h +++ b/src/plugins/android/androidconfigurations.h @@ -174,6 +174,7 @@ public: static Utils::FilePath getJdkPath(); static QStringList getAbis(const Utils::FilePath &adbToolPath, const QString &device); + QString getRunningAvdsSerialNumber(const QString &name) const; static QStringList getRunningAvdsFromDevices(const QVector &devs); private: diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index 04d2e43281e..ea4ddbf8e16 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -334,7 +334,11 @@ bool AndroidDevice::isValid() const QString AndroidDevice::serialNumber() const { - return extraData(Constants::AndroidSerialNumber).toString(); + const QString serialNumber = extraData(Constants::AndroidSerialNumber).toString(); + if (machineType() == Hardware) + return serialNumber; + + return AndroidConfigurations::currentConfig().getRunningAvdsSerialNumber(avdName()); } QString AndroidDevice::avdName() const