Android: Shuffle debug server detection code a bit

More in one place now.

Change-Id: I974c9351246ea88d8d16bcf7fb45abf763b7b7e5
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
hjk
2020-05-18 16:20:21 +02:00
parent 08734e2ea0
commit 5ce3059464
3 changed files with 43 additions and 43 deletions

View File

@@ -442,7 +442,7 @@ void AndroidManager::setDeviceSerialNumber(ProjectExplorer::Target *target, cons
target->setNamedSettings(AndroidDeviceSn, deviceSerialNumber); target->setNamedSettings(AndroidDeviceSn, deviceSerialNumber);
} }
static QString preferredAbi(const QStringList &appAbis, Target *target) static QString preferredAbi(const QStringList &appAbis, const Target *target)
{ {
const auto deviceAbis = target->namedSettings(AndroidDeviceAbis).toStringList(); const auto deviceAbis = target->namedSettings(AndroidDeviceAbis).toStringList();
for (const auto &abi : deviceAbis) { for (const auto &abi : deviceAbis) {
@@ -452,7 +452,7 @@ static QString preferredAbi(const QStringList &appAbis, Target *target)
return {}; return {};
} }
QString AndroidManager::apkDevicePreferredAbi(Target *target) QString AndroidManager::apkDevicePreferredAbi(const Target *target)
{ {
auto libsPath = dirPath(target).pathAppended("libs"); auto libsPath = dirPath(target).pathAppended("libs");
QStringList apkAbis; QStringList apkAbis;

View File

@@ -83,7 +83,7 @@ public:
static QString deviceSerialNumber(ProjectExplorer::Target *target); static QString deviceSerialNumber(ProjectExplorer::Target *target);
static void setDeviceSerialNumber(ProjectExplorer::Target *target, const QString &deviceSerialNumber); static void setDeviceSerialNumber(ProjectExplorer::Target *target, const QString &deviceSerialNumber);
static QString apkDevicePreferredAbi(ProjectExplorer::Target *target); static QString apkDevicePreferredAbi(const ProjectExplorer::Target *target);
static void setDeviceAbis(ProjectExplorer::Target *target, const QStringList &deviceAbis); static void setDeviceAbis(ProjectExplorer::Target *target, const QStringList &deviceAbis);
static int deviceApiLevel(ProjectExplorer::Target *target); static int deviceApiLevel(ProjectExplorer::Target *target);

View File

@@ -171,16 +171,6 @@ static QString gdbServerArch(const QString &androidAbi)
return androidAbi; return androidAbi;
} }
static FilePath gdbServer(const QString &androidAbi, const QtSupport::BaseQtVersion *qtVersion)
{
const FilePath path = AndroidConfigurations::currentConfig().ndkLocation(qtVersion)
.pathAppended(QString("prebuilt/android-%1/gdbserver/gdbserver")
.arg(gdbServerArch(androidAbi)));
if (path.exists())
return path;
return {};
}
static QString lldbServerArch(const QString &androidAbi) static QString lldbServerArch(const QString &androidAbi)
{ {
if (androidAbi == "armeabi-v7a") if (androidAbi == "armeabi-v7a")
@@ -201,11 +191,17 @@ static QString lldbServerArch2(const QString &androidAbi)
return androidAbi; // arm64-v8a return androidAbi; // arm64-v8a
} }
static FilePath lldbServer(const QString &androidAbi, const QtSupport::BaseQtVersion *qtVersion) static FilePath debugServer(bool useLldb, const Target *target)
{ {
QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitAspect::qtVersion(target->kit());
QString preferredAbi = AndroidManager::apkDevicePreferredAbi(target);
const AndroidConfig &config = AndroidConfigurations::currentConfig(); const AndroidConfig &config = AndroidConfigurations::currentConfig();
if (useLldb) {
// Search suitable lldb-server binary.
const FilePath prebuilt = config.ndkLocation(qtVersion) / "toolchains/llvm/prebuilt"; const FilePath prebuilt = config.ndkLocation(qtVersion) / "toolchains/llvm/prebuilt";
const QString abiNeedle = lldbServerArch2(androidAbi); const QString abiNeedle = lldbServerArch2(preferredAbi);
// The new, built-in LLDB. // The new, built-in LLDB.
QDirIterator it(prebuilt.toString(), QDir::Files|QDir::Executable, QDirIterator::Subdirectories); QDirIterator it(prebuilt.toString(), QDir::Files|QDir::Executable, QDirIterator::Subdirectories);
@@ -224,11 +220,19 @@ static FilePath lldbServer(const QString &androidAbi, const QtSupport::BaseQtVer
const QString lldbVersion = package.mid(5); const QString lldbVersion = package.mid(5);
const FilePath path = config.sdkLocation() const FilePath path = config.sdkLocation()
/ QString("lldb/%1/android/%2/lldb-server") / QString("lldb/%1/android/%2/lldb-server")
.arg(lldbVersion, lldbServerArch(androidAbi)); .arg(lldbVersion, lldbServerArch(preferredAbi));
if (path.exists()) if (path.exists())
return path; return path;
} }
} }
} else {
// Search suitable gdbserver binary.
const FilePath path = config.ndkLocation(qtVersion)
.pathAppended(QString("prebuilt/android-%1/gdbserver/gdbserver")
.arg(gdbServerArch(preferredAbi)));
if (path.exists())
return path;
}
return {}; return {};
} }
@@ -300,19 +304,15 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa
for (const QString &shellCmd : runner->recordedData(Constants::ANDROID_POSTFINISHSHELLCMDLIST).toStringList()) for (const QString &shellCmd : runner->recordedData(Constants::ANDROID_POSTFINISHSHELLCMDLIST).toStringList())
m_afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd)); m_afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd));
m_debugServerPath = debugServer(m_useLldb, target).toString();
qCDebug(androidRunWorkerLog) << "Device Serial:" << m_deviceSerialNumber qCDebug(androidRunWorkerLog) << "Device Serial:" << m_deviceSerialNumber
<< "API level:" << m_apiLevel << "API level:" << m_apiLevel
<< "Extra Start Args:" << m_amStartExtraArgs << "Extra Start Args:" << m_amStartExtraArgs
<< "Before Start ADB cmds:" << m_beforeStartAdbCommands << "Before Start ADB cmds:" << m_beforeStartAdbCommands
<< "After finish ADB cmds:" << m_afterFinishAdbCommands; << "After finish ADB cmds:" << m_afterFinishAdbCommands
<< "Debug server path:" << m_debugServerPath;
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit()); QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit());
QString preferredAbi = AndroidManager::apkDevicePreferredAbi(target);
if (!preferredAbi.isEmpty()) {
if (m_useLldb)
m_debugServerPath = lldbServer(preferredAbi, version).toString();
else
m_debugServerPath = gdbServer(preferredAbi, version).toString();
}
m_useAppParamsForQmlDebugger = version->qtVersion() >= QtSupport::QtVersionNumber(5, 12); m_useAppParamsForQmlDebugger = version->qtVersion() >= QtSupport::QtVersionNumber(5, 12);
} }