方法一:改依赖库的版本
其实就是依赖的包版本不一样,产生了冲突,把所有依赖的库改成版本一致的就可以了。
注意:如果有多个library的引用,并且各自引入了 so库文件,编译时发生了so重复引入的问题,可以去掉其中一个分支的so文件的编译。
方法二:exclude aar中的jar包
场景一
要移除的jar包不在aar包中的classes.jar中 直接把aar包里的Jar打包的时候给去掉,就像下面这这样。注意,要使用exclude module这种方式,直接使用exclude group方式没有效果。exclude group的方法适用于exclude JAR包中的文件。
? ? implementation(name: '×××××××aar包', ext: 'aar') {
? ? ? ? exclude module: 'gson'
? ? }
场景二
要移除的jar包在aar包中的classes.jar中 这个时候,使用exclude方法已经不能生效了。你可以使用下面的通用方法,jar包也是这么处理
解压aar文件到tmpDir目录下 unzip ×××.aar -d tmpDir 找到classes.jar包,用压缩工具打开,删除目标文件 将tmpDir重新打包成一个新的aar jar cvf ×××NewLib.aar -C tmpDir/ . **补充:**我在Ubuntu下直接使用压缩工具打开aar包,然后删除其中的重复的文件,这个方法也是可行的。
方法三:compileOnly,只编译不打包
这个方法只能解决编译打包的问题,但是项目也无法调用该依赖中的资源,如果调用,会报错。?
参考:
Android引包出现Duplicate class com.xxx.xxx found in modules错误_哎吆我呸的博客-CSDN博客
gradle 几种依赖命令及文件冲突或包冲突_lfz2738942的博客-CSDN博客_gradle 依赖命令
Android Studio 引入Jar包,Jar包冲突问题总结_code豆腐的博客-CSDN博客?
|