一、依賴查看 gradle dependencies
在gradle dependencies輸出會有如下幾種標記:
1、版本 : 唯一的依賴。
2、版本():還存在該庫其他版本的依賴或者間接依賴,並且默認選擇()所標注的版本。
3、版本1->版本2(*):還存在該庫其他版本的依賴或者間接依賴,並且選擇 版本2。
二、依賴排除
1、transitive = true
transitive dependencies 指 依賴的依賴,即 “間接依賴”
compile('com.meituan.android.terminus:library:6.6.1.16@aar'){
transitive = true
exclude module: 'hotel_model'
exclude module: 'base_model'
}
@aar只下載該aar包,而不下載該aar包所依賴的其他包
如果想使用@aar的前提下還能下載其依賴庫,則需要添加transitive=true的條件。
2、排除 transitive dependencies
通過configuration或者dependency可以除去 transitive dependencies:
build.gradle
configurations {
compile.exclude module: 'commons'
all*.exclude group: 'org.gradle.test.excludes', module: 'reports'
}
dependencies {
compile("org.gradle.test.excludes:api:1.0") {
exclude module: 'shared'
}
}
如果在configuration中定義一個exclude,那么所有依賴的transitive dependency (指定的)都會被去除。
定義exclude時候,或只指定group, 或只指定module名字,或二者都指定。
不是所有的transitive dependency 都可以被去除的,如:runtime時用到的。
一般來說,runtime時候用不到的,或者目標環境及平台已經包含該依賴的可以執行exclude去除。
那exclude選per-dependency還是per-configuration?
大多數情況都選用per-configuration,下面是一些使用exclude的典型場合:
* 有licensing問題
* 從遠程倉庫上無法獲取到依賴
* runtime時候用不到
* 有版本沖突
其中,exclude module: 'base_model' 和 exclude group:'com.name.group' module:'base_model' 的作用是完全一樣的。
三、強制指定依賴版本
1、force=true
compile('com.squareup.okhttp:okhttp-mt:2.5.0') {
force = true
}
如我們在依賴okhttp的時候很可能發生沖突,就比如依賴的依賴中也包含了okhttp,這種場合下,就會產生版本沖突的問題,
加上force = true表明的意思就是即使在有依賴庫版本沖突的情況下堅持使用被標注的這個依賴庫版本。