From e21fe24c404ffc00e9fda56912e28e9f199855c8 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Thu, 21 Nov 2019 11:03:03 +0200 Subject: [PATCH] Android: Get the preferred Abi from apk & device Change-Id: I47325aaec0575dde0e9c9669e61248dac753c670 Reviewed-by: Cristian Adam --- src/plugins/android/androidmanager.cpp | 18 ++++++++++++++++-- src/plugins/android/androidmanager.h | 1 + src/plugins/android/androidrunnerworker.cpp | 4 +++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 80e6fbbd801..cae47d4d4b6 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -423,9 +423,8 @@ void AndroidManager::setDeviceSerialNumber(ProjectExplorer::Target *target, cons target->setNamedSettings(AndroidDeviceSn, deviceSerialNumber); } -QString AndroidManager::devicePreferredAbi(Target *target) +static QString preferredAbi(const QStringList &appAbis, Target *target) { - auto appAbis = applicationAbis(target); const auto deviceAbis = target->namedSettings(AndroidDeviceAbis).toStringList(); for (const auto &abi : deviceAbis) { if (appAbis.contains(abi)) @@ -434,6 +433,21 @@ QString AndroidManager::devicePreferredAbi(Target *target) return {}; } +QString AndroidManager::devicePreferredAbi(Target *target) +{ + return preferredAbi(applicationAbis(target), target); +} + +QString AndroidManager::apkDevicePreferredAbi(Target *target) +{ + auto libsPath = dirPath(target).pathAppended("libs"); + QStringList apkAbis; + for (const auto &abi : QDir{libsPath.toString()}.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) + if (QDir{libsPath.pathAppended(abi).toString()}.entryList(QStringList("*.so"), QDir::Files | QDir::NoDotAndDotDot).length()) + apkAbis << abi; + return preferredAbi(apkAbis, target); +} + void AndroidManager::setDeviceAbis(ProjectExplorer::Target *target, const QStringList &deviceAbis) { target->setNamedSettings(AndroidDeviceAbis, deviceAbis); diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h index a6af5651e9f..cb0958a0401 100644 --- a/src/plugins/android/androidmanager.h +++ b/src/plugins/android/androidmanager.h @@ -85,6 +85,7 @@ public: static void setDeviceSerialNumber(ProjectExplorer::Target *target, const QString &deviceSerialNumber); static QString devicePreferredAbi(ProjectExplorer::Target *target); + static QString apkDevicePreferredAbi(ProjectExplorer::Target *target); static void setDeviceAbis(ProjectExplorer::Target *target, const QStringList &deviceAbis); static int deviceApiLevel(ProjectExplorer::Target *target); diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index 9de3d680837..a789f7c0125 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -225,7 +225,9 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa << "Extra Start Args:" << m_amStartExtraArgs << "Before Start ADB cmds:" << m_beforeStartAdbCommands << "After finish ADB cmds:" << m_afterFinishAdbCommands; - m_gdbserverPath = AndroidConfigurations::instance()->currentConfig().gdbServer(AndroidManager::devicePreferredAbi(target)).toString(); + QString preferredAbi = AndroidManager::apkDevicePreferredAbi(target); + if (!preferredAbi.isEmpty()) + m_gdbserverPath = AndroidConfigurations::instance()->currentConfig().gdbServer(preferredAbi).toString(); QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit()); m_useAppParamsForQmlDebugger = version->qtVersion() >= QtSupport::QtVersionNumber(5, 12); }