gradle api不适用于Android Studio中的多项目设置
我有一个多项目设置。考虑两个单独的应用程序Appa和Appb。AppA有两个库模块modA和modB。modA通过gradleapi依赖于modB 考虑modAgradle api不适用于Android Studio中的多项目设置,android,android-studio,gradle,aar,Android,Android Studio,Gradle,Aar,我有一个多项目设置。考虑两个单独的应用程序Appa和Appb。AppA有两个库模块modA和modB。modA通过gradleapi依赖于modB 考虑modAbuild.gradle文件 dependencies { api project(":mobB") } dependencies { implementation project(":modA") } modA有一个文件ModASample.kt,看起来像 class ModA
build.gradle
文件
dependencies {
api project(":mobB")
}
dependencies {
implementation project(":modA")
}
modA有一个文件ModASample.kt
,看起来像
class ModASample{
fun modASample(){
println("modASample")
}
}
class ModBSample{
fun modBSample(){
println("modBSample")
}
}
modB有一个文件ModBSample.kt
,如下所示
class ModASample{
fun modASample(){
println("modASample")
}
}
class ModBSample{
fun modBSample(){
println("modBSample")
}
}
AppAbuild.gradle
文件
dependencies {
api project(":mobB")
}
dependencies {
implementation project(":modA")
}
来自appAAppASample.kt中的类
class AppASample{
fun access(){
val modA = ModASample() //accessible
val modB = ModBSample() //accessible
}
}
class AppASample{
fun access(){
val modA = ModASample() //accessible
val modB = ModBSample() // NOT ACCESSIBLE
}
}
ModASample
和ModBSamle
都可以访问,这也是预期的,因为modB是通过api
访问在modA中使用的
当我尝试提取modA
的aar
并尝试在AppB
中使用此aar时,就会出现问题
AppB有build.gradle
文件,如下所示
dependencies {
implementation project(":modA")
}
现在,这一次准备了modA的aar
,并作为一个单独的模块添加
从类AppBSample.kt
class AppASample{
fun access(){
val modA = ModASample() //accessible
val modB = ModBSample() //accessible
}
}
class AppASample{
fun access(){
val modA = ModASample() //accessible
val modB = ModBSample() // NOT ACCESSIBLE
}
}
任何人都可以提供一些见解,为什么会发生这种情况。我希望modB可以访问,但如果使用直接aar,情况并非如此
任何建议都将不胜感激。AAR不包含可传递的依赖项,它没有任何pom文件及其依赖项列表。
从我开发的库中检查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/实现)实际上并不包括包中的依赖项文件。尽管修饰符(api/实现)仍然支持其预期用途,但它们似乎并不负责将依赖项实际移动到包中
因此,为了将依赖项组合在一起,我们需要显式地将它们打包在一起。在我的例子中,我曾经将依赖项与aar打包在一起。您将此aar放在modB的何处?您后续问题的上下文不是很清楚。你能补充一下吗?我看了下面的一些评论,似乎你想把modB作为modA的一个依赖项,有点像改造带来了okhttp,这是一个公平的说法吗?代码的目的只是描述这种情况。该库是针对Android的,有其他代码。但我会试试你的建议。如果AAR不包含可传递的依赖项,那么实现范围和api gradle概要文件仅限于多模块设置?这很奇怪。Api和实现只在编译时工作,它们是gradle项目的gradle特性。它们指导您以更好的方式沿多个模块组织代码。一旦构建,您的工件(aar、jar等)就不会有关于模块及其依赖模式(api或实现)的信息