架构日记(十)Sophix-Hotfix集成中,友盟和阿里系jar包冲突的解决方案-离线集成
友盟推送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这个包即可。