aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVikas Pachdha <vikas.pachdha@qt.io>2017-05-05 12:26:23 +0200
committerEike Ziller <eike.ziller@qt.io>2017-05-08 15:13:29 +0000
commit5009bafea25dd4725cabb381733d2cbefc33ba54 (patch)
tree4e721fb81950d66a1abad8b453590d35502bde30
parent63e395c876b6d2de74c48dd287c04d037b4e26a1 (diff)
Android: Fix C++ debuggingv4.3.0-rc1
Target Async mode enabled only for ndk version > 11 Task-number: QTCREATORBUG-18111 Change-Id: I218b6c23c1da13091f0035193a43e6117748055a Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
-rw-r--r--src/plugins/android/androidconfigurations.cpp54
-rw-r--r--src/plugins/android/androidconfigurations.h1
-rw-r--r--src/plugins/android/androiddebugsupport.cpp4
3 files changed, 58 insertions, 1 deletions
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 42027743b8..1287f4946f 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -61,7 +61,9 @@
#include <QDirIterator>
#include <QFileInfo>
#include <QHostAddress>
+#include <QLoggingCategory>
#include <QProcess>
+#include <QRegularExpression>
#include <QSettings>
#include <QStringList>
#include <QTcpSocket>
@@ -72,6 +74,10 @@
using namespace ProjectExplorer;
using namespace Utils;
+namespace {
+Q_LOGGING_CATEGORY(avdConfigLog, "qtc.android.androidconfig")
+}
+
namespace Android {
using namespace Internal;
@@ -114,6 +120,7 @@ namespace {
const QLatin1String changeTimeStamp("ChangeTimeStamp");
const QLatin1String sdkToolsVersionKey("Pkg.Revision");
+ const QLatin1String ndkRevisionKey("Pkg.Revision");
static QString sdkSettingsFileName()
{
@@ -758,6 +765,53 @@ FileName AndroidConfig::ndkLocation() const
return m_ndkLocation;
}
+QVersionNumber AndroidConfig::ndkVersion() const
+{
+ QVersionNumber version;
+ if (!m_ndkLocation.exists()) {
+ qCDebug(avdConfigLog) << "Can not find ndk version. Check NDK path."
+ << m_ndkLocation.toString();
+ return version;
+ }
+
+ Utils::FileName ndkPropertiesPath(m_ndkLocation);
+ ndkPropertiesPath.appendPath("source.properties");
+ if (ndkPropertiesPath.exists()) {
+ // source.properties files exists in NDK version > 11
+ QSettings settings(ndkPropertiesPath.toString(), QSettings::IniFormat);
+ auto versionStr = settings.value(ndkRevisionKey).toString();
+ version = QVersionNumber::fromString(versionStr);
+ } else {
+ // No source.properties. There should be a file named RELEASE.TXT
+ Utils::FileName ndkReleaseTxtPath(m_ndkLocation);
+ ndkReleaseTxtPath.appendPath("RELEASE.TXT");
+ Utils::FileReader reader;
+ QString errorString;
+ if (reader.fetch(ndkReleaseTxtPath.toString(), &errorString)) {
+ // RELEASE.TXT contains the ndk version in either of the following formats:
+ // r6a
+ // r10e (64 bit)
+ QString content = QString::fromUtf8(reader.data());
+ QRegularExpression re("(r)(?<major>[0-9]{1,2})(?<minor>[a-z]{1,1})");
+ QRegularExpressionMatch match = re.match(content);
+ if (match.hasMatch()) {
+ QString major = match.captured("major");
+ QString minor = match.captured("minor");
+ // Minor version: a = 0, b = 1, c = 2 and so on.
+ // Int equivalent = minorVersionChar - 'a'. i.e. minorVersionChar - 97.
+ version = QVersionNumber::fromString(QString("%1.%2.0").arg(major)
+ .arg((int)minor[0].toLatin1() - 97));
+ } else {
+ qCDebug(avdConfigLog) << "Can not find ndk version. Can not parse RELEASE.TXT."
+ << content;
+ }
+ } else {
+ qCDebug(avdConfigLog) << "Can not find ndk version." << errorString;
+ }
+ }
+ return version;
+}
+
void AndroidConfig::setNdkLocation(const FileName &ndkLocation)
{
m_ndkLocation = ndkLocation;
diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h
index 9107680810..d5c59936d3 100644
--- a/src/plugins/android/androidconfigurations.h
+++ b/src/plugins/android/androidconfigurations.h
@@ -115,6 +115,7 @@ public:
QVersionNumber sdkToolsVersion() const;
Utils::FileName ndkLocation() const;
+ QVersionNumber ndkVersion() const;
void setNdkLocation(const Utils::FileName &ndkLocation);
Utils::FileName antLocation() const;
diff --git a/src/plugins/android/androiddebugsupport.cpp b/src/plugins/android/androiddebugsupport.cpp
index 25967ba2e2..9da8ff511a 100644
--- a/src/plugins/android/androiddebugsupport.cpp
+++ b/src/plugins/android/androiddebugsupport.cpp
@@ -104,8 +104,10 @@ RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *
params.displayName = AndroidManager::packageName(target);
params.remoteSetupNeeded = true;
params.useContinueInsteadOfRun = true;
- if (!Utils::HostOsInfo::isWindowsHost()) // Workaround for NDK 11c(b?)
+ if (!Utils::HostOsInfo::isWindowsHost() &&
+ AndroidConfigurations::currentConfig().ndkVersion() >= QVersionNumber(11, 0, 0)) {
params.useTargetAsync = true;
+ }
auto aspect = runConfig->extraAspect<DebuggerRunConfigurationAspect>();
if (aspect->useCppDebugger()) {