Android Studio Arctic Fox 2020.3.1 Patch 1编译任务':assets_audio_player:compileDebugKotlin'失败求助
解决':assets_audio_player:compileDebugKotlin'执行失败的ExceptionInInitializerError问题
问题背景
我之前遇到过完全类似的兼容性问题,结合你提供的报错栈信息和环境(Android Studio Arctic Fox 2020.3.1 Patch 1),能确定这是Java模块系统与旧版Kotlin/IntelliJ工具链不兼容导致的反射权限问题,下面给你整理了可行的解决方案。
完整报错日志
e: java.lang.ExceptionInInitializerError at org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel.<init>(LanguageLevel.java:25) at org.jetbrains.kotlin.com.intellij.core.CoreLanguageLevelProjectExtension.<init>(CoreLanguageLevelProjectExtension.java:26) at org.jetbrains.kotlin.com.intellij.core.JavaCoreProjectEnvironment.<init>(JavaCoreProjectEnvironment.java:42) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment.<init>(KotlinCoreProjectEnvironment.kt:26) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$ProjectEnvironment.<init>(KotlinCoreEnvironment.kt:121) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:425) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.createCoreEnvironment(K2JVMCompiler.kt:226) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:152) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:88) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:386) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:110) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:286) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl$rebuild(IncrementalCompilerRunner.kt:99) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:114) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:74) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:607) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:96) at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1659) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:567) at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) at java.base/java.security.AccessController.doPrivileged(AccessController.java:691) at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) at java.base/java.lang.Thread.run(Thread.java:831) Caused by: java.lang.reflect.InaccessibleObjectException: 无法使受保护的方法void java.util.ResourceBundle.setParent(java.util.ResourceBundle)变为可访问:模块java.base未向未命名模块@5bb4f7d1开放"java.util" at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) at java.base/java.lang.reflect.Method.setAccessible(Method.java:193) at org.jetbrains.kotlin.com.intellij.util.ReflectionUtil.makeAccessible(ReflectionUtil.java:252) at org.jetbrains.kotlin.com.intellij.util.ReflectionUtil.getDeclaredMethod(ReflectionUtil.java:269) at org.jetbrains.kotlin.com.intellij.DynamicBundle.<init>(DynamicBundle.java:22) ... 38 more FAILURE: 构建失败,出现异常。 出错原因:任务':assets_audio_player:compileDebugKotlin'执行失败。 内部编译器错误,详情请查看日志。 建议操作: 使用--stacktrace选项获取堆栈跟踪。 使用--info或--debug选项获取更多日志输出。 使用--scan选项获取完整分析信息。
问题根源
这个错误的核心原因是:
- Android Studio Arctic Fox默认使用Java 11,而你的项目或IDE自带的Kotlin版本过旧,无法适配Java 9+引入的模块系统(JPMS)的权限限制;
- 旧版Kotlin/IntelliJ工具链尝试通过反射访问
java.util.ResourceBundle的受保护方法,但JPMS阻止了这个操作——因为java.base模块没有向未命名模块开放java.util包的反射权限; - 你使用的
assets_audio_player库版本可能也比较旧,没有适配Java 11和新版Kotlin的环境。
解决方案(按优先级排序)
1. 降级项目使用的Java版本到8
Java 8没有模块系统,能直接规避这个权限问题,操作步骤:
- 打开项目根目录的Project级
build.gradle,修改如下配置:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } }
- 打开Android Studio的
File > Project Structure > SDK Location,将JDK location切换到Java 8的安装路径。
2. 更新Kotlin版本到兼容Java 11的版本
Kotlin 1.5.31及以上版本修复了JPMS的兼容性问题,更新方法:
- 在**Project级
build.gradle**中修改Kotlin插件版本:
buildscript { ext.kotlin_version = "1.5.31" // 也可以使用更高的兼容稳定版 dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
3. 更新assets_audio_player库到最新稳定版
旧版本的这个库可能没有适配Java 11环境,在**Module级build.gradle**中更新:
dependencies { implementation 'xyz.luan:assets-audio-player:3.0.4' // 替换为最新稳定版本 }
4. 添加JVM参数绕过JPMS限制(临时方案)
如果暂时无法更新版本,可以添加参数允许反射访问,作为临时 workaround:
- 打开项目根目录的
gradle.properties,添加以下内容:
org.gradle.jvmargs=--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED
注意:这只是临时解决办法,长期来看还是推荐通过版本适配解决问题。
5. 清理缓存并重建项目
完成上述修改后,执行以下操作确保缓存被彻底清理:
- 点击Android Studio工具栏的
File > Invalidate Caches... > Invalidate and Restart; - 在终端执行
./gradlew clean build命令,重新构建项目。
验证
完成上述任意一种方案后,重新构建项目,:assets_audio_player:compileDebugKotlin任务应该能正常执行。
内容的提问来源于stack exchange,提问作者BRIJESH SAKARIYA
相关产品推荐
相关产品推荐

