Gradle 6.1.1+JDK1.8下Android Studio运行失败但assemble成功原因咨询
环境背景
- Gradle版本:6.1.1
- Android Studio配置的JDK版本:1.8
- 现象:点击AS运行按钮构建失败,错误信息如下:
Cause: com/android/tools/idea/gradle/run/OutputBuildAction has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
- 但直接执行
assemble任务可在JDK1.8环境下成功打包APK,已清理Gradle缓存,问题依旧。
核心原因:两个JDK配置的区别
你混淆了Android Studio自身运行JDK和Gradle构建运行JDK的作用:
1. Gradle构建任务(如assemble)的运行逻辑
assemble是纯Gradle任务,完全由Gradle框架处理。Gradle 6.1.1本身兼容JDK 8到JDK 11,所以只要你正确配置了Gradle使用JDK1.8,这个任务就能正常执行,和Android Studio自身的运行环境无关。
2. Android Studio运行按钮的执行逻辑
点击AS的运行按钮,不只是触发Gradle构建,还会启动IDE自身的辅助运行逻辑——OutputBuildAction就是Android Studio IDE内置的类,这个类是用JDK11编译的(class文件版本55.0对应JDK11)。当你把AS自身的JDK设置为1.8时,IDE运行在JDK1.8环境下,而JDK1.8只能识别最高到52.0的class文件版本,因此加载这个类时就会抛出版本不兼容的错误。
结论:不是Bug,是配置误区
这不是Android Studio的Bug,而是你错误地把Android Studio自身的运行JDK设置为了1.8。从Android Studio Arctic Fox(2020.3.1)版本开始,IDE自身要求运行在JDK11及以上环境,才能兼容其内置的新功能类。
正确配置方案
- 保持Android Studio自身的JDK为推荐的JDK11(可在
File > Settings > Build, Execution, Deployment > Build Tools > Gradle中查看"Android Studio JDK") - 单独设置Gradle运行时JDK为1.8:
- 方法1:在项目根目录的
gradle.properties中添加:org.gradle.java.home=/path/to/jdk1.8 - 方法2:在
File > Project Structure > Project中,将"Gradle JDK"设置为JDK1.8
- 方法1:在项目根目录的
这样既能满足IDE自身的运行要求,又能让Gradle用JDK1.8执行构建任务,解决冲突问题。
内容的提问来源于stack exchange,提问作者xufei

