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);