You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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选项获取完整分析信息。

问题根源

这个错误的核心原因是:

  1. Android Studio Arctic Fox默认使用Java 11,而你的项目或IDE自带的Kotlin版本过旧,无法适配Java 9+引入的模块系统(JPMS)的权限限制;
  2. 旧版Kotlin/IntelliJ工具链尝试通过反射访问java.util.ResourceBundle的受保护方法,但JPMS阻止了这个操作——因为java.base模块没有向未命名模块开放java.util包的反射权限;
  3. 你使用的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:27:28