安卓工作室突然不再在手机上运行Flutter/Android应用程序



问题

我正试着在我的手机上运行我的Flutter应用程序,通过USB连接,以便调试。

它从一天(5月13日,如果重要的话)到下一天都停止了工作。令人沮丧的是,自上次工作以来,我没有做出任何改变。自从上次我点击安卓工作室";播放";按钮,只有代码更改,通过热重新加载运行良好。第二天,当按下播放按钮时,它突然抱怨没有设置JAVA_HOME。

经过一些故障排除,我现在得到错误消息

* What went wrong:
Execution failed for task ':camera:compileDebugJavaWithJavac'.
> java.lang.IllegalAccessError:
class org.gradle.internal.compiler.java.ClassNameCollector(in unnamed module @0x3d2880e7)
cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler)
because module jdk.compiler does not export com.sun.tools.javac.code
to unnamed module @0x3d2880e7

插入新行以便于阅读。此外,最近的代码更改与摄像头的使用无关
为Chrome而不是Android构建时没有问题。

故障排除尝试

Android Studio版本

由于我没有手动更改任何配置,我的第一个怀疑是某些东西一定是自动更改的。我通过JetBrains工具箱安装了Android Studio,该工具箱设置为在(稳定)更新可用时自动更新我的IDE。上一次更新(4.2.1)确实在本月发布,但回滚到以前的4.2.0版本并没有解决这个问题。

现有Java

嗯。。。JAVA_HOME已设置。值得注意的是,它被设置为安卓工作室的嵌入式版本,该版本是安卓工作室安装的较旧的非JetBrains工具箱。更值得注意的是,它被设置为
C:Program FilesAndroidAndroid Studiojre,而实际安装在
C:Program FilesAndroidandroid-studio下。在WIN10上,小写可能无关紧要,但连字符确实。。。这根本不应该奏效。

C:Program FilesAndroidAndroid Studio下复制文件夹并不能解决此问题。Flutter医生说它可以找到Java,但无法执行。Android Studio中的播放按钮现在又出现了一个错误,但我不知道是哪个错误了,因为我现在已经摆脱了那些旧文件夹,所以我再也无法复制了。好吧,不管怎样,那是一个肮脏的黑客。

在windows CMD中运行echo %JAVA_HOME%打印了路径,而Android Studio中的终端刚刚打印了%JAVA_HOME%,这增加了所有的欢乐。在这一点上,我决定这太糟糕了,我将从头开始。

新Java

所以我卸载了Android Studio,删除了所有可以找到的Java安装,并从环境中删除了Java_HOME。

  • 重新启动后,我再次下载了Android Studio=>没有运气
  • 在Android Studio中,转到File => Project Structure...,这会导致一个与现在不同的屏幕,在那里我可以选择要使用的SDK,也可以编辑要选择的SDK列表(JDK和Android SDK)。选择";下载JDK";选项there=>运气不好
  • 在同一屏幕中,将手动下载的OpenJDKjdk-16.0.1添加到C:tools=>运气不好
  • 再次添加JAVA_HOME,设置为C:toolsjdk-16.0.1=>Android Studio终端现在终于为echo %JAVA_HOME%打印了这个,但构建这个项目仍然没有运气
  • 现在,File => Project Structure...引导我进入一个窗口,在那里我可以分别选择Android SDK位置(设置为C:AndroidSDKAndroid-sdk)、Android NDK(未选择)和JDK。对于最后一个选项,我尝试了嵌入式JDK以及JAVA_HOME(仍然是C:tools中的jdk-16.0.1)=>运气不好,两者都产生了我前面提到的IllegalAccessError

我发现一些(几年前)旧的帖子提到Android Studio不适用于较新的JDK版本,但我在嵌入式版本中也遇到了同样的错误。

问题

到底发生了什么事
为什么它从一天到下一天都停止工作而没有更改
它希望我重新开始工作什么?

更新

更新1

谢谢米兰·肖汉!在移除文件夹.ideaandroid.gradle之后,然后执行文件->无效的缓存和重新启动,构建现在产生另一个错误:

Execution failed for task ':app:processDebugMainManifest'. 
> Unable to make field private final java.lang.String java.io.File.path  
accessible: module java.base does not "opens java.io" to unnamed module @5689f0e

当我创建一个全新的flutter项目并点击播放按钮时,我会得到错误

* What went wrong:
A problem occurred evaluating root project 'android'.
> A problem occurred configuring project ':app'.
> Could not open proj generic class cache for build file
'C:reposflutter_newandroidappbuild.gradle'
(C:UsersRaphael.gradlecaches6.7scriptsc0x6i1v1trom5wonrdzhz34dy).
> BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' 
Unsupported class file major version 60

我通过以下步骤修复了它:

  • 从这里下载OpenJDK 15.0.2https://jdk.java.net/archive/
  • 放在C:tools
  • 将JAVA_HOME设置为C:toolsjdk-15.0.2

这里的某些东西(Android Studio 4.2.1/Dart 2.12.3/Flutter 2.0.6)似乎确实与JDK 16不兼容。

我仍然不知道这里到底发生了什么。事实是

  • 安卓工作室的更新最近才发布,这是我所知道的唯一一件会自行更改的事情
  • 我自己手动添加的JAVA_HOME适用于JDK15,但不适用于JDK16
  • 选择嵌入式JDK时,我会得到与手动添加JDK 16相同的错误

基于此,我的最佳猜测是Android Studio确实自动更新了,并将嵌入式JDK更新到了版本16。

  1. 从项目根文件夹中删除.gradle文件夹和.inidea文件夹

  2. 在Android Studio中,文件->无效缓存并重新启动

最新更新