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