在更新了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个回答

193

答案已经在这里发布了。

对于Mac用户:

使用下面的文章设置Java_Home路径,然后应用此命令

之后在终端中键入以下命令:

cd /Applications/Android\ Studio.app/Contents/jre

ln -s ../jre jdk

ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk

flutter doctor -v

4
似乎现在Flutter需要Java 11而不是Java 8,因为新的Android Studio Artic Fox更新。 - Kedar Sukerkar
我刚刚使用最新的Flutter和最新的Android Studio完成了这个过程。这里提供的解决方案消除了“无法找到Java版本”的错误,但是在尝试接受许可证时会出现一些XML解析器类的ClassNotFoundException。这是因为Android Studio现在附带Java 1,它不再具有很多JEE内容。所有这一切的简单解决方案是将您的JAVA_HOME环境变量设置为您可能拥有的任何Java 8安装程序,这样就可以解决所有问题。 - entzik
这对我有用 - 注意我必须先手动安装最新的JDK(我正在使用MacOS big sur),显然它没有自带安装程序。之后,这个完美地运行了。 - deadant88
在我的 Big Sur 上运行良好。但最好解释一下这个 ln -s 命令是做什么的? - Raphael Pinel
https://github.com/flutter/flutter/issues/118502 - rafahead
显示剩余2条评论

84

如果您正在使用 Android Studio Electric Eel | 2022.1.1。

在 Mac 上:

  1. 在 Finder 中打开“应用程序”,然后右键单击 Android Studio,选择“显示包内容”。
  2. 在其中打开“Contents”文件夹。在其中,您将看到名为“jbr”的文件夹。
  3. 只需复制“jbr”文件夹。然后,将复制的文件夹重命名为“jre”。
  4. 之后运行flutter doctor命令,“无法找到捆绑的Java版本”警告将消失。

感谢@Javi提供的替代方法。 对于步骤2和3,ln -s jbr jre也可以完成任务。我认为这是最好的方法。


6
你,我的朋友,是个天才。我可以确认,在使用 Android Studio 2022.1.1 在 Windows 11 上时,这也是我的解决方法。非常感谢您! - demo7up
1
嘿,你是怎么想出这个解决方案的?不管怎样,它对我也起作用了。 - Su Mit
2
这是我唯一可行的解决方案。 - Hammas Ali
5
虽然这个方法可以解决问题,但我更倾向于创建一个符号链接而不是复制文件夹。这样,如果 jbr 文件夹中的内容发生变化,你就不需要再次复制文件夹。在第二步中,只需键入 ln -s jbr jre,即可解决问题。 - Javi
1
回复:软链接解决方案。Mac OS上的终端应用程序默认没有完全磁盘访问权限,这意味着即使使用sudo也无法创建软链接。完全磁盘访问权限可以在“隐私与安全”下的系统设置中授予。 - Alex S
显示剩余2条评论

52

这里是我在M1上设置Android Studio所需完成的所有步骤的详细解释。

  1. 将Android Studio安装到Applications文件夹中。

  2. jre 文件夹创建符号链接到一个新的 jdk 文件夹。(由于此问题

cd /Applications/Android\ Studio.app/Contents/jre
ln -s ../jre jdk
  1. 设置JAVA_HOME环境变量
nano ~/.zshrc

export JAVA_HOME="/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home"

source ~/.zshrc
  1. 安装 Android SDK 命令行工具(需要接受许可证)

  2. 假设你已将 Flutter 添加到路径中,此时它应该可以正常工作了。

flutter doctor

“命令行工具”对于接受软件包非常重要。 - rookieDeveloper
我在非 M1 Mac 上遇到了类似的问题。上述解决方案解决了问题。看起来这与 M1 芯片无关。这个简单的 hack 解决了“找不到带有 Java 的文件束”问题。 - Abhishek Sachan
我的电脑上/Applications/Android Studio.app/Contents/jre/目录下没有jdk文件夹。我也是在M1芯片的Mac上。你有什么想法,我可能错过了什么吗? - Isuru
@Isuru,没错,这就是问题所在。写ln -s会创建一个软链接指向现有的jre目录,从而创建jdk目录。 - Suragch
这对我有效。 - Shift 'n Tab

22

这是Windows的解决方法,对我有效。 我正在使用Android Studio2022.1.1.19版本。

  1. 首先,右键单击Android Studio图标并打开文件目录(位置)。您的安装文件夹应位于“C:\ Program Files \ Android \ Android Studio”。
  2. 当你已经在Android Studio安装根文件夹时,你会看到两个文件夹:“jbr”和“jre”。
  3. 将“jbr”文件夹中的所有文件复制到“jre”文件夹中,然后再试一次。

注意:此解决方法在我的电脑上有效;如果在您的电脑上无效,请在下面留言。


为什么这对我有效呢?! - Sh eldeeb
@Sheldeeb,那就太好了! - Clinton Canarias
这对我没有起作用。 - MrMoxy
运作得非常顺利 - DL Studio
对我来说起作用了,我已经面对这个问题三天了。 - undefined
工作也是如此。使用Android Studio 2022.2并尝试运行一个Flutter 2.10项目(在此评论时,3.13是最新版本)。 - undefined

13

在我的情况下,使用搭载Intel处理器的macOS Ventura,在将Android Studio升级到Electric Eel后,我需要按照以下步骤才能使Flutter正常工作:

  1. cd /Applications/Android\ Studio.app/Contents/
  2. ln -s jbr jre
  3. flutter config --android-studio-dir /Applications/Android\ Studio.app/Contents

第3步非常重要,如果不执行该步骤,则 flutter doctor --android-licenses 始终会失败...


也许与问题标题所述的M1处理器不完全相关,但我仍然认为它可能对某些人有帮助。 - ldlgds
这个解决方案在我的 M2 Mac Mini 上运作良好。 - Andrey Sorokin

6

我安装了最新版的JAVA SDK、Flutter和Android Studio,并直接在终端中逐个运行以下命令以解决“无法找到捆绑的Java版本”问题。

  1. cd /Applications/Android\ Studio.app/Contents/jre

  2. ln -s ../jre jdk

  3. ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk

  4. flutter doctor -v

现在,你应该能够在终端中看到“flutter doctor”描述中的错误已经消失了。


5
适用于 macOS 这将把 jbr 文件夹链接到 jre
cd /Applications/Android Studio.app/Contents

or

cd /Applications/Android\ Studio.app/Contents

ln -s jbr jre

结果:

enter image description here


1
这些步骤对我有效。 - rNkL

4

本解决方案适用于M1 Mac用户

  1. 通过输入命令 /usr/libexec/java_home -V 查找本地Java版本。如果不存在,请在此处下载最新的ARM Java版本。
  2. 通过输入命令 /usr/libexec/java_home /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home 设置Java_Home路径(在我的情况下为 jdk-17.0.1.jdk)。
  3. 在终端中输入所有这些命令。
cd /Applications/Android\ Studio.app/Contents/jre
ln -s ../jre jdk
ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk
  1. 最后运行flutter doctor -v以查看所有详细更改

我在终端中输入了 zsh: permission denied: /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home,希望设置Java_Home路径,但它显示 permission denied /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home。我应该在其他地方输入吗?如何给它权限? - Sam
你可以使用sudo: sudo export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home或者chown sudo chown -R $(whoami) /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home这将使你拥有该目录的所有权,因此你不必每次访问它时都使用sudo。 - Alphapico

4
运行Flutter Doctor命令,如果出现错误指示找不到Java捆绑包(特别是如果您使用Android Studio版本Artic Fox),则在Mac上运行以下命令:
  1. cd /Applications/Android\ Studio.app/Contents/jre

  2. ln -s ../jre jdk

  3. ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk

  4. Flutter Doctor


2

对我来说,接受的解决方案需要稍作修改才能工作。我必须添加 -f (或使用--force)选项才能使其工作(这是因为 ln 失败并提示文件已存在,而我一直忽略了 - 现有文件必须有问题)。

cd /Applications/Android\ Studio.app/Contents/jre
ln -s -f ../jre jdk
ln -s -f "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk

flutter doctor -v

我正在使用运行macOS Monterey的操作系统。


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