如何将Android Studio默认的gradle JDK更改为11

19

当我点击运行时,会收到这个消息:

> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
     You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.

修改 Gradle JDK 的设置可以解决 “Android Gradle 插件需要 Java 11 运行,而您当前使用的是 Java 1.8” 的错误,但只能针对一个项目生效。每次创建新项目时,Android Studio 仍会自动使用默认的 1.8。

我已经安装了 JDK 11,但 AS 并不会自动使用它。 尝试过的方法:将 JAVA_HOME 环境变量更改为 JDK 11 的位置,但仍然收到相同的错误信息。

无效缓存 / 多次重启也没有任何作用。

如何设置一次并将其应用于所有未来的新项目?

enter image description here

附上 app/build.gradle 文件。

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdk 31

    defaultConfig {
        applicationId "com.example.grid"
        minSdk 22
        targetSdk 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    implementation 'com.github.bumptech.glide:glide:4.12.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
}

最高级别的 build.gradle 文件

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.3"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

你能展示一下你的 build.gradle 文件吗? - Nullish Byte
@SyedAffanHamdani 当然,已添加Gradle文件。 - BabyishTank
jvmTarget = '1.8' }``` 是问题所在。将其更改为: ```kotlinOptions { jvmTarget = '11' }``` 应该可以解决它。 - Nullish Byte
@KlemensZleptnig 很遗憾,不行。 - BabyishTank
1
我曾经安装了两个Android Studio。一个是Android Studio Arctic Fox,另一个是Android Studio 4.1。我猜这是因为我有两个版本的Gradle JDK。我删除了Android Studio 4.1,问题就解决了。我猜当你安装新版本的Android Studio时,它会在Application/Android Studio 2下安装Gradle JDK。也许... Android Studio中的下拉菜单按字母顺序列出所有可用的JDK。我不知道,这只是我的一个猜想。 - Rohit Singh
显示剩余2条评论
8个回答

6

安装了多个Android Studio?

简短回答:

只需删除其他版本即可解决问题。

详细说明:

我安装了Android 4.2Android Arctic Fox两个版本的Android Studio,每个版本的Gradle JDK版本都不同。

这是在Arctic Fox Gradle设置中看到的情况。(默认选项为1.8)

enter image description here

我的理论:

请注意Gradle JDK是安装在Applications/Android Studio/Content/下的。

我的推测是Gradle设置页面会列出所有已安装的Gradle JDK版本。但在设置页面中没有设置默认版本的选项。所以第一个Gradle版本成为默认版本。

我不知道它是按字母顺序排序还是基于下载时间戳排序。

但我认为它是基于时间戳排序的。最早安装的版本排在列表的顶部。

以下是支持观察。当我删除Android Studio 4.2并ctrl+z(撤消)时,列表顺序发生了变化。

enter image description here

免责声明:

请注意,我可能完全错误,因为我没有任何官方文档或链接支持这种说法。这只是一个理论。
我也知道这不是一个理想的解决方案。因为删除旧版本的Android Studio可能并不适用于每个人。


1
我有和你一样的版本,但是我没有安装另一个AS。所以最终我删除了位于JavaMachine文件夹中的JAVA 1.8,然后它就可以工作了。 - Dantalian

5

2023年更新

我试图从版本1.8升级到版本11。每次关闭并重新打开Studio时,它都会重置。我查阅了网上的解决方案,但没有一个有效。我找不到保存JDK信息的文件。在新版本中,该文件已经更改。

新的解决方案:

步骤1:打开Android Studio并保持打开状态。

步骤2: 前往以下位置:

C:\Users\{username}\AppData\Roaming\Google\AndroidStudio2022.1\options

或按下 Win + R 并输入以下内容:

%userprofile%\AppData\Roaming\Google\AndroidStudio2022.1\options

您的最新版本的Android Studio可能会有所不同。
第三步:从选项文件夹中删除jdk.table.xml文件。
第四步:在设置中将Gradle JDK更改为新的JDK,以便Studio可以将新路径保存到文件中。(重要提示:否则Studio将从内存中分配JDK)
第五步:重新启动Android Studio。
这样就可以解决问题了。新创建的jdk.table.xml将具有更新后的JDK值。

我建议将JDK设置为Android Studio附带的嵌入式JDK。这也为我解决了Gradle的另一个错误“配置项目':app'时出现问题。未安装NDK”。 - Greenmarty

5

可能看起来有点晚,但我只是安装了需要的Java JDK,顺便安装了JDK 17。这是在从浏览器下载并安装之后完成的。 然后你可以使用命令“java --version”在cmd上检查设备上的Java版本,然后重新启动计算机并打开Android Studio。然后在Android Studio的终端上检查gradlew --version命令的JVM,如果已更新,则一切就绪。


Gradle JDK 在 Android Bumblebee 中未显示。你的方法对我有效。 - shuster

2

在经过一番谷歌和SO搜索后,我终于找到了解决方法:

找到你当前AS版本的文件夹。在Mac上,路径为~/<username>/Library/Application Support/Google/AndroidStudio<version>

注意:我一直在版本4.1的文件夹里乱搞,直到意识到我需要2022.1版本,因为文本折行了,我的大脑一直看成了202 2.1而不是2022.1。

在该文件夹中有一个名为jdk.table.xml的选项文件。

我用文件编辑器打开它并经过一些尝试找到了解决方法。

我的XML文件中包含了所有的JDK。顶部是1.8,还有一些其他默认值的xml条目,如下所示:

<application>
  <component name="ProjectJdkTable">
    <jdk version="2">
      <name value="Kotlin SDK" />
      <type value="KotlinSDK" />
      <homePath value="$KOTLIN_BUNDLED$" />
      <roots>
        <annotationsPath>
          <root type="composite" />
        </annotationsPath>
        <classPath>
          <root type="composite" />
        </classPath>
        <javadocPath>
          <root type="composite" />
        </javadocPath>
        <sourcePath>
          <root type="composite" />
        </sourcePath>
      </roots>
      <additional />
    </jdk>
    <jdk version="2">
      <name value="Android API 31 Platform" />
      <type value="Android SDK" />
      <version value="AdoptOpenJDK (OpenJ9) version 11.0.11" />
      <homePath value="$USER_HOME$/Library/Android/sdk" />
      <roots>
        <annotationsPath>
          <root type="composite">
            <root url="jar://$USER_HOME$/Library/Android/sdk/platforms/android-31/data/annotations.zip!/" type="simple" />
          </root>
        </annotationsPath>
        <classPath>
          <root type="composite">
            <root url="jar://$USER_HOME$/Library/Android/sdk/platforms/android-31/android.jar!/" type="simple" />
            <root url="file://$USER_HOME$/Library/Android/sdk/platforms/android-31/data/res" type="simple" />
          </root>
        </classPath>
        <javadocPath>
          <root type="composite" />
        </javadocPath>
        <sourcePath>
          <root type="composite">
            <root url="file://$USER_HOME$/Library/Android/sdk/sources/android-31" type="simple" />
          </root>
        </sourcePath>
      </roots>
      <additional jdk="1.8" sdk="android-31" />
    </jdk>
    <jdk version="2">
      <name value="1.8" />
      <type value="JavaSDK" />
      <version value="AdoptOpenJDK (HotSpot) version 1.8.0_292" />
      <homePath value="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home" />
      <roots>
    ......

我将Android 31平台的信息更改为我想要的内容,这里是Java 11。现在它看起来像这样:

<jdk version="2">
      <name value="Android API 31 Platform" />
      <type value="Android SDK" />
      <version value="AdoptOpenJDK (OpenJ9) version 11.0.11" />
      <homePath value="$USER_HOME$/Library/Android/sdk" />
      <roots>
        <annotationsPath>
          <root type="composite">
            <root url="jar://$USER_HOME$/Library/Android/sdk/platforms/android-31/data/annotations.zip!/" type="simple" />
          </root>
        </annotationsPath>
        <classPath>
          <root type="composite">
            <root url="jar://$USER_HOME$/Library/Android/sdk/platforms/android-31/android.jar!/" type="simple" />
            <root url="file://$USER_HOME$/Library/Android/sdk/platforms/android-31/data/res" type="simple" />
          </root>
        </classPath>
        <javadocPath>
          <root type="composite" />
        </javadocPath>
        <sourcePath>
          <root type="composite">
            <root url="file://$USER_HOME$/Library/Android/sdk/sources/android-31" type="simple" />
          </root>
        </sourcePath>
      </roots>
      <additional jdk="11.0.11" sdk="android-31" />
    </jdk>

请确保更改version标签以及底部的additional标签,以匹配您选择的JDK版本。
接着,我剪切了1.8 JDK标签,并将其移动到底部,以防需要它的情况。
对于默认为8的文件中的所有条目,我重复了这个过程,我认为有四个——分别是android 29、30、31和32。
然后我重新启动了AS并创建了一个新项目,它可以正常工作。
我还没有遇到构建或运行问题。

这是最好的回答。它可以稍微简化:只需编辑“additional”元素,什么都不用改动。(至少对我来说效果很好。) - Greg Price
有一个值得一提的通用建议:在进行这些编辑之前,最好将整个“Google/AndroidStudioVERSION”目录复制到其他地方。你可能不需要它;但如果出现问题,你真的希望能够准确地看到你所做的更改(尝试使用“git diff --no-index OLDCOPY NEWCOPY”),并/或者恢复旧版本。而且它只有2MB大小,所以非常便宜的保险。 - Greg Price

1

在Windows上适用的方法如下:

进入C:\Users<用户名>.jdks (确保您可以查看隐藏文件)

然后删除corretto-1.8.0_352文件夹,这是默认的gradle JDK设置,它会导致错误。打开Android Studio并创建一个新项目,这很好运行,因为安卓工作室必须选择另一个JDK作为默认值,由于1.8已经被删除了,因此Gradle JDK的下拉列表中再也没有路径。对我来说,新的默认gradle jdk现在是jbr-17。

请注意Android Studio中的路径:Android Studio -> 设置 -> 构建、执行、部署 -> Gradle -> Gradle JDK

android studio Gradle JDK窗口截图


这应该可以从IDE中实现,您应该能够在不必干扰文件系统的情况下删除和添加JDK。或者是否存在已知的错误强制执行此操作? - Martin
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0

我遇到了同样的问题,现在已经解决了。

我通过删除C:\Users\<UserName>\AppData\Local\Google\AndroidStudio<Version>C:\Users\<UserName>\AppData\Roaming\Google\AndroidStudio<Version>来重置我的Android Studio(最好在关闭Android Studio之前),然后重新启动Android Studio。你会看到Gradle SDK默认设置为android studio default sdk

正如你所看到的,这个解决方案会删除你的Android Studio配置。如果你在Android Studio中有重要的配置,你应该备份配置以便恢复。


提供了错误的答案。 - Harpreet Singh
但它确实可以在我的计算机上运行 - Ting

-2
你尝试过吗:app模块的build.gradle文件。
android {
    // ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
    kotlinOptions {
        jvmTarget = '11'
    }
}

同时尝试选择提供的默认 Android Studio SDK 在此输入图片描述


2
感谢你的帮助。因为使用VERSION_11,这给我带来了问题https://dev59.com/3b7pa4cB1Zd3GeqP7dyO,所以我才使用VERSION_1.8。 不过,这对于这个项目来说很有效。但是当我创建一个新项目时,那个项目仍然再次使用1.8。 有什么线索吗? - BabyishTank

-3

通过SDK管理器删除您安装的任何旧版SDK平台

Make sure to click on the show package details.

重新启动Android Studio,创建一个新项目。大功告成!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接