Android Studio:解决重复的类

Aff*_*tus 8 android gradle loopj build.gradle android-gradle-plugin

当我run在Android设备上尝试我的Android应用程序时,gradle控制台报告以下错误:

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/loopj/android/http/AsyncHttpClient$1.class
Run Code Online (Sandbox Code Playgroud)

当我搜索"AsyncHttpClient"类时,我发现它确实存在于两个不同的位置:

/Users/Afflatus/.gradle/caches/modules-2/files-2.1/com.loopj.android/android-async-http/1.4.9/5d171c3cd5343e5997f974561abed21442273fd1/android-async-http-1.4.9-sources.jar!/com/loopj/android/http/AsyncHttpClient.java

/Users/Afflatus/.ideaLibSources/android-async-http-1.4.9-sources.jar!/com/loopj/android/http/AsyncHttpClient.java
Run Code Online (Sandbox Code Playgroud)

第一条路径似乎表明它是一个"缓存"文件......所以我试过了invalidating & restarting my cache,但是在gradle重建之后这两个文件仍然存在,我尝试run了应用程序.我已经在备用帖子中看到它可以通过删除其中一个文件来解决...所以我去了缓存位置并删除了"1.4.9"文件夹中找到的所有文件...在重新打开Android Studio后不幸,一个新的缓存文件被创建,我得到相同的错误.

其他帖子(这里,这里,这里这里)建议如果我将"./gradlew clean"添加到根目录,它将仅为运行重建gradle(据我所知).所以我也尝试过这样做:

在此输入图像描述

这使我的应用程序的文件夹看起来像这样:

在此输入图像描述

但不幸的是,这并没有帮助我仍然得到同样的错误.我究竟做错了什么?我该怎么办?

小智 30

我将此行添加到我的gradle.properties文件中并且我的应用程序运行了

android.enableJetifier=true


Den*_*nko 8

有时,重复类异常意味着您的依赖项之一隐式使用了您也在项目中使用的某个库的较旧或较新(带有 +)版本,

要解决此问题,您可以将这样的代码块(将您的库版本放在 之后'force')添加到您的build.gradle文件(模块:应用程序)中:

configurations {
   all {
      resolutionStrategy {
          // do not upgrade above 3.12.0 to support API < 21 while server uses
          // COMPATIBLE_TLS, or okhttp3 is used in project
          force 'com.squareup.okhttp3:okhttp:3.12.0'
          force 'com.squareup.okhttp3:logging-interceptor:3.12.0'
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

您还可以从您的依赖项中排除某些组。对于单个依赖项,您可以这样写:

dependencies {

    // example
    implementation('log4j:log4j:1.2.15') {
        exclude group: 'javax.jms', module: 'jms'
    }
}
Run Code Online (Sandbox Code Playgroud)

经测试可在带有 Gradle 插件版本3.4.2和 Gradle 版本的Android Studio 上工作5.4.1。学分来自 gradle org 讨论组的 Dimitar Dimitrov 和 Schalk Cronjé


Max*_*Max 6

这是因为您在libs文件夹中两次添加了一些库,所以当文件夹中有多个版本的同一库时,有时可能会发生这种情况libs。检查它并删除任何重复的jar文件。

第二个选择可能是您还添加了依赖项,gradle.build并且在libs文件夹中也有jar 。

因此,请检查两个地方并删除重复的条目,然后清理并APK重新构建。

希望能帮助到你

  • libs文件夹的位置在哪里?项目的根源? (3认同)
  • 它是 ProjectFolder/app/libs (2认同)

归档时间:

查看次数:

19407 次

最近记录:

6 年,5 月 前