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

AGP 8.1.0中jvmTarget: String已废弃,Kotlin DSL环境下的推荐迁移方案咨询

AGP 8.1.0中jvmTarget: String已废弃,Kotlin DSL环境下的推荐迁移方案咨询

嗨,我前段时间升级AGP到8.1.0的时候也碰到了这个废弃警告,当时还愣了一下,原来的字符串写法突然就触发提示了,后来查了官方配置说明、踩了几个小坑,现在把靠谱的迁移方式分享给你~

首先得说为啥官方要废弃字符串类型的jvmTarget:从AGP 8.0+配合Kotlin Gradle Plugin 1.8+开始,官方就主推类型安全的枚举配置了——既能避免拼写错误(比如把"11"写成"l1"这种低级失误),也能和Gradle的类型安全配置体系对齐,长期来看项目维护性会好很多。

接下来是具体的迁移写法,分几种常用场景给你捋清楚:

1. 模块级build.gradle.kts(Android模块)

原来的写法(会触发废弃警告):

android {
    kotlinOptions {
        jvmTarget = "11"
    }
}

现在推荐两种写法,选顺手的用就行:

写法一:用Kotlin官方的JvmTarget枚举

需要先导入枚举类(IDE一般会自动提示导入,不用手动敲):

import org.jetbrains.kotlin.gradle.dsl.JvmTarget

android {
    // 建议同步配置Java编译选项,保证Java和Kotlin代码的编译目标完全一致
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    
    kotlinOptions {
        jvmTarget = JvmTarget.JVM_11
    }
}

写法二:直接复用JavaVersion枚举(和Java编译配置对齐)

这种写法不用额外导入类,因为JavaVersion是Gradle核心API自带的:

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

小提醒:千万别忘了同步配置compileOptions,不然可能出现Java代码用17编译、Kotlin代码用11编译的兼容性问题,统一版本才是稳妥的做法。

2. 项目级统一配置(所有Android模块生效)

如果你的项目有多个模块,不想挨个改配置,可以在根目录的build.gradle.kts里统一设置:

import org.jetbrains.kotlin.gradle.dsl.JvmTarget

subprojects {
    // 只对应用了Kotlin Android插件的模块生效,避免影响纯Java模块
    plugins.withType<org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPlugin> {
        extensions.configure<com.android.build.api.dsl.CommonExtension<*, *, *, *, *>> {
            compileOptions {
                sourceCompatibility = JavaVersion.VERSION_11
                targetCompatibility = JavaVersion.VERSION_11
            }
            kotlinOptions {
                jvmTarget = JvmTarget.JVM_11
            }
        }
    }
}

3. 纯Kotlin JVM项目(非Android模块)

如果你还有纯Kotlin的模块,配置逻辑类似,直接在kotlin块里用枚举就行:

plugins {
    kotlin("jvm") version "1.9.0" // 版本和AGP保持兼容即可
}

kotlin {
    // 方式一:用JvmTarget枚举
    jvmTarget = JvmTarget.JVM_11
    // 方式二:用工具链配置(更推荐,会自动下载对应版本的JDK)
    jvmToolchain(11)
}

最后再提个小注意点:AGP 8.1.0建议搭配Kotlin Gradle Plugin 1.9.0及以上版本,这样枚举配置的兼容性最好,不会出现奇怪的编译错误。

我自己用第一种写法(JvmTarget枚举)跑了好几个项目了,完全没问题,废弃警告也彻底消失了,你可以放心试~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 10:59:30