Android: Use ipv4 host to connect to app in android

IPv6 enabled systems can have IPv4 and an IPv6 entry for localhost
and macos seems to prefer IPv6 for localhost and IPv6 is not
supported by adbd

Task-number: QTCREATORBUG-20730
Change-Id: Ia0823fa04581afc6297e5e8d57a8034ba1b5749c
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
Vikas Pachdha
2018-07-05 08:13:08 +02:00
parent ad11e08f72
commit d9bcf78270
3 changed files with 8 additions and 3 deletions

View File

@@ -44,6 +44,7 @@
#include <utils/hostosinfo.h>
#include <QDirIterator>
#include <QHostAddress>
using namespace Debugger;
using namespace ProjectExplorer;
@@ -131,7 +132,10 @@ void AndroidDebugSupport::start()
+ "/app_process");
setSkipExecutableValidation(true);
setUseExtendedRemote(true);
setRemoteChannel(":" + m_runner->gdbServerPort().toString());
QUrl gdbServer;
gdbServer.setHost(QHostAddress(QHostAddress::LocalHost).toString());
gdbServer.setPort(m_runner->gdbServerPort().number());
setRemoteChannel(gdbServer);
setSysRoot(AndroidConfigurations::currentConfig().ndkLocation().appendPath("platforms")
.appendPath(QString("android-%1").arg(AndroidManager::minimumSDK(target)))
.appendPath(toNdkArch(AndroidManager::targetArch(target))).toString());

View File

@@ -34,6 +34,7 @@
#include "androidavdmanager.h"
#include "androidrunnerworker.h"
#include <QHostAddress>
#include <coreplugin/messagemanager.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorersettings.h>
@@ -197,6 +198,7 @@ void AndroidRunner::qmlServerPortReady(Port port)
// device side. It only happens to work since we redirect
// host port n to target port n via adb.
QUrl serverUrl;
serverUrl.setHost(QHostAddress(QHostAddress::LocalHost).toString());
serverUrl.setPort(port.number());
serverUrl.setScheme(urlTcpScheme());
emit qmlServerReady(serverUrl);

View File

@@ -166,8 +166,7 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa
QTC_CHECK(m_localGdbServerPort.isValid());
if (m_qmlDebugServices != QmlDebug::NoQmlDebugServices) {
QTcpServer server;
QTC_ASSERT(server.listen(QHostAddress::LocalHost)
|| server.listen(QHostAddress::LocalHostIPv6),
QTC_ASSERT(server.listen(QHostAddress::LocalHost),
qDebug() << tr("No free ports available on host for QML debugging."));
m_qmlServer.setScheme(Utils::urlTcpScheme());
m_qmlServer.setHost(server.serverAddress().toString());