背景:
公司项目需要引用公司内部开发的IM组件,组件以AAR包的形式进行引入,由于IM组件相当于一个完整的项目,所以用到的jar包比较多,比如fastjson、okhttp、glide。
这些jar包在项目中的common库中也有引用,所以造成了冲突。
问题:
引入aar包之后的gradle编译报如下错误,注意jar包冲突的的错误每次都只会报一个,其实可能存在多个冲突。从log中可以看出冲突的是okhttp这个jar包的引入导致。
Error:Execution failed for task ':app:transformClassesWithJarMergingForZhgyDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: okhttp3/Address.class
Error:Execution failed for task ':app:transformClassesWithJarMergingForZhgyDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/gson/annotations/Expose.class
原因:
Android在打包编译的时候会将aar包中的资源文件一并打入包中,这个时候第三方包的包名和类名都完全一致,这会导致在寻找需要的类的时候出现问题。
所以这里我们就有两个不同的解决方案。
1、引用jar包的源码,修改源码的包名。
2、使用gradle的配置exclude掉重复的jar包。
解决方法:
在app的gradle中添加如下配置
configurations { compile.exclude module: 'okhttp' compile.exclude module: 'fastjson' compile.exclude module: 'glide' }
gradle针对jar包重复的问题的解决,详细的介绍可以看官方的文章
https://docs.gradle.org/current/userguide/dependency_management.html
本文介绍了在Android项目中引入内部开发的IM组件时遇到的jar包冲突问题,并提供了两种解决方案:修改源码包名及使用Gradle排除重复的jar包。
537

被折叠的 条评论
为什么被折叠?



