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

在Groovy DSL Gradle中应用Kotlin DSL Gradle脚本及同步报错解决方法咨询

在Groovy DSL Gradle中应用Kotlin DSL Gradle脚本及同步报错解决方法咨询

嗨,我来帮你搞定这个问题~

你遇到的Unresolved reference: android错误,其实是因为Kotlin DSL脚本在被Groovy DSL脚本引入时,上下文逻辑和独立的模块构建脚本不一样,再加上你脚本里的一些冗余操作导致的。我给你一步步拆解解决方法:

错误原因分析

  • 你在Kotlin DSL脚本demo.gradle.kts里重复执行了apply(plugin = "com.android.application"),但你的主Groovy脚本已经是Android应用模块的build.gradle,早就已经应用过这个插件了。重复应用会让两个脚本的插件上下文混乱,导致Kotlin脚本无法正确识别主脚本中的android扩展。
  • 就算不重复应用插件,在被引入的Kotlin DSL脚本插件中,android不会像在模块的build.gradle.kts里那样自动成为顶级属性,必须显式地从项目上下文中获取。

具体修复步骤

第一步:修改demo.gradle.kts脚本

删掉冗余的插件应用代码,改用显式方式获取android扩展:

// 导入Android Application扩展的类型(保证类型安全)
import com.android.build.gradle.api.ApplicationExtension

// 从当前项目上下文中获取Android扩展
val android = project.extensions.getByType<ApplicationExtension>()

android {
    // 这里写你的Android配置,比如:
    compileSdk = 34
    defaultConfig {
        applicationId = "com.your.app.id"
        minSdk = 21
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
    }
    // 其他配置比如buildTypes、productFlavors等都可以在这里写
}

如果你觉得类型安全的写法有点繁琐,也可以用更简洁的方式(虽然类型不安全,但对于简单配置足够用):

project.android {
    // 你的Android配置内容
    compileSdk = 34
    // ... 其他配置
}

第二步:确认主Groovy脚本的apply语句

你的主Groovy build.gradle里的引入语句是没问题的,保留即可:

apply from: "../my-gradle/demo.gradle.kts"

第三步:同步前的小清理

有时候Gradle缓存会搞出奇怪的问题,你可以先执行一下缓存清理命令,再同步项目:

  • Mac/Linux终端:./gradlew cleanBuildCache
  • Windows命令行:gradlew cleanBuildCache

额外注意事项

  • 建议使用Gradle 7.0及以上版本,对Groovy和Kotlin DSL混合使用的支持更稳定;
  • 如果你在Kotlin脚本里用到Android相关的其他类型(比如BuildType),记得导入对应的包,比如com.android.build.gradle.api.BuildType。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:28:00