Linux - 默认 java 版本为 8,Flutter 设置为 11

Linux - default java version is 8, set 11 for Flutter

在我的开发机器上:

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /home/michal/Android/Sdk
    • Platform android-31, build-tools 30.0.2
    • ANDROID_HOME = /home/michal/Android/Sdk
    • Java binary at: /home/michal/android/studio/jre/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    • All Android licenses accepted.

但是全局java版本是Java8:

java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-1-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)

它是由 Android Studio 以某种方式设置的。但是,在我的构建服务器上,Flutter 使用默认的 1.8 java 版本:

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at /home/jenkins/Android/Sdk
    • Platform android-31, build-tools 30.0.2
    • ANDROID_HOME = /home/jenkins/Android/Sdk
    • Java binary at: /usr/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2-b11)
    • All Android licenses accepted.

因此,针对 Android 12 的应用无法编译。

如何将 Java 版本设置为 11(在我的开发机器上已设置)仅适用于 Flutter?系统,默认java版本无法更改我无法更改JAVA_HOME变量或更改默认java版本,需要Java 8.

我无法在构建服务器上安装 Android Studio,我需要弄清楚配置的实际存储位置。

我想我需要设置 java 二进制路径而不更改 JAVA_HOME 环境变量。在哪里设置?

I can't change JAVA_HOME variable.

您可以在本地更改它。例如,在命令提示符下您可以这样做:

 $ export JAVA_HOME=/new/setting
 $ flutter ...

有了这个,您可以在 shell 初始化脚本(例如“~/.bashrc”)中定义一个 shell 别名或 shell 函数。

或者,您可以编写一个包装器脚本来做同样的事情;例如

 #!/bin/sh
 export JAVA_HOME=/new/setting
 flutter "$@"

和运行而不是颤振。

以此类推

这更像是一种变通方法,但在我的情况下有效:

  • 将我的 Android Studio 文件夹内容复制到开发机(我在 Linux,所以版本相同)

  • 告诉 Flutter 我的 Android Studio 安装文件夹在哪里:

    flutter config --android-studio-dir="path"

现在 Flutter 使用 Android Studio 附带的 Java,目前是 Java 11。但是我最初的问题是是否可以告诉 Flutter 哪个 Java 版本应该被使用(不使用环境变量 - 全局或每个 flutter 命令调用)仍然保持打开状态