升级依赖后RoomProcessor Java版本不兼容问题如何解决?
结论:必须升级本地Java Runtime到Java 17
Room 2.6.0-alpha02的RoomProcessor注解处理器是用Java 17编译的(类文件版本61.0),而Java 11的运行时最高仅支持类文件版本55.0,Java 11无法加载该处理器,所以必须升级到Java 17。
具体解决步骤
升级本地Java环境到Java 17
可选择Adoptium、Oracle JDK,或直接使用Android Studio自带的JDK(Android Studio Hedgehog及以上版本默认搭载Java 17)。安装完成后,执行java -version验证版本号为17。调整Gradle配置(保留编译目标为Java 11的同时适配处理器)
项目的compileOptions设为Java 11是控制代码编译的目标版本,和注解处理器的运行环境不冲突。可在gradle配置里明确指定处理器的运行参数,同时保留原有编译目标:android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = "11" } // 为注解处理器配置必要参数 compileOptions.annotationProcessorOptions { compilerArgumentProviders.add(new CommandLineArgumentProvider() { @Override public Iterable<String> asArguments() { return Arrays.asList("--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED"); } }) } }另外,在项目根目录的
gradle.properties中可指定Gradle使用的JDK路径:org.gradle.java.home=/path/to/your/java17验证修复效果
先执行./gradlew clean清理缓存,再运行./gradlew :module:hiltJavaCompileAppDebug任务,确认版本冲突报错消失。也可检查Android Studio的项目结构(File > Project Structure > SDK Location),确保JDK Location指向Java 17。
补充说明
项目指定Java 11仍需Java 17的原因:compileOptions控制的是代码最终编译成兼容Java 11的字节码,而注解处理器是编译阶段运行的工具程序,它自身的编译版本要求更高的JVM才能运行,两者互不影响,最终打包的应用依然可在支持Java 11的环境运行。
内容的提问来源于stack exchange,提问作者Michał Dobi Dobrzański

