Android Studio中解決jar包重復依賴導致的代碼編譯錯誤


在原本的代碼中已經使用了OKHTTP和rxjava,然后今天依賴retrofit的時候一直報錯

Program type already present: okhttp3.internal.ws.RealWebSocket$1.class

說是我重復添加了OKHTTP的包,但其實我直接把OKHTTP的依賴注釋掉都沒用,只要依賴retrofit相關的就一定報這個錯

網上推薦添加以下配置,但我嘗試后無效,你們可以試試

    configurations.all {
        // OkHttp 3.5.0+ includes the websockets API, so we need this to prevent a conflict
        exclude module: 'okhttp-ws'
    }

最后我在這里https://github.com/facebook/react-native/issues/12646找到一個答案,catch成功

解決方法如下:

因為是okhttp3.5.0之后的版本才加入的okhttp-ws,所以把版本強制控制在3.5.0以下:

configurations.all {
      resolutionStrategy.force 'com.squareup.okhttp3:okhttp:3.4.1'
 }

重新build,代碼不再報錯

 

 

-------------------------------------emm,以下是我第二天的打臉續集----------------------------------------

 

昨天直接使用強制控制版本之后以為就沒問題了,今天把retrofit的相關代碼寫了,運行起來才發現3.5.0以下的有個okhttp.ws里的方法找不到,又是各種方法一通試,還是不行,直到在一篇博客上看到一點曙光,照方法執行后,解決了問題(這次是真的解決了

首先在log信息中找到你重復的地方,是哪個類或包重復了,比如我昨天講的自己是okhttp里的RealWebSocket類重復,那么在studio中anywhere搜索(快捷鍵->雙擊shift)RealWebSocket

看到兩個重復的RealWebSocket類,可以直接看到它的目錄地址

然后想到自己昨天剛添加的一堆retrofit相關依賴

implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'

OK,現在就算是找到問題根源(其實一直都很明白問題就在這兒 哈哈哈

接下來很簡單: 
在AS中,選擇以project顯示項目,找到最下面的External Libraries

 

然后找到相對應的類庫,如圖依次點開之后發現了一個pom.xml:

 

這里面就是關於這個jar的一些配置文件,點開之后找到你重復包的groupID復制下來:

然后到build.gradle里,找到那個依賴,添加{exclude group: 'com.squareup.okhttp3'} 

 

到此問題就解決了,如果你有多個重復依賴的話,就按上面的方法一個個去重。

親親,這邊建議您有其他jar包重復的問題也可以嘗試用這個方法解決呢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM