友盟推送SDK依賴部分阿里系SDK功能,其中使用並封裝了TNet SDK、Network SDK、ACCS SDK三個SDK,如果與以上三個SDK衝突,必須去掉您自己使用的三個中的SDK,同時使用了alicloud httpdns SDK、alicloud utls SDK、utdid SDK ,如果與以上三個SDK衝突,您可以去掉衝突中的一個即可(注意版本兼容)。
友盟Android Push SDK與阿里集團其他庫出現集成衝突的解決辦法引導
Android Push當前使用到的阿里雲相關庫文件及版本爲:
alicloud-android-sdk-httpdns-1.1.3.1
alicloud-android.utils-1.0.3
networksdk-3.5.5-open
tlog_adapter.3.0.0.17
tnet4android-3.1.1.14.9
如果您使用的友盟Push推送和您已經使用的阿里系產品有庫衝突問題,可以採用Android SDK 6.0.1版本離線依賴的方式集成友盟Push推送,同時檢查下載的push的libs中的依賴庫,對於衝突的依賴庫,建議使用友盟所使用的依賴庫,如需使用其它阿里系產品的依賴庫,需自行測試一下Push相關功能是否能正常使用(一般不會有問題)
utdit衝突 utdit2衝突 等等一系列衝突的解決方案
問題根源:
implementation 'com.aliyun.ams:alicloud-android-hotfix:3.2.14'
implementation 'com.umeng.umsdk:analytics:8.1.1'
//PushSDK必須依賴基礎組件庫,所以需要加入對應依賴
implementation 'com.umeng.umsdk:common:1.5.4'
//PushSDK必須依賴utdid庫,所以需要加入對應依賴
implementation 'com.umeng.umsdk:utdid:1.1.5.3'
//PushSDK
implementation 'com.umeng.umsdk:push:6.0.1'
hotfxi屬於阿里系的包 其他的屬於友盟系列的包,最噁心的是什麼呢,友盟的push:6.0.1裏面只有一個classes.jar 其他的都是源碼,出現了類的衝突是無法解決的,exclude語法只能作用到module和group而無法作用的代碼中的class。如圖
是不是很氣
解決方案:
去友盟的官網下載離線SDK
我下載的是離線SDK6.0.1
下載下來一個是這樣的目錄
首先我們刪除兩句話
implementation 'com.umeng.umsdk:common:1.5.4'
implementation 'com.umeng.umsdk:utdid:1.1.5.3'
mplementation 'com.umeng.umsdk:push:6.0.1'
然後將push目錄作爲一個module Import Module作爲一個依賴 :push
然後在app的gradle下引用
implementation project(':push')
題外話:所以寫其他的問題如果你遇到了就這樣解決
上面不是還有一個友盟的分析功能嗎
implementation 'com.umeng.umsdk:analytics:8.1.1' 就是他 這個依賴會和一個jar包衝突包名是:utdid4all-1.1.5.3_proguard.jar
所以有這個依賴,utdid4all-xxx.jar一定要在主工程的libs文件內部刪掉否則也會有衝突包問題
好了我們接着說,現在進入:push模塊
這是我經過刪改之後剩下的jar包,特別說一下因爲你去除了implementation 'com.umeng.umsdk:common:1.5.4'
所以你要添加umeng-common-2.25.jar
這個jar包需要刪除 utils系列會和hotfix內部的jar包衝突,刪除即可
接下來就是一些個人喜好的修改,我們將hotfix和友盟的依賴放到一起,給主工程用,是這樣的
這個是push.gardle 這是模塊化中的公共模塊思想,將容易出問題的東西,又是通用的東西,放到一個basemodule中,防止這個錯誤再次發生。
至此,友盟推送和阿里系的衝突問題已經解決,順便說一下有沒有使用RxTool 1.7.6的兄弟,這裏也是有問題的,因爲RxTool1.7.6裏面有一個aliPay.jar這裏也和阿里系列的jar包衝突,解決方法是直接刪掉aliPay.jar這個包即可。