KpSt
KpSt

Reputation: 43

Duplicate jar entry after upgrade to gradle 3.2.0/3.2.1

I am using gradle version 3.1.2 with build tools version 27.0.3. When I build APK with proguard, after upgrade to gradle version 3.2.0/3.2.1, then will get the error:

Duplicate jar entry [com/rometools/utils/Alternatives.class].

And the part of error message:

org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95)   ... 30 more Caused by: java.io.IOException: Can't write [C:\PATH\AppName\app\build\intermediates\transforms\proguard\debug\0.jar] (Can't read [C:\PATH\AppName\app\build\intermediates\transforms\FirebasePerformancePlugin\debug\36(;;;;;;;**.class)] (Can't read [com] (Can't read [rometools] (Can't read [utils] (Can't read [Alternatives.class] (Duplicate jar entry [com/rometools/utils/Alternatives.class]))))))   at proguard.OutputWriter.writeOutput(OutputWriter.java:202)     at proguard.OutputWriter.execute(OutputWriter.java:89)  at proguard.ProGuard.writeOutput(ProGuard.java:515)     at proguard.ProGuard.execute(ProGuard.java:210)     at com.android.build.gradle.internal.transforms.BaseProguardAction.runProguard(BaseProguardAction.java:64)  at com.android.build.gradle.internal.transforms.ProGuardTransform.doMinification(ProGuardTransform.java:262)    at com.android.build.gradle.internal.transforms.ProGuardTransform.access$000(ProGuardTransform.java:65)     at com.android.build.gradle.internal.transforms.ProGuardTransform$1.run(ProGuardTransform.java:176)     at com.android.builder.tasks.Job.runTask(Job.java:47)   at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41)   at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:282) Caused by: java.io.IOException: Can't read [C:\PATH\AppName\app\build\intermediates\transforms\FirebasePerformancePlugin\debug\36(;;;;;;;**.class)] (Can't read [com] (Can't read [rometools] (Can't read [utils] (Can't read [Alternatives.class] (Duplicate jar entry [com/rometools/utils/Alternatives.class])))))    at proguard.InputReader.readInput(InputReader.java:214)     at proguard.InputReader.readInput(InputReader.java:184)     at proguard.OutputWriter.writeOutput(OutputWriter.java:191)     ... 10 more Caused by: java.io.IOException: Can't read [com] (Can't read [rometools] (Can't read [utils] (Can't read [Alternatives.class] (Duplicate jar entry [com/rometools/utils/Alternatives.class]))))     at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:81)   at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)     at proguard.InputReader.readInput(InputReader.java:210)     ... 12 more Caused by: java.io.IOException: Can't read [rometools] (Can't read [utils] (Can't read [Alternatives.class] (Duplicate jar entry [com/rometools/utils/Alternatives.class])))    at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:81)   at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:77)   ... 14 more Caused by: java.io.IOException: Can't read [utils] (Can't read [Alternatives.class] (Duplicate jar entry [com/rometools/utils/Alternatives.class]))     at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:81)   at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:77)   ... 15 more Caused by: java.io.IOException: Can't read [Alternatives.class] (Duplicate jar entry [com/rometools/utils/Alternatives.class])  at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:81)   at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:77)   ... 16 more Caused by: java.io.IOException: Duplicate jar entry [com/rometools/utils/Alternatives.class]    at proguard.io.ZipOutput.createOutputStream(ZipOutput.java:155)     at proguard.io.ZipOutput.createOutputStream(ZipOutput.java:120)     at proguard.io.JarWriter.createOutputStream(JarWriter.java:137)     at proguard.io.FilteredDataEntryWriter.createOutputStream(FilteredDataEntryWriter.java:111)

According the error message, the error related to two libraries: firebase and rome. Therefore I tried to remove one of the libraries and build APK with proguard again, then will build successfully without any error. For testing the error whether related to proguard, I tried build without proguard, that will build successfully also.

The error occur when build with proguard, that using firebase and rome libraries at the same time, and using gradle version 3.2.0/3.2.1.

I have no clue to solve the problem. Did anyone know how to solve the problem? Thank you in advance.

Update:

build.gradle of :app

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'

android {
    compileSdkVersion 27
    buildToolsVersion '28.0.3'
    defaultConfig {
        applicationId "testing.testing.testproguard"
        minSdkVersion 16
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        multiDexEnabled true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    buildTypes {
        debug {
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguardTest-rules.pro'
        }
        release {
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguardTest-rules.pro'
        }
    }

    // Using gradle plugin 3 you need to specify flavor dimensions.
    flavorDimensions 'buildType'

    // Always show the result of every unit test, even if it passes.
    testOptions.unitTests.all {
        testLogging {
            events 'passed', 'skipped', 'failed', 'standardOut', 'standardError'
        }
    }

    packagingOptions {
        exclude 'META-INF/rxjava.properties'

        pickFirst 'rome.properties'
        pickFirst 'rome-utils-*.jar'
    }
    sourceSets { main { java.srcDirs = ['src/main/java', 'src/mock/java/'] } }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    // For support firebase on API 16-20(android 4.1-4.4.4)
    implementation "com.android.support:multidex:$rootProject.multidexVersion"

    // Firebase
    implementation "com.google.firebase:firebase-core:$rootProject.firebaseVersion"
    implementation "com.google.firebase:firebase-ads:$rootProject.firebaseAdsVersion"
    implementation "com.google.firebase:firebase-perf:$rootProject.firebasePerfVersion"

    // jdom (for support ROME)
    implementation "org.jdom:jdom2:$rootProject.jdomVersion"

    // slf4j (for support ROME)
    implementation "org.slf4j:slf4j-api:$rootProject.slf4jVersion"
    implementation "org.slf4j:slf4j-nop:$rootProject.slf4jVersion"

    // ROME
    implementation "com.rometools:rome:$rootProject.romeVersion"

}

// Firebase SDKs
apply plugin: 'com.google.gms.google-services'

build.gradle of Project

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()

        // for Firebase SDK
        maven { url "https://maven.google.com" } // necessary for Android API 26
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'

        // for Google Analytics
        classpath 'com.google.gms:google-services:4.2.0'

        // for Firebase Performance Monitoring
        classpath 'com.google.firebase:firebase-plugins:1.1.5'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        jcenter {
            url "https://jcenter.bintray.com/"
        }
        maven  {
            url "https://repo1.maven.org/maven2"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}



ext {
    // Sdk and tools
    minSdkVersion = 16
    targetSdkVersion = 26
    compileSdkVersion = 26
    buildToolsVersion = '28.0.3'

    // App dependencies
    multidexVersion = '1.0.3'
    firebaseVersion = '16.0.6'
    firebaseAdsVersion = '17.1.2'
    firebasePerfVersion = '16.2.2'
    jdomVersion = '2.0.6'
    slf4jVersion = '1.7.25'
    romeVersion = '1.12.0'
}

proguard-rules.pro file

-keep class android.support.v4.widget.DrawerLayout { *; }
-keep class android.support.test.espresso.IdlingResource { *; }
-keep class com.google.common.base.Preconditions { *; }

# For Guava:
-dontwarn javax.annotation.**
-dontwarn javax.inject.**
-dontwarn sun.misc.Unsafe

# Proguard rules that are applied to your test apk/code.
-ignorewarnings

# streamsupport
-keep class java8.** { *; }
-dontwarn java8.**

# rome
-dontwarn com.rometools.rome.**
-keep class com.rometools.** { *; }
-keep interface com.rometools.** { *; }

-repackageclasses
-allowaccessmodification

Upvotes: 2

Views: 725

Answers (0)

Related Questions