当前位置:   article > 正文

【Gradle】Android Studio中Gradle重复依赖的问题(转载请删除括号里的内容)_android studio 重复依赖

android studio 重复依赖

问题

项目中有个Module需要解析json所以选用了依赖Gson,但是编译时报错如下:

  1. Error:Execution failed for task ':app:transformClassesWithJarMergingForAutoioDebug'.
  2. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/gson/annotations/Expose.class

分析

看到错误中的这个duplicate,第一反应和平常一样,难道是得先清理一下Clean project ? 反复试了几次都不行,上网查才发现是重复依赖Gson库的问题,导致项目中有了两个重复的Expose.class 类。

使用快捷键(Shift + Ctrl + T)查看项目中的Expose.class 类,发现是和passport-1.4.2.jar这个本地jar包冲突了,它也依赖了gson库所以导致了重复依赖。

项目结构

在往下面分析之前,需要先根据项目结构说明一下问题的本质,就是Module

踩过的坑

第一个查到的解决办法是这个Android Studio中如何解决重复依赖导致的app:transformClassesWithJarMergingForDebug,但是他的问题是依赖另外一个库retrofit,她用了下面的办法:

  1. compile ('com.squareup.retrofit2:converter-gson:2.1.0'){
  2. exclude group: 'com.google.code.gson'
  3. }

所以我也尝试仿照他的方法,在我的Speech模块下的build.gradle文件里修改

  1. //注意:下面的方法是错的
  2. dependencies {
  3. compile fileTree(include: '*.jar', dir: 'libs'){ //错的
  4. exclude group: 'com.google.code.gson', module: 'gson'
  5. }
  6. }

报错如下,显然这么写是不对的,对于依赖本地jar文件这么写是不对的:

Error:Could not find method exclude() for arguments [{group=com.google.code.gson, module=gson}] on directory '{include=*.jar, dir=libs}' of type org.gradle.api.internal.file.collections.DefaultConfigurableFileTree.

但是,他们的解决思路是对的,就是想办法屏蔽其中一个Gson库。既然如此,我们可以多尝试各个引入它们的地方。

解决办法

最后试来试去,才发现exclude需要写在App 主Module 的build.gradle文件中才能生效,而且注意 project(‘:Speech’) 外面那层括号:

  1. apply plugin: 'com.android.application' //注意这是主Module
  2. repositories {
  3. mavenCentral()
  4. }
  5. dependencies {
  6. // Module dependency
  7. compile project(':passportSDKLib')
  8. compile (project(':Speech')){
  9. //解决Gson重复依赖问题,与passport-1.4.2.jar有冲突
  10. exclude group: 'com.google.code.gson', module: 'gson'
  11. }
  12. compile project(':Skin')
  13. compile fileTree(include: '*.jar', dir: 'src/main/libs')
  14. }

唉,世界终于清静了。
最后再放一个AndroidStudio中新建一个空项目(Empty Activity)后默认的build.gradle中的解决重复依赖问题的配置

  1. dependencies {
  2. compile fileTree(dir: 'libs', include: ['*.jar'])
  3. //注意这里
  4. androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
  5. exclude group: 'com.android.support', module: 'support-annotations'
  6. })
  7. compile 'com.android.support:appcompat-v7:25.3.1'
  8. compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'
  9. testCompile 'junit:junit:4.12'
  10. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/445093
推荐阅读
相关标签
  

闽ICP备14008679号