发布 Android Kotlin 库和源代码

Publishing Android Kotlin library along with source code

我想发布一个带有源代码的库。

我的库项目结构

:library:
└── src
    └── main
        └── kotlin
            └── <package>
                └── MyLibrary.kt

gradle.kts

plugins {
   ...
   id("maven-publish")
}

android {
   ...
   // sourceSets{} block is not present as new AGP automatically recognises "src/main/kotlin" as kotlin source
   ...
}

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

                from(components["release"])
                artifact(tasks.getByName("androidReleaseSourcesJar"))
            }
        }
    }
}

tasks.register("androidReleaseSourcesJar", Jar::class) {
    archiveClassifier.set("sources")

    // Can't refer to `kotlin.srcDirs` but `java.srcDirs` works fine
    from(android.sourceSets["release"].kotlin.srcDirs)
}

我在第

行遇到错误
from(android.sourceSets["release"].kotlin.srcDirs)

如何获取对所有 sourceSet(kotlin + java) 的引用,如果不是,那么只有 kotlin?

AGP 版本:7.1.0-beta01

我不确定这是否是 Gradle Kotlin DSL 中的错误。但是我们做了以下解决方法来访问 Kotlin 源目录:

val kotlinSrcDirs = (android.sourceSets["release"].kotlin.srcDirs() as com.android.build.gradle.internal.api.DefaultAndroidSourceDirectorySet).srcDirs

我想到的解决方案是

kotlin.sourceSets["main"].kotlin.srcDirs

用于发布 kotlin 源代码。如果你需要为一个变体组合多个来源,你需要做类似

的事情
kotlin.sourceSets["main"].kotlin.srcDirs + kotlin.sourceSets["debug"].kotlin.srcDirs

最终输出

tasks.register("androidReleaseSourcesJar", Jar::class) {
    archiveClassifier.set("sources")
    from(kotlin.sourceSets["main"].kotlin.srcDirs)
}

已在 AGP:7.1.0-beta01 & Gradle 上验证:7.3.3