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
}
}
ModASample
和 ModBSamle
都可以访问,这也是预期的,因为 modB 通过 api
访问在 modA 中使用。
当我尝试提取 modA
的 aar
并尝试在 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 一起打包的依赖项。
我有一个多项目设置。考虑两个独立的应用程序 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
}
}
ModASample
和 ModBSamle
都可以访问,这也是预期的,因为 modB 通过 api
访问在 modA 中使用。
当我尝试提取 modA
的 aar
并尝试在 AppB
.
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 一起打包的依赖项。