首页 > 解决方案 > gradle api不适用于Android Studio中的多项目设置

问题描述

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

考虑 modAbuild.gradle文件

dependencies {
    api project(":mobB")
}

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

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

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

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

应用程序build.gradle文件

dependencies {
    implementation project(":modA")
}

来自 appA 中的一个类AppASample.kt

class AppASample{

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

}

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

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

AppB 的build.gradle文件看起来像这样

dependencies {
    implementation project(":modA")
}

现在这一次aarmodA 已准备好并作为单独的模块添加。

从一个班级AppBSample.kt

class AppASample{

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

}

谁能提供一些见解,为什么会发生这种情况。我期待 modB 可以访问,但如果使用直接 aar,情况并非如此。

任何建议将不胜感激。

标签: androidandroid-studiogradleaar

解决方案


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)
}

推荐阅读