android - 发布 Android Kotlin 库以及源代码

标签 android kotlin gradle android-gradle-plugin gradle-kotlin-dsl

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

我的图书馆项目结构

: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

最佳答案

我想出的解决方案是

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

关于android - 发布 Android Kotlin 库以及源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69733425/

相关文章:

java - 为 eclipse ADT 开发安装正确的 Java 依赖项

android - 在 Unity 应用程序中获取 Google Glass 手势?

kotlin - Android Jetpack Compose 协调器布局等效项

android - Android Studio在错误的文件夹中寻找AndroidManifest.xml

java - Android API 2.2.1 是否过时而无法使用?

android - Roboguice/getInstance + 最佳实践

kotlin - Ktor session Cookie 身份验证

kotlin - Kotlin 中的代数数据类型

Android Studio 在 gradle 同步期间无限期地卡住,但同一个项目在 Intellij Idea 中运行良好

android - api19上的android.content.res.Resources $ NotFoundException