Android Studio 中修复 'module java.base does not "opens java.io" to unnamed module' 错误
问题描述
在 Android Studio 中运行项目时,可能会遇到以下错误:
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 @42760a00
这个错误通常出现在以下情况:
- 使用较新版本的 JDK(如 JDK 16+)
- Gradle 版本与 JDK 版本不兼容
- 项目配置过时或存在兼容性问题
该错误的核心原因是 Java 9+ 引入的模块系统限制了反射操作,而 Android 构建工具需要使用反射访问某些内部 API。
解决方案
方案一:使用兼容的 JDK 版本(推荐)
大多数 Android 项目最佳兼容 JDK 8 或 JDK 11:
- 下载并安装 JDK 8 或 JDK 11
- 在 Android Studio 中配置项目使用兼容的 JDK:
- 打开 File > Project Structure
- 在 SDK Location 中设置正确的 JDK 路径
- 在 Gradle Settings 中选择相应的 Gradle JDK
TIP
对于新项目,建议使用 JDK 11;对于旧项目,JDK 8 通常更稳定。
方案二:更新 Gradle 配置
如果必须使用较高版本 JDK,需要确保 Gradle 配置兼容:
- 更新 gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
- 更新项目级 build.gradle:
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.2.1'
}
}
- 设置兼容的 Kotlin 版本:
ext.kotlin_version = '1.7.10'
方案三:添加 JVM 参数
在 gradle.properties 中添加以下参数来解决模块访问限制:
org.gradle.jvmargs=-Xmx1536M \
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens=java.base/java.io=ALL-UNNAMED \
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
方案四:针对测试任务的特殊配置
如果错误仅在运行测试时出现,在 build.gradle 中添加:
tasks.withType(Test) {
jvmArgs(
'--add-opens', 'java.base/java.lang=ALL-UNNAMED',
'--add-opens', 'java.base/java.util=ALL-UNNAMED'
)
}
版本兼容性参考
JDK 与 Gradle 版本兼容性
- JDK 8: Gradle 4.x - 6.x
- JDK 11: Gradle 6.7 - 7.x
- JDK 17+: Gradle 7.3+
详细兼容性信息请参考 官方兼容性表格。
故障排除步骤
检查当前配置:
- Android Studio > File > Project Structure
- 查看 Gradle 版本和 JDK 版本
清理缓存:
- File > Invalidate Caches / Restart
- 删除项目中的
.gradle
文件夹
检查环境变量:
- 确保
JAVA_HOME
指向正确的 JDK 版本
- 确保
注意事项
- 不建议随意升级/降级 JDK 版本,应先确认项目兼容性
- 修改 Gradle 配置后需要同步项目
- 团队项目中应统一开发环境配置
总结
'module java.base does not "opens java.io" to unnamed module' 错误主要由 JDK 版本与 Gradle 版本不兼容引起。通过使用兼容的 JDK 版本、更新 Gradle 配置或添加适当的 JVM 参数,可以解决这一问题。对于大多数项目,使用 JDK 11 并更新到最新的 Gradle 和 Android Gradle Plugin 是最可靠的解决方案。