Android Studio Jar包冲突总结

2017-05-12  本文已影响0人  code豆腐

在集成环信聊天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包冲突问题了

上一篇下一篇

猜你喜欢

热点阅读