forked from qt-creator/qt-creator
Android: handle return correct serialNumber for a running avd
AVDs don't get a serial number until they are started, and avdmanager don't make it easy to get their serial either, so we need to check the running devices with adb "emu avd name" command and compare. Change-Id: I3253d25a3461a36eb9918b3c796062bf9e82e0c6 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -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<AndroidDeviceInfo> &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
|
||||
|
||||
Reference in New Issue
Block a user