【问题标题】:Duplicate zip entry [okhttp-3.10.0.jar:okhttp3/HttpUrl$Builder$ParseResult.class]重复的 zip 条目 [okhttp-3.10.0.jar:okhttp3/HttpUrl$Builder$ParseResult.class]
【发布时间】:2018-04-11 06:10:38
【问题描述】:

这里我将第三方库volley转移到retrofit。实际上我在很多项目中都使用过retrofit,但这也是一些来自google的独特问题和解决方案。

Here 应用构建 Gradle

apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
    applicationId "com.xyz"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 31
    versionName "7"
    vectorDrawables.useSupportLibrary = true
    multiDexEnabled="true"
}

buildTypes {
    debug {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

dataBinding {
    enabled = true
}
}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.googlecode.java-diff-utils:diffutils:1.2.1'
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'android.arch.persistence.room:runtime:1.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.android.support:multidex:1.0.0'
}

这里项目构建 Gradle

buildscript {
  repositories {
    jcenter()
    google()


}
dependencies {
    classpath 'com.android.tools.build:gradle:3.1.1'

}
}

allprojects {
repositories {
    jcenter()
    maven { url 'https://maven.google.com/' }
    maven { url "https://jitpack.io" }
    google()
 }
}

这是一个改造的 ApiClient 代码:

public class ApiClient implements AppConstants{

public static final String BASE_URL = APP_URL1;
private static Retrofit retrofit = null;

public static Retrofit getClient() {
    OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
            .connectTimeout(1, TimeUnit.MINUTES)
            .readTimeout(1, TimeUnit.MINUTES)
            .writeTimeout(1, TimeUnit.MINUTES)
            .build();
    if (retrofit == null) {
        Gson gson = new GsonBuilder().serializeNulls().create();
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .client(okHttpClient)
                .build();
    }
    return retrofit;
}
}

这是一个错误:

原因:java.io.IOException: Can't write [E:\A\app\build\intermediates\transforms\proguard\debug\0.jar] (Can't read [C:\Users\Abhi .gradle\caches\modules-2\files-2.1\com.squareup.okhttp3\okhttp\3.10.0\7ef0f1d95bf4c0b3ba30bbae25e0e562b05cf75e\okhttp-3.10.0.jar(;;;;;;.class)] (重复的 zip 条目 [ okhttp-3.10.0.jar:okhttp3/HttpUrl$Builder$ParseResult.class]))

【问题讨论】:

  • 你添加了 multiDexEnabled=true 吗?
  • 是的,我添加了 multiDexEnabled=true
  • 实际上我已经修改并在这里显示了一些 gradle 依赖项。
  • 也许尝试删除 C:\Users\Abhi.gradle\caches\modules-2\files-2.1 的 gradle 缓存,下次您再次构建项目时,gradle 将下载所有需要的 jar。通过这种方式,您可以排除本地存储的所需依赖项副本的任何问题。
  • 也许看到here?我请求的输出不是来自gradlew dependencies,而是来自gradlew <app>:dependencies,其中<app> 是您的应用程序项目的名称。

标签: java android retrofit2 proguard okhttp


【解决方案1】:

感谢其他人的解决方案,但特别感谢@dpr 这是关于我的问题的解决方案。我们可以在

中看到所有依赖项

选择视图 > 工具窗口 > Gradle(或点击工具窗口栏中的Gradle)。

展开 AppName > Tasks > android 并双击 androidDependencies。 Gradle 执行任务后,应该会打开 Run 窗口以显示

我们可以得到所有的依赖:

+--- android.arch.persistence.room:runtime:1.0.0@aar
+--- com.squareup.retrofit2:retrofit:2.4.0@jar
+--- com.android.support:transition:27.1.1@aar
+--- com.android.support:support-fragment:27.1.1@aar
+--- com.android.support:animated-vector-drawable:27.1.1@aar
+--- com.android.support:support-core-ui:27.1.1@aar
+--- com.android.support:support-media-compat:27.1.1@aar
+--- com.android.support:support-core-utils:27.1.1@aar
+--- com.android.support:support-vector-drawable:27.1.1@aar
+--- com.android.support:support-compat:27.1.1@aar
+--- android.arch.lifecycle:runtime:1.1.0@aar
+--- android.arch.persistence.room:common:1.0.0@jar
+--- android.arch.persistence:db-framework:1.0.0@aar
+--- android.arch.persistence:db:1.0.0@aar
+--- android.arch.lifecycle:livedata-core:1.1.0@aar
+--- android.arch.core:runtime:1.1.0@aar
+--- android.arch.core:common:1.1.0@jar
+--- android.arch.lifecycle:common:1.1.0@jar
+--- com.android.support:support-annotations:27.1.1@jar
+--- com.android.support.constraint:constraint-layout-solver:1.0.2@jar
+--- com.squareup.picasso:picasso:2.5.2@jar
+--- com.squareup.okhttp3:okhttp:3.10.0@jar
+--- android.arch.lifecycle:viewmodel:1.1.0@aar
\--- com.squareup.okio:okio:1.14.0@jar

除了 gradle 之外,它还会在重复的文件夹中显示您,以便我们可以查找和删除并解决此问题。

【讨论】:

    【解决方案2】:

    试试这个

    defaultConfig {
        multiDexEnabled true
    }
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
    • 我已经将此代码放在 gradle 文件中仍然无法正常工作同样的错误重复 zip
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    相关资源
    最近更新 更多