如何将 Android 项目升级到 Java 11

Posted

技术标签:

【中文标题】如何将 Android 项目升级到 Java 11【英文标题】:How to upgrade an Android project to Java 11 【发布时间】:2021-06-01 13:45:29 【问题描述】:

我正在使用最新的 android Studio Arctic Fox 2020.03.01 Canary 8 和 AGP 7,并且我想将我的项目转换为使用 Java 11。显然,正如 https://developer.android.com/studio/preview/features#use-java-11 所述,仅执行以下操作不起作用:

android 
    compileSdkVersion 30

    compileOptions 
      sourceCompatibility JavaVersion.VERSION_11
      targetCompatibility JavaVersion.VERSION_11
    

    // For Kotlin projects
    kotlinOptions 
      jvmTarget = "11"
    

我在构建时收到以下错误:

Execution failed for task ':app:compileDebugJavaWithJavac'.
> Could not resolve all files for configuration ':app:androidJdkImage'.
   > Failed to transform core-for-system-modules.jar to match attributes artifactType=_internal_android_jdk_image, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime.
      > Execution failed for JdkImageTransform: /Users/azfarsiddiqui/Library/Android/sdk/platforms/android-30/core-for-system-modules.jar.
         > jlink executable /Applications/Android Studio Preview.app/Contents/jre/jdk/Contents/Home/bin/jlink does not exist.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

为简单起见,我一直在此处的 Jetpack Compose 示例项目中尝试此操作:https://github.com/android/compose-samples/tree/main/JetNews

有什么想法吗?谢谢大家

【问题讨论】:

【参考方案1】:

来自 Android Studio Artic Fox 2020.3.1

首选项(设置) -> 构建、执行、部署 -> 构建工具 -> Gradle -> Gradle JDK -> 选择 JDK 11 或下载 JDK

Artic Fox 2020.3.1 之前的版本

我假设您安装了 Java 11 或更高版本。以下步骤:

文件 -> 项目结构 -> SDK 位置 -> 将 JDK 位置更改为 Java 11 jdk 文件夹

如果您使用的是 Mac OS,请尝试在以下位置搜索该文件夹:

/Library/Java/JavaVirtualMachines/jdk-11.0.9.jdk/Contents/Home

【讨论】:

最奇怪的事情发生在我身上,JDK 位置没有作为选项出现在 SDK 位置部分...我不知道是不是最新版本的北极狐出现了问题。 @nymeria 在北极狐金丝雀 14 中,此设置已移至 Settings | Build, Execution, Deployment | Build Tools | Gradle | Gradle JDK issuetracker.google.com/issues/186135735 啊谢谢@MatthieuEsnault!如果其他人最近升级到最新版本并且收到有关 Java 11 的错误,即使一切似乎都井然有序,也可以将此作为评论,运行 ./gradlew --stop 并重建它会工作。 确保您至少拥有 Android Studio Artic Fox 2020.3.1 PATCH 2【参考方案2】:

安装 OpenJDK 11。使用 brew 它看起来像这样:

brew tap AdoptOpenJDK/openjdk
brew install adoptopenjdk11

在 Android Studio 中: File -> Project Structure -> SDK Location,设置JDK位置

可以通过命令找到JDK位置

/usr/libexec/java_home -v 11

我是/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

【讨论】:

【参考方案3】:

我安装了 openjdk11,但 jlink 实际上并不存在。

重新安装openjdk11 修复了这个问题。

sudo apt autoremove openjdk-11-jdk-headless sudo apt install openjdk-11-jdk-headless

【讨论】:

【参考方案4】:

如果您想移除“Target JRE version does not match project SDK”警告,您需要更改$PROJECT_DIR$/.idea/misc.xml中的ProjectRootManager设置。

来自

<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">

<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK" />

【讨论】:

【参考方案5】:

只需下载 Android Studio Bumblebee (2021.1.1) Canary 5 https://developer.android.google.cn/studio/archive?hl=id

【讨论】:

【参考方案6】:

确保您使用的是 Android Gradle Plugin 7.0.0-alpha08Gradle 版本 6.8.3 在项目结构 Java 11 中对我来说工作正常

先更新 IDE

【讨论】:

【参考方案7】:

文件 -> 项目结构 -> SDK 位置 -> Gradle 设置 -> Gradle JDK

【讨论】:

以上是关于如何将 Android 项目升级到 Java 11的主要内容,如果未能解决你的问题,请参考以下文章

从 JRE 7 或 8 升级到 JRE11 后,Java Swing JFrame 大小不同。如何使帧大小保持一致?

内存不足错误:Android Studio 上的 Java 堆内存

如何在 Oracle 11g 11.2.0.1 中升级 java 版本 [关闭]

从Java 8升级到Java 11的注意事项

从Java 8升级到Java 11的注意事项

将 Maven 插件升级到 Java 11