项目在导入
compile ('com.android.support:support-vector-drawable:26.0.0-alpha1')
之后出现了
Error:Execution failed for task ':transformClassesWithJarMergingForProductionDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/UiThread.class
可以看出是在导入新的依赖的时候,重复的导入了android/support/annotation/UiThread.class
资源,那么怎么去解决呢
1.首先采用gradle的exclude放语法剔除重复的类
compile ('com.android.support:support-vector-drawable:26.0.0-alpha1') {
exclude group: 'support.annotations'
}
但是好像不管用照样说资源重复,于是就查资料写了更苛刻的写法问题解决
compile ('com.android.support:support-vector-drawable:26.0.0-alpha1') {
// 冲突时优先使用该版本
force = true
exclude group: 'support.annotations'
transitive = false
}
那么都是什么意思呢?
force
强制使用当前所依赖的版本指定force = true
属性可以冲突时优先使用该版本进行解决
全局配置强制使用某个版本的依赖来解决依赖冲突中出现的依赖
configurations.all {
resolutionStrategy {
force 'com.android.support:support-vector-drawable:26.0.0-alpha1'
}
}
transitive 传递依赖
简单解释就是当远程依赖A的时候。其实A中还依赖这B,C等等,当我们项目中远程依赖了A,那么B和C自然也就依赖到项目中了。
如果要关闭A的这种传递依赖怎么做呢
compile("A") {
transitive = false
}
怎么全局关闭依赖传递呢?
configurations.all {
transitive = false
}
exclude 排除依赖
有些时候你可能需要排除一些传递性依赖中的某个模块,此时便不能靠单纯的关闭依赖传递特性来解决了
compile ('com.android.support:support-vector-drawable:26.0.0-alpha1') {
exclude group: 'support.annotations'
}