Android Studio 中缺少适用于 Flutter 的捆绑 JRE

2023-12-11

在 M1 MacBook Air 上的 MacOS Ventura 13.2 上设置 Flutter。我已经安装了所有东西[✓]除了 flutter doctor 无法在 Android Studio 中找到捆绑的 jre 之外。我在这个网站上发现了一些其他问题,但没有任何帮助。

alan@Alans-MacBook-Air ~ % flutter doctor   
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.7.0, on macOS 13.2 22D49 darwin-arm64 (Rosetta), locale en-GB)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
[✓] Chrome - develop for the web
[!] Android Studio (version 2022.1)
    ✗ Unable to find bundled Java version.
[✓] VS Code (version 1.74.3)
[✓] Connected device (2 available)
[✓] HTTP Host Availability

以下是 Android Studio 部分的完整输出:

[!] Android Studio (version 2022.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      ???? https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      ???? https://plugins.jetbrains.com/plugin/6351-dart
    ✗ Unable to find bundled Java version.
    • Try updating or re-installing Android Studio.

我安装了java:

alan@Alans-MacBook-Air ~ % java -version 
java version "19.0.2" 2023-01-17
Java(TM) SE Runtime Environment (build 19.0.2+7-44)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.2+7-44, mixed mode, sharing)
alan@Alans-MacBook-Air ~ % /usr/libexec/java_home 
/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home

我的环境设置也正确,我认为:

alan@Alans-MacBook-Air ~ % echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home

其他一些问题建议使用 Android Studio 安装中 jre 文件夹中的符号链接,但我有nojre文件夹在那里。但是有一个 jbr 文件夹,其中似乎包含 OpenJDK 版本。但我不知道如何让 flutter 看到/使用它。

alan@Alans-MacBook-Air ~ % /Applications/Android\ Studio.app/Contents/jbr/Contents/Home/bin/java -version
openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
OpenJDK 64-Bit Server VM (build 11.0.15+0-b2043.56-8887301, mixed mode)

按照文档中的要求安装了所有组件。我想我已经正确设置了环境和其他部分。


UPDATE 2

虽然更新 1 中的建议可行,但这不是实时解释的“脚本”,而是flutter二进制文件(如果我没记错的话),所以为了让它工作,必须编译flutter再次二进制,我现在不知道如何做到这一点(因为我从未使用过超出基础知识的颤振),而且我当然无法在我的“工作机器”上做到这一点,因为公司的眼睛禁止一切有趣的事情。

换句话说,使用您发现的符号链接技巧在这个 GitHub 问题中直到 Flutter 团队发布更新flutter在较新版本的 Android Studio 中搜索正确的 java 路径。

Jetbrains,请停止每隔一年重命名 java 位置......

UPDATE 1

在flutter sdk中,有一个文件名为:android_studio.dart。 (嗯,有各种与 android 相关的文件,没有与“java”相关的文件,因为 Flutter 似乎将 Java 视为“android 的东西”(根据所有 java 引用和验证或检查都是在android_ files).

该文件位于path/to/flutter/packages/flutter_tools/lib/src/android/android_studio.dart.

里面包含这个来计算java的路径:

    final String javaPath = globals.platform.isMacOS ?
        version != null && version.major < 2020 ?
        globals.fs.path.join(directory, 'jre', 'jdk', 'Contents', 'Home') :
        globals.fs.path.join(directory, 'jre', 'Contents', 'Home') :
        globals.fs.path.join(directory, 'jre');

本质上,如果您添加另一个条目,如下所示:

        globals.fs.path.join(directory, 'jbr', 'Contents', 'Home') :

所以它最终看起来像:

    final String javaPath = globals.platform.isMacOS ?
        version != null && version.major < 2020 ?
        globals.fs.path.join(directory, 'jre', 'jdk', 'Contents', 'Home') :
        globals.fs.path.join(directory, 'jre', 'Contents', 'Home') :
        globals.fs.path.join(directory, 'jbr', 'Contents', 'Home') :
        globals.fs.path.join(directory, 'jre');

然后你就可以运行flutter doctor它可能会起作用。

我还删除了&& version.major < 2020部分,只是为了确保它始终运行。现在我明白了:

[!] Android Studio (version 2022.1)
    ✗ Unable to find bundled Java version.
[✓] Android Studio (version 2021.3)

所以...两个不同的 Android Studio 版本,最新的(带有jbr代替jre似乎工作正常。


在 Android Studio Electric Eel 中,捆绑的 Java 是moved to /Applications/Android Studio.app/Contents/jbr/Contents/Home所以你可以设置你的$JAVA_HOME直接指出这一点。

另外,如果你使用的是 macOS(看起来就是这样),请记住 macOS 使用(出于某些 Apple 原因)一个名为java_home设置JAVA安装。

您可以在以下位置找到此二进制文件/usr/libexec/java_home.

看起来flutter插件可能在假设它在“旧”下的情况下寻找Javajre而不是“新”jbr文件夹。我不知道这是否是硬编码的(因此需要“补丁”)或者它是否只是读取 JAVA_HOME 的环境变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio 中缺少适用于 Flutter 的捆绑 JRE 的相关文章

随机推荐