summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/android/androidconfigurations.cpp66
-rw-r--r--src/plugins/android/androidconstants.h1
-rw-r--r--src/plugins/android/androidsettingswidget.cpp3
-rw-r--r--src/plugins/android/androidtoolchain.cpp2
4 files changed, 29 insertions, 43 deletions
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 642cef0b08..8a569ab201 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -108,9 +108,6 @@ const char macOsKey[] = "mac";
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 SDKLocationKey("SDKLocation");
const QLatin1String CustomNdkLocationsKey("CustomNdkLocations");
@@ -1482,7 +1479,7 @@ Environment AndroidConfigurations::toolsEnvironment(const AndroidConfig &config)
Environment env = Environment::systemEnvironment();
FilePath jdkLocation = config.openJDKLocation();
if (!jdkLocation.isEmpty()) {
- env.set("JAVA_HOME", jdkLocation.toUserOutput());
+ env.set(Constants::JAVA_HOME_ENV_VAR, jdkLocation.toUserOutput());
env.prependOrSetPath(jdkLocation.pathAppended("bin"));
}
return env;
@@ -1539,51 +1536,40 @@ static FilePath androidStudioPath()
FilePath AndroidConfig::getJdkPath()
{
- FilePath jdkHome;
+ FilePath jdkHome = FilePath::fromString(qEnvironmentVariable(Constants::JAVA_HOME_ENV_VAR));
+ if (jdkHome.exists())
+ return jdkHome;
if (HostOsInfo::isWindowsHost()) {
- QStringList allVersions;
- 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();
+ // Look for Android Studio's jdk first
+ const FilePath androidStudioSdkPath = androidStudioPath();
+ if (!androidStudioSdkPath.isEmpty()) {
+ const FilePath androidStudioSdkJrePath = androidStudioSdkPath / "jre";
+ if (androidStudioSdkJrePath.exists())
+ jdkHome = androidStudioSdkJrePath;
}
-#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();
+ 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.reset(new QSettings(jdkLatestSettingsPath, QSettings::Registry64Format));
- allVersions = settings->childGroups();
+ settings.setDefaultFormat(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();
- if (!androidStudioSdkPath.isEmpty()) {
- const FilePath androidStudioSdkJrePath = androidStudioSdkPath / "jre";
- if (androidStudioSdkJrePath.exists())
- jdkHome = androidStudioSdkJrePath;
+ // 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 {
diff --git a/src/plugins/android/androidconstants.h b/src/plugins/android/androidconstants.h
index 83012d8073..e9bb03b781 100644
--- a/src/plugins/android/androidconstants.h
+++ b/src/plugins/android/androidconstants.h
@@ -72,6 +72,7 @@ const char ANDROID_ABIS[] = "ANDROID_ABIS";
const char ANDROID_APPLICATION_ARGUMENTS[] = "ANDROID_APPLICATION_ARGUMENTS";
const char ANDROID_DEPLOYMENT_SETTINGS_FILE[] = "ANDROID_DEPLOYMENT_SETTINGS_FILE";
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_BUILD_APK_ID[] = "QmakeProjectManager.AndroidBuildApkStep";
diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp
index 2b0a5864f8..660c111331 100644
--- a/src/plugins/android/androidsettingswidget.cpp
+++ b/src/plugins/android/androidsettingswidget.cpp
@@ -301,9 +301,8 @@ AndroidSettingsWidget::AndroidSettingsWidget()
tr("Android SDK path exists and is writable.");
androidValidationPoints[JavaPathExistsAndWritableRow] = tr("JDK path exists and is writable.");
androidValidationPoints[SdkToolsInstalledRow] = tr("SDK tools installed.");
+ androidValidationPoints[SdkManagerSuccessfulRow] = tr("SDK manager runs.");
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(
"All essential packages installed for all installed Qt versions.");
androidValidationPoints[BuildToolsInstalledRow] = tr("Build tools installed.");
diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp
index de527cf1f7..1835273223 100644
--- a/src/plugins/android/androidtoolchain.cpp
+++ b/src/plugins/android/androidtoolchain.cpp
@@ -120,7 +120,7 @@ void AndroidToolChain::addToEnvironment(Environment &env) const
env.set(QLatin1String("ANDROID_NDK_HOST"), config.toolchainHostFromNdk(m_ndkLocation));
const Utils::FilePath javaHome = config.openJDKLocation();
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 currentJavaFilePath = env.searchInPath("java");
if (!currentJavaFilePath.isChildOf(javaBin))