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

升级AGP至8.0.2后,如何保留Java 11编译兼容性?

解决AGP 8.0.2下Java 11编译目标与kapt冲突的问题

问题原因

AGP 8.x 要求使用JDK 17执行编译,但默认会将Kotlin的jvmTarget设为17。当你把Java的sourceCompatibility和targetCompatibility配置为11时,Java编译任务的目标版本(11)与kapt生成stub的Kotlin任务目标版本(17)不一致,就会触发兼容性错误。

解决方案

要保留Java 11的编译目标,核心是统一Java和Kotlin的JVM目标版本,在项目的build.gradle(或build.gradle.kts)中补充Kotlin的目标配置:

Groovy 语法

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

    kotlinOptions {
        jvmTarget = '11'
    }
}

Kotlin DSL 语法

android {
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }

    kotlinOptions {
        jvmTarget = "11"
    }
}

配置完成后,Java编译任务和kapt的stub生成任务会统一使用JVM 11作为目标版本,即可正常编译。

关于文档内容的澄清

官方文档中“Java或Kotlin源码可使用哪些Java API”,指的是源码允许调用的Java API级别;而sourceCompatibility/targetCompatibility、jvmTarget是控制生成的字节码兼容的JVM版本。AGP 8.x要求用JDK 17执行编译,但不强制生成JVM 17的字节码——只要统一Java和Kotlin的目标版本,你完全可以生成兼容JVM 11的字节码,同时满足源码API的使用要求。

内容的提问来源于stack exchange,提问作者Subodh Nijsure

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:44:55