Android报错:Error:Execution failed for task ':transformClassesWithJarMergingForProductionDebug

项目在导入

 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'

    }

gradle配置参考文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值