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

Android build.gradle.kts:sourceSets的main无法作为函数调用报错

解决AGP 8.0.0下Kotlin DSL中sourceSets配置报错问题

针对你遇到的"Expression 'main' cannot be invoked as a function"错误,核心原因是Android AGP对sourceSets的Kotlin DSL配置方式和普通Gradle文档里的标准写法不一样,具体修正方案如下:

正确的配置代码

把原来的代码放到android代码块内,并且用named("main")来获取主sourceSet,而不是直接调用main():

android {
    sourceSets {
        named("main") {
            java.srcDir("src/core/java")
        }
    }
}

为什么原来的写法不行?

  1. Android项目的sourceSets是AGP扩展出来的,必须嵌套在android块内配置,不能直接在脚本根层级写sourceSets { ... }
  2. 在Kotlin DSL中,AGP的sourceSets不支持main { ... }这种函数式调用语法,必须通过named()或getByName()方法来指定具体的sourceSet名称,这是Kotlin强类型特性导致的写法差异。

另外你提到的上下文导入出现无关main函数的问题,就是因为脚本在根层级识别main时,会匹配到Kotlin标准库或其他依赖中的main函数,而不是AGP的sourceSet对象,放到android块内后就会自动关联到正确的Android sourceSet上下文了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:42:04