在更新了M1 Apple Silicon上的Android Studio Arctic Fox(2020.3.1)之后,flutter doctor无法找到捆绑的Java版本。

83

我遇到了一个奇怪的问题。在更新Android Studio之前,flutter doctor 一切正常。但是一旦我更新了Android Studio后,运行doctor时它会显示“无法找到捆绑的Java版本”。我已经下载了Java安装程序并在我的M1 Mac上安装了它,但是在重新启动后,运行flutter doctor仍然显示相同的错误。奇怪的是,当我卸载Arctic Fox版本并重新安装旧版本的Android Studio时,再次运行doctor时一切都正常。我该如何解决这个问题?


使用哪个 $JAVA_HOME 目录?您可能需要检查您的 Java 版本是否与稳定版 AS 2020.3.1 和 M1 兼容。 - mochadwi
这是针对该问题的答案,当您仍想使用Android Studio Arctic Fox版本时,请参考https://dev59.com/D1UK5IYBdhLWcg3wySfB#68575967 - Alexa289
这个回答解决了你的问题吗?在Flutter上找不到捆绑的Java版本 - eja
16个回答

2

在将Android Studio更新到2020.3.1 Patch 3(在MAC上)后,我遇到了相同的错误。

将Flutter从2.2.2升级到2.5.3后,问题得到解决。

我还安装了"Android SDK命令行工具"。安装方法可以在此处找到:https://dev59.com/P1EG5IYBdhLWcg3wT51R#68492909


1

也许最简单的选项(MAC):

  • 导航到:cd /Applications/Android\ Studio.app/Contents/jre
  • 创建目录:mkdir jdk
  • 创建软链接:ln -s Contents jdk/Contents

0
复制文件夹 /Applications/Android Studio Preview.app/Contents/jre/Contents 到 /Applications/Android Studio Preview.app/Contents/jre/jdk/Contents

这个解决方法可能违反了标准AS默认的JAVA_HOME目录,你已经在本地尝试过了吗? - mochadwi
1
你可以查看这个脚本代码,YOUR_PATH/flutter/packages/flutter_tools/lib/src/android/android_studio.dart,并找到类似于globals.fs.path.join(directory, 'jre', 'jdk', 'Contents', 'Home')的代码,然后你就可以知道应该为“doctor”设置什么路径了。 - crzorz

0

这是@crzorz的额外答案对我有用。 "YOUR_PATH/flutter/packages/flutter_tools/lib/src/android/android_studio.dart"。在文件底部,您将看到类似于“globals.fs.path.join(directory,'jre','jdk','Contents','Home')”的行,正如@crzorz所提到的。

这些行清楚地显示了在MacOS(旧版和新版)和其他操作系统上,“flutter doctor”如何找到所谓的捆绑Java。

我使用的是Android Studio Electric Eel。我解决问题的方法是“创建一个名为jre的符号链接,指向jbr”。因为文件夹jbr(JetBean Runtime)具有java.exe和其他Java运行时文件,但flutter doctor仍然尝试查找名为jre的文件夹。


这不是一个答案。你必须在评论中提出这样的事情! - Jakhongir Anasov

0

更新至:

Android Studio 2022.1 Electric eel + Java 19 + VS Code + Windows 10 x64

之前:请确保您的JAVA_PATH设置正确

1- 以管理员身份运行CMD [不要使用POWERSHELL,因为mklink只适用于CMD]

2- 运行命令mklink /d "C:\Program Files\Android\Android Studio\jre" "C:\Program Files\Android\Android Studio\jbr"

3- 运行命令flutter doctor,问题解决,但随后出现了许可证问题,所以

4- 运行命令flutter doctor --android-licenses,等待并接受所有许可证

其他方法无效,会抛出错误:“ bla bla bla...已存在...”为什么?

由于mklink命令的结构:mklink [选项:/d /j /h rd del] "路径+名称文件夹/文件,您想要{jre}" "路径+名称文件夹/文件,链接{jbr}"

翻译成人类语言:创建一个符号链接[mklink /d],将名称为jre的文件夹链接到名称为jbr的文件夹中。

请确保对文件路径使用“双引号”,并说“请”而不是“就这样做”(cmd会察觉到您的匆忙)。

如果您不按此方式操作,则可能会在使用sdkmanager和启动设备时遇到问题,因为新版Android Studio不使用jre,这就是为什么许多Android设备无法启动并出现60秒问题的原因。


0

将JDK的所有内容复制并粘贴到JRE文件中,对我来说起作用了。

之后,我更新了我的环境变量路径。


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