diff options
-rw-r--r-- | src/plugins/android/androidconfigurations.cpp | 66 | ||||
-rw-r--r-- | src/plugins/android/androidconstants.h | 1 | ||||
-rw-r--r-- | src/plugins/android/androidsettingswidget.cpp | 3 | ||||
-rw-r--r-- | src/plugins/android/androidtoolchain.cpp | 2 |
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)) |