gradle api 不适用于 Android Studio 中的多项目设置

gradle api not working for multi project setup in Android Studio

我有一个多项目设置。考虑两个独立的应用程序 AppA 和 AppB。 AppA 有两个库模块 modA 和 modB。 modA 通过 gradle API.

依赖于 modB

考虑 modA build.gradle 文件

dependencies {
    api project(":mobB")
}

modA 有一个文件 ModASample.kt 看起来像

class ModASample{
    fun modASample(){
        println("modASample")
    }
}

modB 有一个文件 ModBSample.kt 看起来像

class ModBSample{
    fun modBSample(){
        println("modBSample")
    }
}

AppA build.gradle 文件

dependencies {
    implementation project(":modA")
}

来自 appA class AppASample.kt

class AppASample{

    fun access(){
        val modA = ModASample() //accessible
        val modB = ModBSample() //accessible
    }

}

ModASampleModBSamle 都可以访问,这也是预期的,因为 modB 通过 api 访问在 modA 中使用。

当我尝试提取 modAaar 并尝试在 AppB.

中使用此 aar 时出现问题

AppB 有 build.gradle 个如下所示的文件

dependencies {
    implementation project(":modA")
}

现在准备好 aar modA 并将其添加为单独的模块。

来自 class AppBSample.kt

class AppASample{

    fun access(){
        val modA = ModASample() //accessible
        val modB = ModBSample() // NOT ACCESSIBLE
    }

}

任何人都可以提供一些见解为什么会发生这种情况。我原以为 modB 可以访问,但如果使用直接 aar 则情况并非如此。

如有任何建议,我们将不胜感激。

AAR 不包含传递依赖项,它没有任何包含其依赖项列表的 pom 文件。 从我开发的库中检查此 build.gradle.kts:https://github.com/GiuseppeGiacoppo/RemoteConfig/blob/master/build.gradle.kts

您可以定义一个任务,创建一个包含所有源的 jar 文件。

因为它是一个 kotlin 库而不是 Android,你应该这样改变它:

val sourcesJar by tasks.creating(Jar::class) {
    archiveClassifier.set("sources")
    from(android.sourceSets.getByName("main").java.srcDirs)
}

我得到它与另一个

我能理解的是,在打包 aar 文件时,提供的依赖声明修饰符 (api/implementation) 实际上并未将依赖文件与包一起包含。尽管修饰符(api/implementation)仍然支持其预期用途,但它们似乎并不负责将依赖项实际移动到包中。

因此,为了带来依赖项,我们需要明确地将它们打包在一起。在我的例子中,我使用 maven publish plugin 来获取与 aar 一起打包的依赖项。