diff options
author | Alessandro Portale <alessandro.portale@qt.io> | 2020-10-06 18:49:15 +0200 |
---|---|---|
committer | Alessandro Portale <alessandro.portale@qt.io> | 2020-10-07 11:25:28 +0000 |
commit | 323f353c6c3b5072f29b2a149f6c893d851ecad0 (patch) | |
tree | 38fff183bf41603d9d4677d6cab006a2e1384f2d /src/plugins/android | |
parent | 790a8bc78da07183a5ef913598d2a89b33b136cf (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.cpp | 2 | ||||
-rw-r--r-- | src/plugins/android/androidconfigurations.cpp | 15 | ||||
-rw-r--r-- | src/plugins/android/androidconfigurations.h | 6 | ||||
-rw-r--r-- | src/plugins/android/androidsettingswidget.cpp | 28 | ||||
-rw-r--r-- | src/plugins/android/androidsettingswidget.ui | 33 |
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> |