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 的环境变量。