有关android依赖传递冲突的解决方案
2017-05-24 16:09
302 查看
解释下概念
依赖传递:通常情况下,依赖本身也有依赖。比如Hibernate核心库就依赖一些其他类库。当Gradle测试你工程的时候,它也需要找到这些间接依赖。我们称之为“传递依赖”( transitive dependencies).
module,group, version(解释仅限后面用到的范围):通过例子解释更好理解。
这是我们android中常见的写法。其实这是简写。那不简写是啥样呢?
这下明白了这三个字段的意义了吧。
言归正传,我们看下项目中遇到的问题:比如我们项目中使用了appcompat-V7:22.3.1 .然后我们要用一个三方开源库aa.bb.cc:XXX:1.1.1,结果三方开源库依XXX赖了appcompat-V7:25.3.1。这个时候项目默认情况下会使用高版本25.3.1.不巧的是appcompat-V7:25.3.1升级修改了原本22.3.1中的方法名(理论上这个应该前向兼容)。因为项目中使用的22.3.1的api名字被改了,或者不存在了。但是项目又默认依赖上了25.3.1。所以会导致错误。
这个时候需要的解决方式:
当然也有其他解决方式。不过感觉这是最优美,哈哈
依赖传递:通常情况下,依赖本身也有依赖。比如Hibernate核心库就依赖一些其他类库。当Gradle测试你工程的时候,它也需要找到这些间接依赖。我们称之为“传递依赖”( transitive dependencies).
module,group, version(解释仅限后面用到的范围):通过例子解释更好理解。
> dependencies { > compile 'com.android.support:appcompat-v7:25.3.1' }
这是我们android中常见的写法。其实这是简写。那不简写是啥样呢?
dependencies { compile group: 'com.android.support', name: 'appcompat-v7', version: '25.3.1' }
这下明白了这三个字段的意义了吧。
言归正传,我们看下项目中遇到的问题:比如我们项目中使用了appcompat-V7:22.3.1 .然后我们要用一个三方开源库aa.bb.cc:XXX:1.1.1,结果三方开源库依XXX赖了appcompat-V7:25.3.1。这个时候项目默认情况下会使用高版本25.3.1.不巧的是appcompat-V7:25.3.1升级修改了原本22.3.1中的方法名(理论上这个应该前向兼容)。因为项目中使用的22.3.1的api名字被改了,或者不存在了。但是项目又默认依赖上了25.3.1。所以会导致错误。
这个时候需要的解决方式:
dependencies { compile ('aa.bb.cc:XXX:1.1.1',{ exclude group: 'com.android.support', module: 'appcompat-v7' }) }
当然也有其他解决方式。不过感觉这是最优美,哈哈
相关文章推荐
- 有关项目依赖包发生 Manifest Merge 冲突的详细解决方案
- Androidstuio有关导如项目作为依赖以及出现包冲突的解决办法
- 有关项目依赖包发生 Manifest Merge 冲突的详细解决方案
- maven 传递依赖-冲突解决
- Android Eclipse 里面依赖工程无法关联源码解决方案
- Android关于OnTouch 和OnClick同时调用冲突的解决方案
- Android关于OnTouch 和OnClick同时调用冲突的解决方案
- Android ScrollView与ListView,GridView共存冲突解决方案
- maven(android-maven-plugin3.8.0)打包apk无法启动,apklib依赖包的资源索引出错(R文件与主模块冲突)问题解析
- 解决maven【传递依赖】中的版本冲突
- Android关于OnTouch 和OnClick同时调用冲突的解决方案
- android listview 中button 冲突问题,不同情况不同解决方案
- 有关android内存泄露的问题以及解决方案
- 安装软件时依赖冲突的万能解决方案
- 安装软件时依赖冲突的万能解决方案
- Android Eclipse 里面依赖工程无法关联源码解决方案
- 有关 android jelly bean notification(消息传递机制)较ics的变化
- 解决maven传递依赖中的版本冲突
- Android --- ListView 与 子项中滑动冲突解决方案
- 解决maven传递依赖中的版本冲突