android - 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
}
}
两者ModASample
都ModBSamle
可以访问,这也是预期的,因为 modB 通过api
访问在 modA 中使用。
当我尝试提取aar
ofmodA
并尝试在AppB
.
AppB 的build.gradle
文件看起来像这样
dependencies {
implementation project(":modA")
}
现在这一次aar
modA 已准备好并作为单独的模块添加。
从一个班级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)
}
推荐阅读
- javascript - 使用 fetch 下载大文件但使用过多缓存
- sql - 仅显示其他列中超过 2 个相同值的值
- android - 使用位图创建缩放版本后回收位图是否安全?
- javascript - 在多页应用程序中缓存供应商捆绑文件
- tensorflow - Tensorflow 2.0 数据集和数据加载器
- c# - Razor 模板中的“序列不包含匹配元素”
- ios - 使用 safeAreaInsets 让我的 UIWindow 安全区域的顶部边缘在 iOS 13 中有效,但在 iOS 11 中无效?
- c - libc 包含不遵守源类型参数更改的守卫
- java - 当使通知不可关闭时,使用这些解决方案有什么区别?
- c++ - 将 const* 存储在 const 向量中