在原本的代碼中已經使用了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包重復的問題也可以嘗試用這個方法解決呢