forked from qt-creator/qt-creator
Android: Check for usable JDK version in settings
sdkmanager only works with version 8 of JDK specifically. We should warn the user if a different version is used. Task-number: QTBUG-79664 Change-Id: I5be8d068e4ec119453654adda1a684dc65b4c631 Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
This commit is contained in:
@@ -38,11 +38,13 @@
|
|||||||
|
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
#include <utils/environment.h>
|
#include <utils/environment.h>
|
||||||
|
#include <utils/fileutils.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
#include <utils/infolabel.h>
|
#include <utils/infolabel.h>
|
||||||
#include <utils/pathchooser.h>
|
#include <utils/pathchooser.h>
|
||||||
#include <utils/qtcprocess.h>
|
#include <utils/qtcprocess.h>
|
||||||
#include <utils/runextensions.h>
|
#include <utils/runextensions.h>
|
||||||
|
#include <utils/synchronousprocess.h>
|
||||||
#include <utils/utilsicons.h>
|
#include <utils/utilsicons.h>
|
||||||
#include <projectexplorer/toolchainmanager.h>
|
#include <projectexplorer/toolchainmanager.h>
|
||||||
#include <projectexplorer/kitmanager.h>
|
#include <projectexplorer/kitmanager.h>
|
||||||
@@ -155,7 +157,8 @@ private:
|
|||||||
|
|
||||||
enum JavaValidation {
|
enum JavaValidation {
|
||||||
JavaPathExistsRow,
|
JavaPathExistsRow,
|
||||||
JavaJdkValidRow
|
JavaJdkValidRow,
|
||||||
|
JavaJdkValidVersionRow
|
||||||
};
|
};
|
||||||
|
|
||||||
enum AndroidValidation {
|
enum AndroidValidation {
|
||||||
@@ -429,6 +432,7 @@ AndroidSettingsWidget::AndroidSettingsWidget()
|
|||||||
QMap<int, QString> javaValidationPoints;
|
QMap<int, QString> javaValidationPoints;
|
||||||
javaValidationPoints[JavaPathExistsRow] = tr("JDK path exists.");
|
javaValidationPoints[JavaPathExistsRow] = tr("JDK path exists.");
|
||||||
javaValidationPoints[JavaJdkValidRow] = tr("JDK path is a valid JDK root folder.");
|
javaValidationPoints[JavaJdkValidRow] = tr("JDK path is a valid JDK root folder.");
|
||||||
|
javaValidationPoints[JavaJdkValidVersionRow] = tr("Working JDK version (8) detected.");
|
||||||
auto javaSummary = new SummaryWidget(javaValidationPoints, tr("Java Settings are OK."),
|
auto javaSummary = new SummaryWidget(javaValidationPoints, tr("Java Settings are OK."),
|
||||||
tr("Java settings have errors."), m_ui->javaDetailsWidget);
|
tr("Java settings have errors."), m_ui->javaDetailsWidget);
|
||||||
m_ui->javaDetailsWidget->setWidget(javaSummary);
|
m_ui->javaDetailsWidget->setWidget(javaSummary);
|
||||||
@@ -625,6 +629,25 @@ void AndroidSettingsWidget::validateJdk()
|
|||||||
|
|
||||||
const Utils::FilePath bin = m_androidConfig.openJDKLocation().pathAppended("bin/javac" QTC_HOST_EXE_SUFFIX);
|
const Utils::FilePath bin = m_androidConfig.openJDKLocation().pathAppended("bin/javac" QTC_HOST_EXE_SUFFIX);
|
||||||
summaryWidget->setPointValid(JavaJdkValidRow, jdkPathExists && bin.exists());
|
summaryWidget->setPointValid(JavaJdkValidRow, jdkPathExists && bin.exists());
|
||||||
|
|
||||||
|
bool jdkVersionCorrect = false;
|
||||||
|
Utils::SynchronousProcess javacProcess;
|
||||||
|
const int timeoutS = 5;
|
||||||
|
javacProcess.setTimeoutS(timeoutS);
|
||||||
|
const Utils::CommandLine cmd(bin, {"-version"});
|
||||||
|
Utils::SynchronousProcessResponse response = javacProcess.runBlocking(cmd);
|
||||||
|
if (response.result == Utils::SynchronousProcessResponse::Finished) {
|
||||||
|
QString output = response.stdOut(); // JDK 14 uses stdOut for this output.
|
||||||
|
if (output.isEmpty())
|
||||||
|
output = response.stdErr(); // JDK 8 uses stdErr for this output.
|
||||||
|
if (output.startsWith("javac ")) {
|
||||||
|
const QVersionNumber javacVersion = QVersionNumber::fromString(output.mid(6));
|
||||||
|
if (QVersionNumber(1, 8).isPrefixOf(javacVersion))
|
||||||
|
jdkVersionCorrect = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
summaryWidget->setPointValid(JavaJdkValidVersionRow, jdkVersionCorrect);
|
||||||
|
|
||||||
updateUI();
|
updateUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user