From 960fccc7638880f1fa6dccc978c390828be9fa91 Mon Sep 17 00:00:00 2001 From: Vikas Pachdha Date: Mon, 6 Aug 2018 11:56:20 +0200 Subject: [PATCH] Android: Fix the executable permission of the package dir This fixes the problem where gdb fails to connect to the gdbserver on Android with API > 23 Task-number: QTCREATORBUG-20583 Change-Id: Ia581f8ae5dd6d819ac5ffedf633d1423e9e30074 Reviewed-by: BogDan Vatra --- src/plugins/android/androidrunnerworker.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index 4f08f4f069f..3015f3f28d0 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -399,13 +399,16 @@ void AndroidRunnerWorker::asyncStartHelper() args << "-n" << m_intentName; if (m_useCppDebugger) { args << "-D"; - QString gdbServerSocket; // run-as pwd fails on API 22 so route the pwd through shell. if (!runAdb({"shell", "run-as", m_packageName, "/system/bin/sh", "-c", "pwd"})) { emit remoteProcessFinished(tr("Failed to get process path. Reason: %1.").arg(m_lastRunAdbError)); return; } - gdbServerSocket = QString::fromUtf8(m_lastRunAdbRawOutput.trimmed()) + "/debug-socket"; + + QString packageDir = QString::fromUtf8(m_lastRunAdbRawOutput.trimmed()); + // Add executable flag to package dir. Gdb can't connect to running server on device on + // e.g. on Android 8 with NDK 10e + runAdb({"shell", "run-as", m_packageName, "chmod", "a+x", packageDir}); QString gdbServerExecutable; if (!runAdb({"shell", "run-as", m_packageName, "ls", "lib/"})) { @@ -425,6 +428,7 @@ void AndroidRunnerWorker::asyncStartHelper() return; } + QString gdbServerSocket = packageDir + "/debug-socket"; runAdb({"shell", "run-as", m_packageName, "killall", gdbServerExecutable}); runAdb({"shell", "run-as", m_packageName, "rm", gdbServerSocket}); std::unique_ptr gdbServerProcess(new QProcess, deleter);