不刪除Jar包解決包衝突

 

一、你的build.gradle 裏面只有一個依賴引用了衝突包(一般情況是要麼多個依賴引用了衝突包或者是依賴的Module包含了衝突包)

首先做一個演示測試,在我的空項目裏面導入:

implementation 'com.squareup.retrofit2:retrofit:2.3.0'

然後編譯成功之後去查看我的External Libraries

就能看到多了幾個以下jar包:

然後我在app 的builde.gradle 裏面對依賴進行註釋,就能不引入retrofit導入的okio包:

implementation ('com.squareup.retrofit2:retrofit:2.3.0'){
    exclude group:'com.squareup.okio'
}

編譯通過之後,就看到okio包不見了,效果如下:

總結,其實上面介紹內容也可以理解爲exclude的使用。

 

二、當前buile.gradle 存在導入的多個依賴裏面包含了衝突包或者說是依賴的Module存在引用了該衝突包:

我遇到的問題描述:我的項目裏面引入了:

//Retrofit
compile 'com.squareup.retrofit2:retrofit:2.3.0'

//httpLogger  interceptor
compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'

//Retrofit與RxJava結合使用的適配器
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

上面這個照片是我從app的dependencies裏面拿的,至於怎麼拿請看我另一個blog(https://blog.csdn.net/qq_34723470/article/details/103869313),可以看到我導入的三個依賴裏面其實是項目已經存在引用的,比如rxJava2裏面引用了retrofit,retrofit裏面引用了Okhttp3,okhttp3裏面引用了okio,而interceptor 裏面引用了okhttp3,但是即使是這樣,我的項目依然正常運行和打包。因爲他們引入的包的版本號是一致的,所以沒有出現jar包衝突問題。

但是,我有一天接到一個需求變動,這個需求變動是一個公司必須讓我集成他們寫的Module,這個module裏面也用到了okio,但是他的版本跟我的版本(上圖裏面的 okio:1.13.0)不一致,他的是


然後我的項目可以正常運行,但是一打包就出現了jar包衝突,衝突提示的很清楚是okio jar包衝突。因爲我這裏自己的app builde.gradle 裏面不止一個地方引用了okio(我上面解釋過了,三個地方用到了),所以我在三個compile後面都用了exclude ,然後這樣沒有用,我不知道是爲什麼,但是我從網上學到了直接用“全部幹掉”的辦法,直接聲明全部統一exclude 掉okio,這樣就可以正常解決jar包衝突了。對app 的builde.gradle 進行修改 如下:

android{

*****

allprojects {

*****

configurations {

      all*.exclude group:'com.squareup.okio'

    }

            }

}


 
發佈了139 篇原創文章 · 獲贊 22 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章