1. 查看依賴樹
./gradlew dependencies
2. 解決依賴沖突
一旦在構(gòu)建中存在依賴沖突候生,開發(fā)人員需要決定哪個版本的庫最終包含在構(gòu)建中,有許多解決沖突的方法。
1. 全部排除
將依賴沖突的庫包含com.android.support都排除掉
api("com.afollestad.material-dialogs:core:0.9.5.0") {
exclude group: 'com.android.support'
}
2. 逐個排除
compile('junit:junit:4.12'){
exclude group : 'org.hamcrest',module:'hamcrest-core'
}
//最終哀蘑,如果我們向包含1.3版本到構(gòu)建中顿苇,我們可以從“mockito"中排除他
androidTestCompile('org.mockito:mockito-core:1.10.19'){
exclude group : 'org.hamcrest',module:'hamcrest-core'
}
3. 顯式依賴
在build.gradle中顯示定義沖突的庫,在這種情況下蜒程,我們需要明確提出我們想要包含在任何一個配置的最終構(gòu)建中的庫的版本绅你。
compile 'junit:junit:4.12'
androidTestCompile 'org.mockito:mockito-core:1.10.19'
androidTestCompile 'org.hamcrest:hamcrest-core:1.3'
如果多個依賴具有沖突版本的依賴或傳遞依賴的話,則不是從每個依賴性中排除模塊昭躺,而是可以簡單的使用期望的版本號來定義沖突依賴忌锯。
這種是一種更清潔的解決沖突的方法,但缺點是领炫,當更新實際的依賴關(guān)系的時候偶垮,開發(fā)人員需要更新沖突的庫。
4. 強制依賴
強制使用某個統(tǒng)一的依賴版本
單個庫的強制依賴
implementation('androidx.appcompat:appcompat:1.1.0-rc01'){
force = true
}
全局強制依賴
//在app.gradle 中的Android閉包中使用
android{
configurations.all {
resolutionStrategy.force 'com.android.support:appcompat-v7:28.0.0'
resolutionStrategy.force 'com.android.support:support-v4:28.0.0'
resolutionStrategy.force 'com.android.support:animated-vector-drawable:28.0.0'
resolutionStrategy.force 'com.android.support:support-media-compat:28.0.0'
}
}
//在build.gradle 中設置工程全局強制依賴
allprojects{
configurations.all {
resolutionStrategy.force 'com.android.support:appcompat-v7:28.0.0'
resolutionStrategy.force 'com.android.support:support-v4:28.0.0'
resolutionStrategy.force 'com.android.support:animated-vector-drawable:28.0.0'
resolutionStrategy.force 'com.android.support:support-media-compat:28.0.0'
}
}
5. Gradle腳本排除
通過Grovvy腳本修改版本號解決沖突;
在其存在沖突的module中的build.gradle文件中加入下面代碼帝洪,原理就是通過遍歷所有依賴似舵,并修改指定庫的版本號;
其中requested.group == 'com.android.support' com.android.support表示要修改的依賴庫;
details.useVersion '28.0.0', 28.0.0表示要修改的版本號
configurations.all {
resolutionStrategy.eachDependency { details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '28.0.0'
}
}
}
}
6.module排除
configurations {
all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
7. 關(guān)閉依賴傳遞
關(guān)閉傳遞依賴之后葱峡,例如如下例子砚哗,就不會依賴appcompat所依賴的庫
implementation('androidx.appcompat:appcompat:1.1.0-rc01'){
transitive = false
}
也可以全局關(guān)閉
configurations.all {
transitive = false
}
8.替換Support為Androidx
如果沖突的庫是Support庫,那么可以將所有suppot庫替換為Androidx
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta01'
implementation 'androidx.core:core-ktx:1.2.0-alpha02'
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation "androidx.constraintlayout:constraintlayout:2.0.0-beta2"
implementation 'androidx.core:core-ktx:1.2.0-alpha02'
然后在gradle.properties中配置
#啟用Androidx
android.useAndroidX=true
#遷移其他依賴
android.enableJetifier=true