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

在本來的代碼中已經使用了OKHTTP和rxjava,而後今天依賴retrofit的時候一直報錯java

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

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

網上推薦添加如下配置,但我嘗試後無效,大家能夠試試github

    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成功web

解決方法以下:react-native

由於是okhttp3.5.0以後的版本才加入的okhttp-ws,因此把版本強制控制在3.5.0如下:websocket

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

從新build,代碼再也不報錯socket

 

 

-------------------------------------emm,如下是我次日的打臉續集----------------------------------------gradle

 

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

首先在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包重複的問題也能夠嘗試用這個方法解決呢

相關文章
相關標籤/搜索