aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/android
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@qt.io>2020-10-06 18:49:15 +0200
committerAlessandro Portale <alessandro.portale@qt.io>2020-10-07 11:25:28 +0000
commit323f353c6c3b5072f29b2a149f6c893d851ecad0 (patch)
tree38fff183bf41603d9d4677d6cab006a2e1384f2d /src/plugins/android
parent790a8bc78da07183a5ef913598d2a89b33b136cf (diff)
Android: Replace AVD partition-size spinbox with emulator args input
The android emulator supports many more command-line startup options than "-partition-size". Let's allow the user to take advantage of the full functionalty, by providing a free-text input field for the options. A link to the online documentation is also provided. As a side-effect, the issue that an overridden parition size can cause the "Cold Boot: different AVD configuration" warning is solved by not having -partition-size by default. Task-number: QTCREATORBUG-24735 Change-Id: I41d7b826133708c7ff447c1e257f62368745dea1 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/plugins/android')
-rw-r--r--src/plugins/android/androidavdmanager.cpp2
-rw-r--r--src/plugins/android/androidconfigurations.cpp15
-rw-r--r--src/plugins/android/androidconfigurations.h6
-rw-r--r--src/plugins/android/androidsettingswidget.cpp28
-rw-r--r--src/plugins/android/androidsettingswidget.ui33
5 files changed, 41 insertions, 43 deletions
diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp
index f27247300e1..c000a623544 100644
--- a/src/plugins/android/androidavdmanager.cpp
+++ b/src/plugins/android/androidavdmanager.cpp
@@ -278,7 +278,7 @@ bool AndroidAvdManager::startAvdAsync(const QString &avdName) const
if (AndroidConfigurations::force32bitEmulator())
arguments << "-force-32bit";
- arguments << "-partition-size" << QString::number(m_config.partitionSize())
+ arguments << m_config.emulatorArgs()
<< "-avd" << avdName;
qCDebug(avdManagerLog) << "Running command (startAvdAsync):"
<< CommandLine(m_config.emulatorToolPath(), arguments).toUserOutput();
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 105bf9d40ec..0d342acb530 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -116,7 +116,7 @@ namespace {
const QLatin1String OpenJDKLocationKey("OpenJDKLocation");
const QLatin1String OpenSslPriLocationKey("OpenSSLPriLocation");
const QLatin1String AutomaticKitCreationKey("AutomatiKitCreation");
- const QLatin1String PartitionSizeKey("PartitionSize");
+ const QLatin1String EmulatorArgsKey("EmulatorArgs");
const QLatin1String ArmToolchainPrefix("arm-linux-androideabi");
const QLatin1String X86ToolchainPrefix("x86");
@@ -224,7 +224,8 @@ QLatin1String AndroidConfig::displayName(const Abi &abi)
void AndroidConfig::load(const QSettings &settings)
{
// user settings
- m_partitionSize = settings.value(PartitionSizeKey, 1024).toInt();
+ m_emulatorArgs = settings.value(EmulatorArgsKey,
+ QStringList({"-netdelay", "none", "-netspeed", "full"})).toStringList();
m_sdkLocation = FilePath::fromString(settings.value(SDKLocationKey).toString());
m_customNdkList = settings.value(CustomNdkLocationsKey).toStringList();
m_sdkManagerToolArgs = settings.value(SDKManagerToolArgsKey).toStringList();
@@ -262,7 +263,7 @@ void AndroidConfig::save(QSettings &settings) const
settings.setValue(SDKManagerToolArgsKey, m_sdkManagerToolArgs);
settings.setValue(OpenJDKLocationKey, m_openJDKLocation.toString());
settings.setValue(OpenSslPriLocationKey, m_openSslLocation.toString());
- settings.setValue(PartitionSizeKey, m_partitionSize);
+ settings.setValue(EmulatorArgsKey, m_emulatorArgs);
settings.setValue(AutomaticKitCreationKey, m_automaticKitCreation);
settings.setValue(SdkFullyConfiguredKey, m_sdkFullyConfigured);
}
@@ -990,14 +991,14 @@ QString AndroidConfig::toolchainHostFromNdk(const FilePath &ndkPath) const
return toolchainHost;
}
-unsigned AndroidConfig::partitionSize() const
+QStringList AndroidConfig::emulatorArgs() const
{
- return m_partitionSize;
+ return m_emulatorArgs;
}
-void AndroidConfig::setPartitionSize(unsigned partitionSize)
+void AndroidConfig::setEmulatorArgs(const QStringList &args)
{
- m_partitionSize = partitionSize;
+ m_emulatorArgs = args;
}
bool AndroidConfig::automaticKitCreation() const
diff --git a/src/plugins/android/androidconfigurations.h b/src/plugins/android/androidconfigurations.h
index 547be33d0a9..edfbfa2704b 100644
--- a/src/plugins/android/androidconfigurations.h
+++ b/src/plugins/android/androidconfigurations.h
@@ -146,8 +146,8 @@ public:
QString toolchainHost(const QtSupport::BaseQtVersion *qtVersion) const;
QString toolchainHostFromNdk(const Utils::FilePath &ndkPath) const;
- unsigned partitionSize() const;
- void setPartitionSize(unsigned partitionSize);
+ QStringList emulatorArgs() const;
+ void setEmulatorArgs(const QStringList &args);
bool automaticKitCreation() const;
void setAutomaticKitCreation(bool b);
@@ -215,7 +215,7 @@ private:
Utils::FilePath m_openJDKLocation;
Utils::FilePath m_keystoreLocation;
Utils::FilePath m_openSslLocation;
- unsigned m_partitionSize = 1024;
+ QStringList m_emulatorArgs;
bool m_automaticKitCreation = true;
QUrl m_sdkToolsUrl;
QByteArray m_sdkToolsSha256;
diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp
index 49038bd0a41..6bbca51d98f 100644
--- a/src/plugins/android/androidsettingswidget.cpp
+++ b/src/plugins/android/androidsettingswidget.cpp
@@ -52,6 +52,7 @@
#include <QDir>
#include <QFileDialog>
#include <QFutureWatcher>
+#include <QInputDialog>
#include <QList>
#include <QLoggingCategory>
#include <QMessageBox>
@@ -119,7 +120,7 @@ private:
void removeAVD();
void startAVD();
void avdActivated(const QModelIndex &);
- void dataPartitionSizeEditingFinished();
+ void editEmulatorArgsAVD();
void createKitToggled();
void updateUI();
@@ -428,7 +429,6 @@ AndroidSettingsWidget::AndroidSettingsWidget()
m_androidConfig.setOpenSslLocation(m_androidConfig.sdkLocation() / ("android_openssl"));
m_ui.openSslPathChooser->setFilePath(m_androidConfig.openSslLocation());
- m_ui.DataPartitionSizeSpinBox->setValue(m_androidConfig.partitionSize());
m_ui.CreateKitCheckBox->setChecked(m_androidConfig.automaticKitCreation());
m_ui.AVDTableView->setModel(&m_AVDModel);
m_ui.AVDTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
@@ -489,8 +489,8 @@ AndroidSettingsWidget::AndroidSettingsWidget()
this, &AndroidSettingsWidget::avdActivated);
connect(m_ui.AVDTableView, &QAbstractItemView::clicked,
this, &AndroidSettingsWidget::avdActivated);
- connect(m_ui.DataPartitionSizeSpinBox, &QAbstractSpinBox::editingFinished,
- this, &AndroidSettingsWidget::dataPartitionSizeEditingFinished);
+ connect(m_ui.AVDAdvancedOptionsPushButton, &QAbstractButton::clicked,
+ this, &AndroidSettingsWidget::editEmulatorArgsAVD);
connect(m_ui.CreateKitCheckBox, &QAbstractButton::toggled,
this, &AndroidSettingsWidget::createKitToggled);
connect(m_ui.downloadNDKToolButton, &QAbstractButton::clicked,
@@ -807,9 +807,25 @@ void AndroidSettingsWidget::avdActivated(const QModelIndex &index)
m_ui.AVDStartPushButton->setEnabled(index.isValid());
}
-void AndroidSettingsWidget::dataPartitionSizeEditingFinished()
+void AndroidSettingsWidget::editEmulatorArgsAVD()
{
- m_androidConfig.setPartitionSize(m_ui.DataPartitionSizeSpinBox->value());
+ const QString helpUrl =
+ "https://developer.android.com/studio/run/emulator-commandline#startup-options";
+
+ QInputDialog dialog(this);
+ dialog.setWindowTitle(tr("Emulator Command-line Startup Options"));
+ dialog.setLabelText(tr("Emulator command-line startup options (<a href=\"%1\">Help Web Page</a>):").arg(helpUrl));
+ dialog.setTextValue(m_androidConfig.emulatorArgs().join(' '));
+
+ if (auto label = dialog.findChild<QLabel*>()) {
+ label->setOpenExternalLinks(true);
+ label->setMinimumWidth(500);
+ }
+
+ if (dialog.exec() != QDialog::Accepted)
+ return;
+
+ m_androidConfig.setEmulatorArgs(QtcProcess::splitArgs(dialog.textValue()));
}
void AndroidSettingsWidget::createKitToggled()
diff --git a/src/plugins/android/androidsettingswidget.ui b/src/plugins/android/androidsettingswidget.ui
index d29a6073cf7..a43f830f53b 100644
--- a/src/plugins/android/androidsettingswidget.ui
+++ b/src/plugins/android/androidsettingswidget.ui
@@ -314,32 +314,6 @@
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
- <widget class="QLabel" name="DataPartitionSizeLable">
- <property name="text">
- <string>System/data partition size:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="DataPartitionSizeSpinBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="suffix">
- <string> Mb</string>
- </property>
- <property name="maximum">
- <number>99999</number>
- </property>
- <property name="value">
- <number>1024</number>
- </property>
- </widget>
- </item>
- <item>
<widget class="QPushButton" name="AVDStartPushButton">
<property name="enabled">
<bool>false</bool>
@@ -420,6 +394,13 @@
</property>
</spacer>
</item>
+ <item>
+ <widget class="QPushButton" name="AVDAdvancedOptionsPushButton">
+ <property name="text">
+ <string>Advanced Options...</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
</layout>