首页 > 解决方案 > 与源代码一起发布 Android Kotlin 库

问题描述

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

我的图书馆项目结构

: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

标签: androidkotlingradleandroid-gradle-plugingradle-kotlin-dsl

解决方案


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

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

推荐阅读