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

AppAbuild.gradlefile

dependencies {
implementation project(":modA")
}

来自appAAppASample.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")
}

现在准备了modA的aar,并作为一个单独的模块添加。

从一个类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)
}

我得到了它与另一个stackoverflow post工作

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

因此,为了将依赖关系引入,我们需要显式地将它们打包在一起。在我的例子中,我使用maven发布插件来获得与aar一起打包的依赖项。

相关内容

  • 没有找到相关文章

最新更新