support中v4 v7库版本错误,主要会报以下两种错误,下面针对每一种错误进行详解
第一种
错误信息:
先来看两个崩溃信息,如下:
- 1
- 1
- 2
经过这两次错误的分析,总结出一个规律,凡是出现android/support/v4/中找不到类或者方法,可以确定是依赖了多个不同版本的support库,都可以使用下面介绍的方法来解决。
分析:
以第一种错误为例,进行分析
log显示,找不到v4库下的这个类,但是我发现在support-v4-24.1.0中可以找到这个类,又想到在build.gradle中看到的这样一个提示,
我猜想,难道是在运行的时候,使用的不是support-v4-24.1.0的库,使用了其他版本的库???
原因:
经过一番查找,和最后实践证明,确实是使用了26.0.0-alpha1版本的库(Support Repo 47.0.0 包括26.0.0-alpha1),在26.0.0-alpha1版本的库中确实没有AnimatorCompatHelper类。
因为某个模块的不同版本同时被依赖时,默认使用新版,gradle同步时不会报错。所以这里24.1.0版本的库被自动替换为了26.0.0-alpha1版本的库
要解决问题,就要找到哪个库使用了26.0.0-alpha1,使用命令gradlew :app:dependencies
查看库的依赖树,发现compile ‘com.mcxiaoke.viewpagerindicator:library:2.4.1’使用了动态版本
解决:
找到了原因,那么解决起来就有头绪了
网上有人说,删除掉compile ‘com.android.support:support-v4:+’,也算是一种方法吧。像上面这种依赖在第三方库中,就需要下面的方法
第一种:
排除依赖中的指定包
- 1
- 2
- 3
第二种:
force强制设置某个模块的版本。
- 1
- 2
- 3
- 4
- 5
或者
com.android.support包名的库版本都是用24.1.0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
第二种
错误信息
gradle 4.+版本才会出现的错误
- 1
主要意思是在compile和runtime 时使用的support库版本不一样
分析
compile 是runtime 的一部分。 例如,假设一个名为app程序使用库foo,而库foo在内部使用库bar。 编译应用程序app只需要foo库,但是运行app时需要foo和bar。 对Gradle compile的配置在其runtime 配置中也是可见的,但相反则不是这样。
原因:
因为某个库的不同版本同时被依赖时,默认使用较新版。
使用命令gradlew :app:dependencies
查看库的依赖树,
在compile 时,看不到库mvp中依赖的support 版本,所以google play 相关的库使用support-v4:24.0.0的版本。下面之所以看不到mvp库中的依赖,是因为在引用第三方库使用了implementation(gradle 4.+版本才出现的新特性。详情可参考这里)
在runtime时,运行了库mvp中,其中依赖的support 版本为support-v4:25.1.0,
所以google play 相关的库使用support的较新版本25.1.0
导致出现了上面的报错
解决
解决方法和上面是一样的