aar依赖引用关系解析

概述

1.使用aar
2.使用仓库(也可以通过参数@aar只引用aar)

路径构成:http://*/{group}/{artifactId}/{version}

预设:库test依赖了rxjava2

上传到仓库

上传配置文件build.gradle

apply plugin: 'maven'

group = 'com.sparkrico'

artifacts {
    archives file('test.aar')
}

uploadArchives {
  repositories {
    mavenDeployer {
        repository(url: "http://*/repositories/releases/") {
            authentication(userName: "username", password: "password")
        }
        pom.version  = '1'
        pom.artifactId = 'test'
    }
  }
}

http://*/com/sparkrico/test/1/
仓库目录详情

image.png

http://*/com/sparkrico/test/1/test-1.pom,可以看到依赖配置信息


4.0.0
com.sparkrico
test
1
aar


io.reactivex.rxjava2
rxjava
2.2.3
compile


com.android.support
appcompat-v7
26.1.0
compile



结论:使用仓库引用包含了依赖关系,使用aar不包含依赖关系。

image.png

冲突处理,参数应用及验证

指定maven库 build.gradle

allprojects {
  repositories {
    mavenCentral()
    jcenter()
    maven { url "http://*/repositories/releases/"}
  }
}


implementation "com.sparkrico:test:1"

引入aar的同时引入依赖RxJava

implementation "com.sparkrico:test:1@aar"

只引入aar不引入依赖RxJava

implementation("com.sparkrico:test:1@aar"){
    transitive = true
}

引入aar的同时引入依赖RxJava

implementation("com.sparkrico:test:1"){
    exclude module: 'rxjava'
}

排除指定依赖(引入库的同时不引入依赖RxJava)

依赖库有版本冲突时,默认使用高版本中的依赖(注意:是引用库的高版本中的依赖),如果项目中指定版本高于依赖中,优先用项目中指定的版本
如果想指定使用引入库中版本,使用force参数

a = 引用库依赖(高)>引用库依赖(低)
force = true 使用指定
引用> a 使用引用,否则使用a

implementation("com.sparkrico:test:1.0"){
    force = true
}
implementation("com.sparkrico:test:1.1"){
}

全局强制使用指定版本库

configurations.all {
   resolutionStrategy {
   force 'org.hamcrest:hamcrest-core:1.3'
 }
}
dependencies {
  ……
}

DependenceDemo in Github

参考:
Android导出aar时嵌套引用的那些坑
Gradle DSL文档

你可能感兴趣的:(aar依赖引用关系解析)