“不重复造轮子”,这是可谓是写代码界的格言了,做Android开发也不例外,为了更快完成项目需求,我们在接到需求开始动手写代码前都会去GitHub或者码云等代码库搜索一下有没有大神已经实现好类似功能的“轮子”,有就可以轻轻松松compile进依赖包,拿来用了,随着使用的第三方包增加,加上个别造轮子的人没怎么注意包的引入问题,便会出现引入重复的包,这个问题轻则出现警告,重则无法运行App。本篇文章记录下我在开发过程遇到的一个警告型错误:
从提示信息可以看出这个错误是因为引入了多个版本的support包,此时虽然能运行App,但是本着严谨的作风,有错误就一定要想办法解决掉,不然日后坑深了就爬不出来了。
什么是support包
首先介绍下什么是support包,我们都知道Android发展到现在已经发布了很多个版本了,而且每个版本都增加不少新的“功能”,这就导致了低版本系统使用高版本功能时会出错,为了解决这个问题,Google就做了这些个support包,即我们经常看到的support v4,v7,v13等等这些包。
* support-v4
用在API lever 4(即Android 1.6)或者更高版本之上。它包含了相对更多的内容,而且用的更为广泛,例如:Fragment,NotificationCompat,LoadBroadcastManager,ViewPager,PageTabStrip,Loader,FileProvider 等
* support-v7
用在 API level 7(即Android 2.1)及以上版本而设计的,但是v7是要依赖v4这个包的,v7支持了Action Bar以及一些Theme的兼容。
* support-v13
用在API level 13(即Android 3.2)及更高版本的,一般我们都不常用,平板开发中能用到。
我们常用的一般就v4和v7包。注意:gradle引用appcompat-v7包的时候就不需要引用v4了,因为v7里默认包含了v4包。
重复引入解决方法
1:在引入第三方依赖包的时候明确知道它会引入冲突包,可以在引入的时候去除引入其中的support包,这个方法在引入库较多的时候不实用,这里就不做介绍了。
2:直接配置全局support包的版本,统一使用同一个版本的support包:
在build.gradle 配置文件下android包下添加如下配置代码:
···
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group =='com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion'26.0.0' //这里改为你项目使用的版本即可
}
}
}
}
···