Android: FilePath-ify certificate handling

Change-Id: Ic7bf25567ac74555926d105c03cdac5a9e49b5a6
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Alessandro Portale
2022-11-23 19:42:36 +01:00
parent d743770493
commit 65f27c765a
4 changed files with 25 additions and 18 deletions

View File

@@ -629,12 +629,12 @@ bool AndroidBuildApkStep::verifyKeystorePassword()
return false; return false;
} }
if (AndroidManager::checkKeystorePassword(m_keystorePath.toString(), m_keystorePasswd)) if (AndroidManager::checkKeystorePassword(m_keystorePath, m_keystorePasswd))
return true; return true;
bool success = false; bool success = false;
auto verifyCallback = std::bind(&AndroidManager::checkKeystorePassword, auto verifyCallback = std::bind(&AndroidManager::checkKeystorePassword,
m_keystorePath.toString(), std::placeholders::_1); m_keystorePath, std::placeholders::_1);
m_keystorePasswd = PasswordInputDialog::getPassword(PasswordInputDialog::KeystorePassword, m_keystorePasswd = PasswordInputDialog::getPassword(PasswordInputDialog::KeystorePassword,
verifyCallback, "", &success); verifyCallback, "", &success);
return success; return success;
@@ -642,21 +642,21 @@ bool AndroidBuildApkStep::verifyKeystorePassword()
bool AndroidBuildApkStep::verifyCertificatePassword() bool AndroidBuildApkStep::verifyCertificatePassword()
{ {
if (!AndroidManager::checkCertificateExists(m_keystorePath.toString(), m_keystorePasswd, if (!AndroidManager::checkCertificateExists(m_keystorePath, m_keystorePasswd,
m_certificateAlias)) { m_certificateAlias)) {
reportWarningOrError(Tr::tr("Cannot sign the package. Certificate alias %1 does not exist.") reportWarningOrError(Tr::tr("Cannot sign the package. Certificate alias %1 does not exist.")
.arg(m_certificateAlias), Task::Error); .arg(m_certificateAlias), Task::Error);
return false; return false;
} }
if (AndroidManager::checkCertificatePassword(m_keystorePath.toString(), m_keystorePasswd, if (AndroidManager::checkCertificatePassword(m_keystorePath, m_keystorePasswd,
m_certificateAlias, m_certificatePasswd)) { m_certificateAlias, m_certificatePasswd)) {
return true; return true;
} }
bool success = false; bool success = false;
auto verifyCallback = std::bind(&AndroidManager::checkCertificatePassword, auto verifyCallback = std::bind(&AndroidManager::checkCertificatePassword,
m_keystorePath.toString(), m_keystorePasswd, m_keystorePath, m_keystorePasswd,
m_certificateAlias, std::placeholders::_1); m_certificateAlias, std::placeholders::_1);
m_certificatePasswd = PasswordInputDialog::getPassword(PasswordInputDialog::CertificatePassword, m_certificatePasswd = PasswordInputDialog::getPassword(PasswordInputDialog::CertificatePassword,
@@ -867,7 +867,7 @@ QVariantMap AndroidBuildApkStep::toMap() const
return map; return map;
} }
Utils::FilePath AndroidBuildApkStep::keystorePath() Utils::FilePath AndroidBuildApkStep::keystorePath() const
{ {
return m_keystorePath; return m_keystorePath;
} }

View File

@@ -26,7 +26,7 @@ public:
QVariantMap toMap() const override; QVariantMap toMap() const override;
// signing // signing
Utils::FilePath keystorePath(); Utils::FilePath keystorePath() const;
void setKeystorePath(const Utils::FilePath &path); void setKeystorePath(const Utils::FilePath &path);
void setKeystorePassword(const QString &pwd); void setKeystorePassword(const QString &pwd);
void setCertificateAlias(const QString &alias); void setCertificateAlias(const QString &alias);

View File

@@ -570,12 +570,14 @@ void AndroidManager::installQASIPackage(Target *target, const FilePath &packageP
Tr::tr("Android package installation failed.\n%1").arg(error)); Tr::tr("Android package installation failed.\n%1").arg(error));
} }
bool AndroidManager::checkKeystorePassword(const QString &keystorePath, const QString &keystorePasswd) bool AndroidManager::checkKeystorePassword(const FilePath &keystorePath,
const QString &keystorePasswd)
{ {
if (keystorePasswd.isEmpty()) if (keystorePasswd.isEmpty())
return false; return false;
const CommandLine cmd(AndroidConfigurations::currentConfig().keytoolPath(), const CommandLine cmd(AndroidConfigurations::currentConfig().keytoolPath(),
{"-list", "-keystore", keystorePath, "--storepass", keystorePasswd}); {"-list", "-keystore", keystorePath.toUserOutput(),
"--storepass", keystorePasswd});
QtcProcess proc; QtcProcess proc;
proc.setTimeoutS(10); proc.setTimeoutS(10);
proc.setCommand(cmd); proc.setCommand(cmd);
@@ -583,10 +585,13 @@ bool AndroidManager::checkKeystorePassword(const QString &keystorePath, const QS
return proc.result() == ProcessResult::FinishedWithSuccess; return proc.result() == ProcessResult::FinishedWithSuccess;
} }
bool AndroidManager::checkCertificatePassword(const QString &keystorePath, const QString &keystorePasswd, const QString &alias, const QString &certificatePasswd) bool AndroidManager::checkCertificatePassword(const FilePath &keystorePath,
const QString &keystorePasswd,
const QString &alias,
const QString &certificatePasswd)
{ {
// assumes that the keystore password is correct // assumes that the keystore password is correct
QStringList arguments = {"-certreq", "-keystore", keystorePath, QStringList arguments = {"-certreq", "-keystore", keystorePath.toUserOutput(),
"--storepass", keystorePasswd, "-alias", alias, "-keypass"}; "--storepass", keystorePasswd, "-alias", alias, "-keypass"};
if (certificatePasswd.isEmpty()) if (certificatePasswd.isEmpty())
arguments << keystorePasswd; arguments << keystorePasswd;
@@ -600,11 +605,11 @@ bool AndroidManager::checkCertificatePassword(const QString &keystorePath, const
return proc.result() == ProcessResult::FinishedWithSuccess; return proc.result() == ProcessResult::FinishedWithSuccess;
} }
bool AndroidManager::checkCertificateExists(const QString &keystorePath, bool AndroidManager::checkCertificateExists(const FilePath &keystorePath,
const QString &keystorePasswd, const QString &alias) const QString &keystorePasswd, const QString &alias)
{ {
// assumes that the keystore password is correct // assumes that the keystore password is correct
QStringList arguments = { "-list", "-keystore", keystorePath, QStringList arguments = { "-list", "-keystore", keystorePath.toUserOutput(),
"--storepass", keystorePasswd, "-alias", alias }; "--storepass", keystorePasswd, "-alias", alias };
QtcProcess proc; QtcProcess proc;

View File

@@ -87,11 +87,13 @@ public:
static void installQASIPackage(ProjectExplorer::Target *target, const Utils::FilePath &packagePath); static void installQASIPackage(ProjectExplorer::Target *target, const Utils::FilePath &packagePath);
static bool checkKeystorePassword(const QString &keystorePath, const QString &keystorePasswd); static bool checkKeystorePassword(const Utils::FilePath &keystorePath,
static bool checkCertificatePassword(const QString &keystorePath, const QString &keystorePasswd, const QString &keystorePasswd);
static bool checkCertificatePassword(const Utils::FilePath &keystorePath,
const QString &keystorePasswd,
const QString &alias, const QString &certificatePasswd); const QString &alias, const QString &certificatePasswd);
static bool checkCertificateExists(const QString &keystorePath, const QString &keystorePasswd, static bool checkCertificateExists(const Utils::FilePath &keystorePath,
const QString &alias); const QString &keystorePasswd, const QString &alias);
static bool updateGradleProperties(ProjectExplorer::Target *target, const QString &buildKey); static bool updateGradleProperties(ProjectExplorer::Target *target, const QString &buildKey);
static QProcess *runAdbCommandDetached(const QStringList &args, QString *err = nullptr, static QProcess *runAdbCommandDetached(const QStringList &args, QString *err = nullptr,