forked from qt-creator/qt-creator
Android: Look for latest JDK version and not 1.8 specifically
Recent SDK Manager that is used by Qt Creator works with JDK 11+, and JDK 11 is needed by Qt 5.15.7+, so look for the newest JDK instead of 1.8 as currently being done. Change-Id: I6ff415aa300d742735e8636b24a03116d5bfe2b6 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -108,9 +108,6 @@ const char macOsKey[] = "mac";
|
|||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
const char jdk8SettingsPath[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit";
|
|
||||||
const char jdkLatestSettingsPath[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\JDK\\";
|
|
||||||
|
|
||||||
const QLatin1String SettingsGroup("AndroidConfigurations");
|
const QLatin1String SettingsGroup("AndroidConfigurations");
|
||||||
const QLatin1String SDKLocationKey("SDKLocation");
|
const QLatin1String SDKLocationKey("SDKLocation");
|
||||||
const QLatin1String CustomNdkLocationsKey("CustomNdkLocations");
|
const QLatin1String CustomNdkLocationsKey("CustomNdkLocations");
|
||||||
@@ -1482,7 +1479,7 @@ Environment AndroidConfigurations::toolsEnvironment(const AndroidConfig &config)
|
|||||||
Environment env = Environment::systemEnvironment();
|
Environment env = Environment::systemEnvironment();
|
||||||
FilePath jdkLocation = config.openJDKLocation();
|
FilePath jdkLocation = config.openJDKLocation();
|
||||||
if (!jdkLocation.isEmpty()) {
|
if (!jdkLocation.isEmpty()) {
|
||||||
env.set("JAVA_HOME", jdkLocation.toUserOutput());
|
env.set(Constants::JAVA_HOME_ENV_VAR, jdkLocation.toUserOutput());
|
||||||
env.prependOrSetPath(jdkLocation.pathAppended("bin"));
|
env.prependOrSetPath(jdkLocation.pathAppended("bin"));
|
||||||
}
|
}
|
||||||
return env;
|
return env;
|
||||||
@@ -1539,52 +1536,41 @@ static FilePath androidStudioPath()
|
|||||||
|
|
||||||
FilePath AndroidConfig::getJdkPath()
|
FilePath AndroidConfig::getJdkPath()
|
||||||
{
|
{
|
||||||
FilePath jdkHome;
|
FilePath jdkHome = FilePath::fromString(qEnvironmentVariable(Constants::JAVA_HOME_ENV_VAR));
|
||||||
|
if (jdkHome.exists())
|
||||||
|
return jdkHome;
|
||||||
|
|
||||||
if (HostOsInfo::isWindowsHost()) {
|
if (HostOsInfo::isWindowsHost()) {
|
||||||
QStringList allVersions;
|
// Look for Android Studio's jdk first
|
||||||
std::unique_ptr<QSettings> settings(
|
|
||||||
new QSettings(jdk8SettingsPath, QSettings::NativeFormat));
|
|
||||||
allVersions = settings->childGroups();
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
if (allVersions.isEmpty()) {
|
|
||||||
settings.reset(new QSettings(jdk8SettingsPath, QSettings::Registry64Format));
|
|
||||||
allVersions = settings->childGroups();
|
|
||||||
}
|
|
||||||
#endif // Q_OS_WIN
|
|
||||||
|
|
||||||
// If no jdk 1.8 can be found, look for jdk versions above 1.8
|
|
||||||
// Android section would warn if sdkmanager cannot run with newer jdk versions
|
|
||||||
if (allVersions.isEmpty()) {
|
|
||||||
settings.reset(new QSettings(jdkLatestSettingsPath, QSettings::NativeFormat));
|
|
||||||
allVersions = settings->childGroups();
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
if (allVersions.isEmpty()) {
|
|
||||||
settings.reset(new QSettings(jdkLatestSettingsPath, QSettings::Registry64Format));
|
|
||||||
allVersions = settings->childGroups();
|
|
||||||
}
|
|
||||||
#endif // Q_OS_WIN
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const QString &version : qAsConst(allVersions)) {
|
|
||||||
settings->beginGroup(version);
|
|
||||||
jdkHome = FilePath::fromUserInput(settings->value("JavaHome").toString());
|
|
||||||
settings->endGroup();
|
|
||||||
if (version.startsWith("1.8")) {
|
|
||||||
if (!jdkHome.exists())
|
|
||||||
continue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Nothing found yet? Let's try finding Android Studio's jdk
|
|
||||||
if (jdkHome.isEmpty()) {
|
|
||||||
const FilePath androidStudioSdkPath = androidStudioPath();
|
const FilePath androidStudioSdkPath = androidStudioPath();
|
||||||
if (!androidStudioSdkPath.isEmpty()) {
|
if (!androidStudioSdkPath.isEmpty()) {
|
||||||
const FilePath androidStudioSdkJrePath = androidStudioSdkPath / "jre";
|
const FilePath androidStudioSdkJrePath = androidStudioSdkPath / "jre";
|
||||||
if (androidStudioSdkJrePath.exists())
|
if (androidStudioSdkJrePath.exists())
|
||||||
jdkHome = androidStudioSdkJrePath;
|
jdkHome = androidStudioSdkJrePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (jdkHome.isEmpty()) {
|
||||||
|
QStringList allVersions;
|
||||||
|
QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\JDK\\",
|
||||||
|
QSettings::NativeFormat);
|
||||||
|
allVersions = settings.childGroups();
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
if (allVersions.isEmpty()) {
|
||||||
|
settings.setDefaultFormat(QSettings::Registry64Format);
|
||||||
|
allVersions = settings.childGroups();
|
||||||
|
}
|
||||||
|
#endif // Q_OS_WIN
|
||||||
|
|
||||||
|
// Look for the highest existing JDK
|
||||||
|
allVersions.sort();
|
||||||
|
std::reverse(allVersions.begin(), allVersions.end()); // Order descending
|
||||||
|
for (const QString &version : qAsConst(allVersions)) {
|
||||||
|
settings.beginGroup(version);
|
||||||
|
jdkHome = FilePath::fromUserInput(settings.value("JavaHome").toString());
|
||||||
|
settings.endGroup();
|
||||||
|
if (jdkHome.exists())
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
QStringList args;
|
QStringList args;
|
||||||
|
@@ -72,6 +72,7 @@ const char ANDROID_ABIS[] = "ANDROID_ABIS";
|
|||||||
const char ANDROID_APPLICATION_ARGUMENTS[] = "ANDROID_APPLICATION_ARGUMENTS";
|
const char ANDROID_APPLICATION_ARGUMENTS[] = "ANDROID_APPLICATION_ARGUMENTS";
|
||||||
const char ANDROID_DEPLOYMENT_SETTINGS_FILE[] = "ANDROID_DEPLOYMENT_SETTINGS_FILE";
|
const char ANDROID_DEPLOYMENT_SETTINGS_FILE[] = "ANDROID_DEPLOYMENT_SETTINGS_FILE";
|
||||||
const char ANDROID_SO_LIBS_PATHS[] = "ANDROID_SO_LIBS_PATHS";
|
const char ANDROID_SO_LIBS_PATHS[] = "ANDROID_SO_LIBS_PATHS";
|
||||||
|
const char JAVA_HOME_ENV_VAR[] = "JAVA_HOME";
|
||||||
|
|
||||||
const char ANDROID_PACKAGE_INSTALL_STEP_ID[] = "Qt4ProjectManager.AndroidPackageInstallationStep";
|
const char ANDROID_PACKAGE_INSTALL_STEP_ID[] = "Qt4ProjectManager.AndroidPackageInstallationStep";
|
||||||
const char ANDROID_BUILD_APK_ID[] = "QmakeProjectManager.AndroidBuildApkStep";
|
const char ANDROID_BUILD_APK_ID[] = "QmakeProjectManager.AndroidBuildApkStep";
|
||||||
|
@@ -301,9 +301,8 @@ AndroidSettingsWidget::AndroidSettingsWidget()
|
|||||||
tr("Android SDK path exists and is writable.");
|
tr("Android SDK path exists and is writable.");
|
||||||
androidValidationPoints[JavaPathExistsAndWritableRow] = tr("JDK path exists and is writable.");
|
androidValidationPoints[JavaPathExistsAndWritableRow] = tr("JDK path exists and is writable.");
|
||||||
androidValidationPoints[SdkToolsInstalledRow] = tr("SDK tools installed.");
|
androidValidationPoints[SdkToolsInstalledRow] = tr("SDK tools installed.");
|
||||||
|
androidValidationPoints[SdkManagerSuccessfulRow] = tr("SDK manager runs.");
|
||||||
androidValidationPoints[PlatformToolsInstalledRow] = tr("Platform tools installed.");
|
androidValidationPoints[PlatformToolsInstalledRow] = tr("Platform tools installed.");
|
||||||
androidValidationPoints[SdkManagerSuccessfulRow] = tr(
|
|
||||||
"SDK manager runs (SDK Tools versions <= 26.x require exactly Java 1.8).");
|
|
||||||
androidValidationPoints[AllEssentialsInstalledRow] = tr(
|
androidValidationPoints[AllEssentialsInstalledRow] = tr(
|
||||||
"All essential packages installed for all installed Qt versions.");
|
"All essential packages installed for all installed Qt versions.");
|
||||||
androidValidationPoints[BuildToolsInstalledRow] = tr("Build tools installed.");
|
androidValidationPoints[BuildToolsInstalledRow] = tr("Build tools installed.");
|
||||||
|
@@ -120,7 +120,7 @@ void AndroidToolChain::addToEnvironment(Environment &env) const
|
|||||||
env.set(QLatin1String("ANDROID_NDK_HOST"), config.toolchainHostFromNdk(m_ndkLocation));
|
env.set(QLatin1String("ANDROID_NDK_HOST"), config.toolchainHostFromNdk(m_ndkLocation));
|
||||||
const Utils::FilePath javaHome = config.openJDKLocation();
|
const Utils::FilePath javaHome = config.openJDKLocation();
|
||||||
if (javaHome.exists()) {
|
if (javaHome.exists()) {
|
||||||
env.set(QLatin1String("JAVA_HOME"), javaHome.toUserOutput());
|
env.set(Constants::JAVA_HOME_ENV_VAR, javaHome.toUserOutput());
|
||||||
const FilePath javaBin = javaHome.pathAppended("bin");
|
const FilePath javaBin = javaHome.pathAppended("bin");
|
||||||
const FilePath currentJavaFilePath = env.searchInPath("java");
|
const FilePath currentJavaFilePath = env.searchInPath("java");
|
||||||
if (!currentJavaFilePath.isChildOf(javaBin))
|
if (!currentJavaFilePath.isChildOf(javaBin))
|
||||||
|
Reference in New Issue
Block a user