【BUG系列】Flutter Unable to make field private final java.lang.String java.io.File.path accessible: ...

  • What went wrong:
    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 @1d6547f

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.


这个异常通常是因为Java版本不兼容或者项目构建方式不对所导致的。具体地说,这个异常主要是由Java 9及以上版本的模块化特性引起的。

在Java 9及以上版本中,Java平台被分成了多个模块,每个模块都有自己的作用域和依赖关系。当使用一些第三方库时,如果该库内部使用了Java核心库的一些私有API,那么就可能会导致上述异常发生,因为Java 9之后的版本默认情况下是不允许访问私有API的。另外,也有可能是因为项目使用了不兼容的Gradle版本或者构建方式不正确所引起的。

针对这个问题,可以尝试以下解决方案:

方案一:

升级Gradle版本到5.6及以上版本,因为这个版本从底层支持Java 9及以上版本的模块化特性。

方案二(我是这样解决的):

在项目的build.gradle文件中添加以下语句:

tasks.withType(JavaCompile) {
    options.compilerArgs.addAll(['--add-opens', 'java.base/java.io=ALL-UNNAMED'])
}

这样可以打开对Java io的无限制访问权限。

方案三:

如果使用的是Android Studio,可以在项目的gradle.properties文件中添加以下语句:

android.enableDexingArtifactTransform.desugaring=false

这样可以禁用Desugaring,从而避免一些不兼容问题。


希望这些解决方案能够帮助你解决问题。

你可能感兴趣的:(【BUG系列】Flutter Unable to make field private final java.lang.String java.io.File.path accessible: ...)