support中v4 v7库版本错误,主要会报以下两种错误,下面针对每一种错误进行详解

第一种

错误信息:

先来看两个崩溃信息,如下:

java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorCompatHelper;
java.lang.NoSuchMethodError: No static method wrap(Ljava/lang/Object;)Landroid/support/v4/view/WindowInsetsCompat; in class Landroid/support/v4/view/WindowInsetsCompat; or its super classes (declaration of 'android.support.v4.view.WindowInsetsCompat' appears in /data/app/cn.xuexuan.newui-2/base.apk:classes12.dex)

经过这两次错误的分析,总结出一个规律,凡是出现**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:+’,也算是一种方法吧。像上面这种依赖在第三方库中,就需要下面的方法

第一种:

排除依赖中的指定包

compile ('com.mcxiaoke.viewpagerindicator:library:2.4.1') {exclude group: 'com.android.support'}

第二种:

force强制设置某个模块的版本。

configurations.all {resolutionStrategy {force 'com.android.support:support-v4:24.1.0'}
}

或者

com.android.support包名的库版本都是用24.1.0

configurations.all {resolutionStrategy.eachDependency { DependencyResolveDetails details ->def requested = details.requestedif (requested.group == 'com.android.support') {if (!requested.name.startsWith("multidex")) {details.useVersion '24.1.0'}}}
}

第二种

##错误信息

gradle 4.+版本才会出现的错误

Android dependency 'com.android.support:support-compat' has different version for the compile (25.1.0) and runtime (25.3.0) classpath

主要意思是在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

导致出现了上面的报错

解决

第一种:

解决方法和上面是一样的

第二种:

在lib中使用api依赖第三方库A,这样在module中也可以使用库A里面的相关类

dependencies {api xxxxxx
}

终极解决:

将项目迁移至AndroidX(推荐)
以后的趋势肯定是往AndroidX的方向发展的,官方对这个更新的速度很快,足见其重视性
迁移方法看官方文档即可,比较简单:迁移至AndroidX

参考:
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorCompatHe

Alpha support library version overriding previous support libs versions

All com.android.support libraries must use the exact same version specification

执行代码 loadMoreEnd()报错

Android Support Repo 46.0.0 with Android Studio 2.3

Difference between compile and runtime configurations in Gradle

support库中v4 v7版本冲突错误详解相关推荐

  1. svn冲突问题详解 SVN版本冲突解决详解

    解决版本冲突的命令.在冲突解决之后,需要使用svnresolved来告诉subversion冲突解决,这样才能提交更新.冲突发生时,subversion会在WorkCopy中保存所有的目标文件版本(上 ...

  2. SVN版本冲突解决详解

    版本冲突原因: 假设A.B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns ...

  3. 解决 .net core 中 nuget 包版本冲突问题

    解决 .net core 中 nuget 包版本冲突问题 参考文章: (1)解决 .net core 中 nuget 包版本冲突问题 (2)https://www.cnblogs.com/dudu/p ...

  4. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  5. python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  6. SVN 冲突文件详解

    filename.mine      你更新前的文件,没有冲突标志,只是你最新更改的内容.(如果这个文件不可以合并,.mine文件不会创建,因为它和工作文件相同.) filename.rOLDREV ...

  7. 关于GCC/LLVM编译器中的sanitize选项用处用法详解

    关于GCC/LLVM编译器中的sanitize选项用处用法详解 ​ 编译器中sanitize选项原本来自google的开源C/C+ +工具集sanitizers项目, 包括了AddressSaniti ...

  8. git 主干修改合并到分支_idea+git合并分支解决冲突及详解步骤

    Git分支详解参考: 分支管理组成 1.1.master主干 在版本管理中,代码库应该仅有一个主干.此主干是和当前生产保持一致的,是可用的.稳定的可直接发布的版本,不能再主干上进行任何开发操作.git ...

  9. linux动态库注册函数,Linux动态库函数的详解

    linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: rtld_lazy rtld_now rtld_ ...

最新文章

  1. Python读取.set文件和.locs文件
  2. linux如何将json文件导入到mongo数据库
  3. 特征工程(part4)--特征缩放:tf-idf
  4. 二叉树的最大深度Python解法
  5. HDU 2222 ac自动机模板
  6. VMware vSphere 6.7主机与虚拟机高级管理
  7. mysql timestamp类型比较_MySQL timestamp 类型比较的测试
  8. oracle查询语句子句,Oracle 查询执行顺序
  9. 【Vue】—动态组件
  10. php获取微信生成签名的时间戳,微信开发中access_token,js_ticket,时间戳,签名工具
  11. 知网下载学位论文PDF版本的一个方法
  12. JQuery UI 各框架总结
  13. matlab中simulink无法打开,【转】Simulink打不开的解决办法
  14. Youtube字幕下载转SRT字幕
  15. 中国移动发力5G,月增900万,反超中国电信
  16. linux python优势_来讲讲 Julia胜于Python的5个优势
  17. Flex布局常见父项属性(一)- flex-direction
  18. 洛谷P1018乘积最大题解--zhengjun
  19. 智慧病房解决方案(全)
  20. python数学方程计算_用Python解方程

热门文章

  1. php生成类似appkey,生成appkey和appSecret
  2. 【BIM+GIS】Revit在ArcGIS Pro中的组织方式详解
  3. GO 命令行参数 os.Args
  4. 用html、js、css实现通讯录功能
  5. 算法导论第2章(3) 二分查找 binary search
  6. 我的第一棵树--家谱
  7. Linux- 基础IO
  8. VMware的虚拟网络编辑器,在配置的过程中没有桥接模式!
  9. 使用 DMV 进行监视_监视连接_针对 Azure SQL 数据库和 Azure SQL 托管实例进行手动性能优化
  10. ICPC训练联盟2021寒假冬令营(4)_2021.01.21_笔记