forked from qt-creator/qt-creator
Android: Lump apk build step creation together
Just moved code for now, will be better for LayoutBuilder. Change-Id: I722f08b8efa13c3df8ffced3d87f8ad2870345d4 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -114,11 +114,6 @@ private:
|
|||||||
FilePath appProjectFilePath() const;
|
FilePath appProjectFilePath() const;
|
||||||
QString openSslIncludeFileContent(const FilePath &projectPath);
|
QString openSslIncludeFileContent(const FilePath &projectPath);
|
||||||
|
|
||||||
QWidget *createApplicationGroup();
|
|
||||||
QWidget *createSignPackageGroup();
|
|
||||||
QWidget *createAdvancedGroup();
|
|
||||||
QWidget *createAdditionalLibrariesGroup();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AndroidBuildApkStep *m_step = nullptr;
|
AndroidBuildApkStep *m_step = nullptr;
|
||||||
QCheckBox *m_signPackageCheckBox = nullptr;
|
QCheckBox *m_signPackageCheckBox = nullptr;
|
||||||
@@ -131,34 +126,88 @@ private:
|
|||||||
AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step)
|
AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step)
|
||||||
: m_step(step)
|
: m_step(step)
|
||||||
{
|
{
|
||||||
|
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
||||||
|
sizePolicy.setHorizontalStretch(0);
|
||||||
|
sizePolicy.setVerticalStretch(0);
|
||||||
|
|
||||||
|
|
||||||
|
// Application Signature Group
|
||||||
|
|
||||||
|
auto signPackageGroup = new QGroupBox(Tr::tr("Application Signature"), this);
|
||||||
|
|
||||||
|
auto keystoreLocationLabel = new QLabel(Tr::tr("Keystore:"), signPackageGroup);
|
||||||
|
keystoreLocationLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
|
||||||
|
|
||||||
|
auto keystoreLocationChooser = new PathChooser(signPackageGroup);
|
||||||
|
keystoreLocationChooser->setExpectedKind(PathChooser::File);
|
||||||
|
keystoreLocationChooser->lineEdit()->setReadOnly(true);
|
||||||
|
keystoreLocationChooser->setFilePath(m_step->keystorePath());
|
||||||
|
keystoreLocationChooser->setInitialBrowsePathBackup(FileUtils::homePath());
|
||||||
|
keystoreLocationChooser->setPromptDialogFilter(Tr::tr("Keystore files (*.keystore *.jks)"));
|
||||||
|
keystoreLocationChooser->setPromptDialogTitle(Tr::tr("Select Keystore File"));
|
||||||
|
connect(keystoreLocationChooser, &PathChooser::textChanged, this, [this, keystoreLocationChooser] {
|
||||||
|
const FilePath file = keystoreLocationChooser->rawFilePath();
|
||||||
|
m_step->setKeystorePath(file);
|
||||||
|
m_signPackageCheckBox->setChecked(!file.isEmpty());
|
||||||
|
if (!file.isEmpty())
|
||||||
|
setCertificates();
|
||||||
|
});
|
||||||
|
|
||||||
|
auto keystoreCreateButton = new QPushButton(Tr::tr("Create..."), signPackageGroup);
|
||||||
|
connect(keystoreCreateButton, &QAbstractButton::clicked, this, [this, keystoreLocationChooser] {
|
||||||
|
AndroidCreateKeystoreCertificate d;
|
||||||
|
if (d.exec() != QDialog::Accepted)
|
||||||
|
return;
|
||||||
|
keystoreLocationChooser->setFilePath(d.keystoreFilePath());
|
||||||
|
m_step->setKeystorePath(d.keystoreFilePath());
|
||||||
|
m_step->setKeystorePassword(d.keystorePassword());
|
||||||
|
m_step->setCertificateAlias(d.certificateAlias());
|
||||||
|
m_step->setCertificatePassword(d.certificatePassword());
|
||||||
|
setCertificates();
|
||||||
|
});
|
||||||
|
|
||||||
|
m_signPackageCheckBox = new QCheckBox(Tr::tr("Sign package"), signPackageGroup);
|
||||||
|
m_signPackageCheckBox->setChecked(m_step->signPackage());
|
||||||
|
|
||||||
|
m_signingDebugWarningLabel = new Utils::InfoLabel(Tr::tr("Signing a debug package"),
|
||||||
|
Utils::InfoLabel::Warning, signPackageGroup);
|
||||||
|
m_signingDebugWarningLabel->hide();
|
||||||
|
|
||||||
|
auto certificateAliasLabel = new QLabel(Tr::tr("Certificate alias:"), signPackageGroup);
|
||||||
|
certificateAliasLabel->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
|
||||||
|
|
||||||
|
m_certificatesAliasComboBox = new QComboBox(signPackageGroup);
|
||||||
|
m_certificatesAliasComboBox->setEnabled(false);
|
||||||
|
m_certificatesAliasComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
|
||||||
|
|
||||||
using namespace Layouting;
|
using namespace Layouting;
|
||||||
Column {
|
Column {
|
||||||
createSignPackageGroup(),
|
Row { keystoreLocationLabel, keystoreLocationChooser, keystoreCreateButton },
|
||||||
createApplicationGroup(),
|
m_signPackageCheckBox,
|
||||||
createAdvancedGroup(),
|
Row { m_signingDebugWarningLabel, certificateAliasLabel, m_certificatesAliasComboBox }
|
||||||
createAdditionalLibrariesGroup(),
|
}.attachTo(signPackageGroup);
|
||||||
noMargin
|
|
||||||
}.attachTo(this);
|
|
||||||
|
|
||||||
connect(m_step->buildConfiguration(), &BuildConfiguration::buildTypeChanged,
|
connect(m_signPackageCheckBox, &QAbstractButton::toggled,
|
||||||
this, &AndroidBuildApkWidget::updateSigningWarning);
|
this, &AndroidBuildApkWidget::signPackageCheckBoxToggled);
|
||||||
|
|
||||||
connect(m_signPackageCheckBox, &QAbstractButton::clicked,
|
auto updateAlias = [this](int idx) {
|
||||||
m_addDebuggerCheckBox, &QWidget::setEnabled);
|
QString alias = m_certificatesAliasComboBox->itemText(idx);
|
||||||
|
if (!alias.isEmpty())
|
||||||
|
m_step->setCertificateAlias(alias);
|
||||||
|
};
|
||||||
|
|
||||||
signPackageCheckBoxToggled(m_step->signPackage());
|
connect(m_certificatesAliasComboBox, &QComboBox::activated, this, updateAlias);
|
||||||
updateSigningWarning();
|
connect(m_certificatesAliasComboBox, &QComboBox::currentIndexChanged, this, updateAlias);
|
||||||
}
|
|
||||||
|
// Application group
|
||||||
|
|
||||||
QWidget *AndroidBuildApkWidget::createApplicationGroup()
|
|
||||||
{
|
|
||||||
QtSupport::QtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_step->target()->kit());
|
QtSupport::QtVersion *qt = QtSupport::QtKitAspect::qtVersion(m_step->target()->kit());
|
||||||
const int minApiSupported = AndroidManager::defaultMinimumSDK(qt);
|
const int minApiSupported = AndroidManager::defaultMinimumSDK(qt);
|
||||||
QStringList targets = AndroidConfig::apiLevelNamesFor(AndroidConfigurations::sdkManager()->
|
QStringList targets = AndroidConfig::apiLevelNamesFor(AndroidConfigurations::sdkManager()->
|
||||||
filteredSdkPlatforms(minApiSupported));
|
filteredSdkPlatforms(minApiSupported));
|
||||||
targets.removeDuplicates();
|
targets.removeDuplicates();
|
||||||
|
|
||||||
auto group = new QGroupBox(Tr::tr("Application"), this);
|
auto applicationGroup = new QGroupBox(Tr::tr("Application"), this);
|
||||||
|
|
||||||
auto targetSDKComboBox = new QComboBox();
|
auto targetSDKComboBox = new QComboBox();
|
||||||
targetSDKComboBox->addItems(targets);
|
targetSDKComboBox->addItems(targets);
|
||||||
@@ -189,7 +238,7 @@ QWidget *AndroidBuildApkWidget::createApplicationGroup()
|
|||||||
: buildToolsVersions.indexOf(m_step->buildToolsVersion());
|
: buildToolsVersions.indexOf(m_step->buildToolsVersion());
|
||||||
buildToolsSdkComboBox->setCurrentIndex(initIdx);
|
buildToolsSdkComboBox->setCurrentIndex(initIdx);
|
||||||
|
|
||||||
auto formLayout = new QFormLayout(group);
|
auto formLayout = new QFormLayout(applicationGroup);
|
||||||
formLayout->addRow(Tr::tr("Android build-tools version:"), buildToolsSdkComboBox);
|
formLayout->addRow(Tr::tr("Android build-tools version:"), buildToolsSdkComboBox);
|
||||||
formLayout->addRow(Tr::tr("Android build platform SDK:"), targetSDKComboBox);
|
formLayout->addRow(Tr::tr("Android build platform SDK:"), targetSDKComboBox);
|
||||||
|
|
||||||
@@ -203,89 +252,11 @@ QWidget *AndroidBuildApkWidget::createApplicationGroup()
|
|||||||
|
|
||||||
formLayout->addRow(Tr::tr("Android customization:"), createAndroidTemplatesButton);
|
formLayout->addRow(Tr::tr("Android customization:"), createAndroidTemplatesButton);
|
||||||
|
|
||||||
return group;
|
// Advanced Actions group
|
||||||
}
|
|
||||||
|
|
||||||
QWidget *AndroidBuildApkWidget::createSignPackageGroup()
|
auto advancedGroup = new QGroupBox(Tr::tr("Advanced Actions"), this);
|
||||||
{
|
|
||||||
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
|
||||||
sizePolicy.setHorizontalStretch(0);
|
|
||||||
sizePolicy.setVerticalStretch(0);
|
|
||||||
|
|
||||||
auto group = new QGroupBox(Tr::tr("Application Signature"), this);
|
m_addDebuggerCheckBox = new QCheckBox(Tr::tr("Add debug server"), advancedGroup);
|
||||||
|
|
||||||
auto keystoreLocationLabel = new QLabel(Tr::tr("Keystore:"), group);
|
|
||||||
keystoreLocationLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
|
|
||||||
|
|
||||||
auto keystoreLocationChooser = new PathChooser(group);
|
|
||||||
keystoreLocationChooser->setExpectedKind(PathChooser::File);
|
|
||||||
keystoreLocationChooser->lineEdit()->setReadOnly(true);
|
|
||||||
keystoreLocationChooser->setFilePath(m_step->keystorePath());
|
|
||||||
keystoreLocationChooser->setInitialBrowsePathBackup(FileUtils::homePath());
|
|
||||||
keystoreLocationChooser->setPromptDialogFilter(Tr::tr("Keystore files (*.keystore *.jks)"));
|
|
||||||
keystoreLocationChooser->setPromptDialogTitle(Tr::tr("Select Keystore File"));
|
|
||||||
connect(keystoreLocationChooser, &PathChooser::textChanged, this, [this, keystoreLocationChooser] {
|
|
||||||
const FilePath file = keystoreLocationChooser->rawFilePath();
|
|
||||||
m_step->setKeystorePath(file);
|
|
||||||
m_signPackageCheckBox->setChecked(!file.isEmpty());
|
|
||||||
if (!file.isEmpty())
|
|
||||||
setCertificates();
|
|
||||||
});
|
|
||||||
|
|
||||||
auto keystoreCreateButton = new QPushButton(Tr::tr("Create..."), group);
|
|
||||||
connect(keystoreCreateButton, &QAbstractButton::clicked, this, [this, keystoreLocationChooser] {
|
|
||||||
AndroidCreateKeystoreCertificate d;
|
|
||||||
if (d.exec() != QDialog::Accepted)
|
|
||||||
return;
|
|
||||||
keystoreLocationChooser->setFilePath(d.keystoreFilePath());
|
|
||||||
m_step->setKeystorePath(d.keystoreFilePath());
|
|
||||||
m_step->setKeystorePassword(d.keystorePassword());
|
|
||||||
m_step->setCertificateAlias(d.certificateAlias());
|
|
||||||
m_step->setCertificatePassword(d.certificatePassword());
|
|
||||||
setCertificates();
|
|
||||||
});
|
|
||||||
|
|
||||||
m_signPackageCheckBox = new QCheckBox(Tr::tr("Sign package"), group);
|
|
||||||
m_signPackageCheckBox->setChecked(m_step->signPackage());
|
|
||||||
|
|
||||||
m_signingDebugWarningLabel = new Utils::InfoLabel(Tr::tr("Signing a debug package"),
|
|
||||||
Utils::InfoLabel::Warning, group);
|
|
||||||
m_signingDebugWarningLabel->hide();
|
|
||||||
|
|
||||||
auto certificateAliasLabel = new QLabel(Tr::tr("Certificate alias:"), group);
|
|
||||||
certificateAliasLabel->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
|
|
||||||
|
|
||||||
m_certificatesAliasComboBox = new QComboBox(group);
|
|
||||||
m_certificatesAliasComboBox->setEnabled(false);
|
|
||||||
m_certificatesAliasComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
|
|
||||||
|
|
||||||
using namespace Layouting;
|
|
||||||
Column {
|
|
||||||
Row { keystoreLocationLabel, keystoreLocationChooser, keystoreCreateButton },
|
|
||||||
m_signPackageCheckBox,
|
|
||||||
Row { m_signingDebugWarningLabel, certificateAliasLabel, m_certificatesAliasComboBox }
|
|
||||||
}.attachTo(group);
|
|
||||||
|
|
||||||
connect(m_signPackageCheckBox, &QAbstractButton::toggled,
|
|
||||||
this, &AndroidBuildApkWidget::signPackageCheckBoxToggled);
|
|
||||||
|
|
||||||
auto updateAlias = [this](int idx) {
|
|
||||||
QString alias = m_certificatesAliasComboBox->itemText(idx);
|
|
||||||
if (!alias.isEmpty())
|
|
||||||
m_step->setCertificateAlias(alias);
|
|
||||||
};
|
|
||||||
|
|
||||||
connect(m_certificatesAliasComboBox, &QComboBox::activated, this, updateAlias);
|
|
||||||
connect(m_certificatesAliasComboBox, &QComboBox::currentIndexChanged, this, updateAlias);
|
|
||||||
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
|
|
||||||
QWidget *AndroidBuildApkWidget::createAdvancedGroup()
|
|
||||||
{
|
|
||||||
auto group = new QGroupBox(Tr::tr("Advanced Actions"), this);
|
|
||||||
|
|
||||||
m_addDebuggerCheckBox = new QCheckBox(Tr::tr("Add debug server"), group);
|
|
||||||
m_addDebuggerCheckBox->setEnabled(false);
|
m_addDebuggerCheckBox->setEnabled(false);
|
||||||
m_addDebuggerCheckBox->setToolTip(Tr::tr("Packages debug server with "
|
m_addDebuggerCheckBox->setToolTip(Tr::tr("Packages debug server with "
|
||||||
"the APK to enable debugging. For the signed APK this option is unchecked by default."));
|
"the APK to enable debugging. For the signed APK this option is unchecked by default."));
|
||||||
@@ -298,20 +269,18 @@ QWidget *AndroidBuildApkWidget::createAdvancedGroup()
|
|||||||
m_step->openPackageLocation,
|
m_step->openPackageLocation,
|
||||||
m_step->verboseOutput,
|
m_step->verboseOutput,
|
||||||
m_addDebuggerCheckBox
|
m_addDebuggerCheckBox
|
||||||
}.attachTo(group);
|
}.attachTo(advancedGroup);
|
||||||
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
|
|
||||||
QWidget *AndroidBuildApkWidget::createAdditionalLibrariesGroup()
|
// Additional Libraries group
|
||||||
{
|
|
||||||
auto group = new QGroupBox(Tr::tr("Additional Libraries"));
|
auto additionalLibrariesGroup = new QGroupBox(Tr::tr("Additional Libraries"));
|
||||||
group->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
|
additionalLibrariesGroup->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
|
||||||
|
|
||||||
auto libsModel = new AndroidExtraLibraryListModel(m_step->buildSystem(), this);
|
auto libsModel = new AndroidExtraLibraryListModel(m_step->buildSystem(), this);
|
||||||
connect(libsModel, &AndroidExtraLibraryListModel::enabledChanged, this,
|
connect(libsModel, &AndroidExtraLibraryListModel::enabledChanged, this,
|
||||||
[this, group](const bool enabled) {
|
[this, additionalLibrariesGroup](const bool enabled) {
|
||||||
group->setEnabled(enabled);
|
additionalLibrariesGroup->setEnabled(enabled);
|
||||||
m_openSslCheckBox->setChecked(isOpenSslLibsIncluded());
|
m_openSslCheckBox->setChecked(isOpenSslLibsIncluded());
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -347,11 +316,10 @@ QWidget *AndroidBuildApkWidget::createAdditionalLibrariesGroup()
|
|||||||
connect(m_openSslCheckBox, &QAbstractButton::clicked, this,
|
connect(m_openSslCheckBox, &QAbstractButton::clicked, this,
|
||||||
&AndroidBuildApkWidget::onOpenSslCheckBoxChanged);
|
&AndroidBuildApkWidget::onOpenSslCheckBoxChanged);
|
||||||
|
|
||||||
using namespace Layouting;
|
|
||||||
Grid {
|
Grid {
|
||||||
m_openSslCheckBox, br,
|
m_openSslCheckBox, br,
|
||||||
libsView, Column { addLibButton, removeLibButton, st }
|
libsView, Column { addLibButton, removeLibButton, st }
|
||||||
}.attachTo(group);
|
}.attachTo(additionalLibrariesGroup);
|
||||||
|
|
||||||
QItemSelectionModel *libSelection = libsView->selectionModel();
|
QItemSelectionModel *libSelection = libsView->selectionModel();
|
||||||
connect(libSelection, &QItemSelectionModel::selectionChanged, this, [libSelection, removeLibButton] {
|
connect(libSelection, &QItemSelectionModel::selectionChanged, this, [libSelection, removeLibButton] {
|
||||||
@@ -361,9 +329,26 @@ QWidget *AndroidBuildApkWidget::createAdditionalLibrariesGroup()
|
|||||||
Target *target = m_step->target();
|
Target *target = m_step->target();
|
||||||
const QString buildKey = target->activeBuildKey();
|
const QString buildKey = target->activeBuildKey();
|
||||||
const ProjectNode *node = target->project()->findNodeForBuildKey(buildKey);
|
const ProjectNode *node = target->project()->findNodeForBuildKey(buildKey);
|
||||||
group->setEnabled(node && !node->parseInProgress());
|
additionalLibrariesGroup->setEnabled(node && !node->parseInProgress());
|
||||||
|
|
||||||
return group;
|
// main layout
|
||||||
|
|
||||||
|
Column {
|
||||||
|
signPackageGroup,
|
||||||
|
applicationGroup,
|
||||||
|
advancedGroup,
|
||||||
|
additionalLibrariesGroup,
|
||||||
|
noMargin
|
||||||
|
}.attachTo(this);
|
||||||
|
|
||||||
|
connect(m_step->buildConfiguration(), &BuildConfiguration::buildTypeChanged,
|
||||||
|
this, &AndroidBuildApkWidget::updateSigningWarning);
|
||||||
|
|
||||||
|
connect(m_signPackageCheckBox, &QAbstractButton::clicked,
|
||||||
|
m_addDebuggerCheckBox, &QWidget::setEnabled);
|
||||||
|
|
||||||
|
signPackageCheckBoxToggled(m_step->signPackage());
|
||||||
|
updateSigningWarning();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidBuildApkWidget::signPackageCheckBoxToggled(bool checked)
|
void AndroidBuildApkWidget::signPackageCheckBoxToggled(bool checked)
|
||||||
|
Reference in New Issue
Block a user