Android Studio Jar包冲突总结
在集成环信聊天SDK的时候,真是遇到了好多坑啊,真是白了少年头,而Jar包冲突相信很多人都遇到过吧,
首先你必须熟悉几个AndroidStudio导包的方式和特点:
方式1:直接引用下载网络jar包
compile ‘com.Android.support:support-v4:23.3.0’
方式2:引用libs下所有jar包(最好不要用,自己一个一个引入比较好)
compile fileTree(dir: ‘libs’, include: [‘*.jar’])
方式3:引用一个jar
compile files(‘libs/fastjson-1.1.53.android.jar’)
方式4:引用一个aar文件,注意并不能像 方式2 那样自动引用全部的aar,而需要对每个aar分别进行引用。
compile(name:‘aar_file_name’, ext: ‘aar’)
方式5:引用库类型的项目
compile project(‘:xxxsdk’)
方式6:仅仅在编译时使用,但最终不会被编译到apk或aar里
providedfiles(‘libs/glide-3.7.0.jar’)
查看一下报错的信息,大部分jar包冲突报错信息如下:
Android Studio:Multiple dexfilesdefine Landroid/support/annotation/AnimRes
大部分人报错原因为:
1: app/libs下有两个两个相同的jar包或者dependencies{}里面compile了两个相同库
2:项目引入v4包和v7包,因为v7包里面包含了v4包,所以导致冲突,这个可以用以下方法解决:
compile('com.android.support:appcompat-v7:23.3.0') { excludemodule: 'support-v4'}
默认情况下v7中是包含V4包的,exclude 的意思就是从v7包中去除v4包这样就可以解决冲突
3: 例如引入的module中有v4包,然后主module又有v4包,如果你不想删除任何一个v4包,或者其他情况不能把其中的一jar包删除,这时候就要注意到注意compile 和 provided 的区别了:
compile :jar包/依赖代码 在编译的时候需要依赖,在运行的时候也需要
provided : jar包/依赖代码 仅在编译的时候需要,但是在运行时不需要依赖
也就是说,你只要吧其中任意一个改为provided就可以了
注意没效果的可以多clean,rebuild一下,或者删除build目录
网上还有几个处理不同情况jar包冲突的方法,如:
在 allprojects{}里面配置
configurations {all*.excludegroup:'com.android.support', module:'support-v4'all*.excludegroup:'com.android.support', module:'support-annotations'}
表示在jar包里面如果有包含 v4包或者annotations包,则从包中去除(这种方法我的没解决)
jar包冲突情况基本就这样子了,基本上能解决今后遇到的冲突问题了把,妈妈再也不用担心我的jar包冲突问题了