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") } } }
为什么原来的写法不行?
- Android项目的sourceSets是AGP扩展出来的,必须嵌套在
android块内配置,不能直接在脚本根层级写sourceSets { ... } - 在Kotlin DSL中,AGP的sourceSets不支持
main { ... }这种函数式调用语法,必须通过named()或getByName()方法来指定具体的sourceSet名称,这是Kotlin强类型特性导致的写法差异。
另外你提到的上下文导入出现无关main函数的问题,就是因为脚本在根层级识别main时,会匹配到Kotlin标准库或其他依赖中的main函数,而不是AGP的sourceSet对象,放到android块内后就会自动关联到正确的Android sourceSet上下文了。
内容的提问来源于stack exchange,提问作者SalicBlu3
相关产品推荐
相关产品推荐

