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

AGP 7.1下发布带源码的Android Kotlin库sourceSet引用报错如何解决

问题原因

AGP 7.1.0-beta01 版本中,AndroidSourceSet 未直接公开 kotlin 属性的成员访问,直接调用android.sourceSets["release"].kotlin会触发未找到属性的编译错误。

方案1:同时获取Java+Kotlin全部源码(推荐)

这是兼容性最好的写法,不需要手动区分Java和Kotlin目录,直接获取当前sourceSet下所有已注册的源码目录:

tasks.register<Jar>("androidReleaseSourcesJar", Jar::class) {
    archiveClassifier.set("sources")
    // 直接读取release源码集下所有源码目录,自动包含Java、Kotlin路径
    from(android.sourceSets["release"].allJava.srcDirs)
}

如果你已经在plugins块中引入了kotlin-android插件,也可以用以下写法显式指定两种源码:

tasks.register<Jar>("androidReleaseSourcesJar", Jar::class) {
    archiveClassifier.set("sources")
    from(android.sourceSets["release"].java.srcDirs)
    // 注意kotlin是扩展方法,需要加括号调用
    from(android.sourceSets["release"].kotlin.srcDirs())
}

方案2:仅获取Kotlin源码

需要确保你已经在build.gradle.kts的plugins块中引入了kotlin-android插件,写法如下:

import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension

tasks.register<Jar>("androidReleaseSourcesJar", Jar::class) {
    archiveClassifier.set("sources")
    // 仅读取Kotlin源码目录
    from(project.extensions.getByType<KotlinProjectExtension>().sourceSets.getByName("release").kotlin.srcDirs)
}

额外优化建议

AGP 7.0+ 已经内置了源码打包的能力,你可以完全删掉自定义的androidReleaseSourcesJar任务,直接在publication中使用内置的源码产出,写法更简洁:

project.afterEvaluate {
    publishing {
        publications {
            register<MavenPublication>("release") {
                groupId = mGroupId
                artifactId = mArtifactId
                version = mVersion

                from(components["release"])
                // 直接引用AGP自动生成的release源码Jar任务,不需要自己手动实现
                artifact(tasks.named("releaseSourcesJar"))
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:45:05