Android - Proguard doppelte zip-Eintrag Fehler - Android Support-Bibliothek

Ich versuche, mit Proguard in einem android Anwendung, die verwendet android-library-Projekten.
Meine core-android-Projekt hängt von zwei android-library-Projekten bereit. Der Kern und die Bibliothek Projekte haben Abhängigkeiten auf android support library (in meinem Fall: android-support-v4.jar).
Wenn ich versuche, zu verschleiern, es mit ProGuard, dann bekomme ich immer die folgende Fehlermeldung (Wenn die Proguarg deaktiviert ist, in der Gradle-Skript, dann ist die Zusammenstellung gut funktioniert.):

:MYANDROIDPROJECT:proguardDemoRelease FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':MYANDROIDPROJECT:proguardDemoRelease'.
> java.io.IOException: Can't write [MYANDROIDPROJECT_PATH\build\intermediates\classes-proguard\demo\release\classes.jar] (Can't read [MYANDROIDPROJECT_PATH\build\intermediates\exploded-aar\com.android.support\support-v4\21.0.3\classes.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [classes.jar:android/support/v4/graphics/drawable/DrawableCompat$HoneycombDrawableImpl.class]))

Den Gradle-build-Skript für meinen core Projekt:

buildscript {
    repositories {
        mavenCentral()
    }

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

apply plugin: 'android'

android {
    buildToolsVersion "19.1.0"
    compileSdkVersion 19

    lintOptions {
        abortOnError false
    }

    signingConfigs {
        localks {
            storeFile file("keystore/keystore")
            storePassword "xx"
            keyAlias "xx"
            keyPassword "xx"
        }
    }

    buildTypes {
        debug {
            debuggable true
            runProguard false       
            zipAlign true
            signingConfig signingConfigs.localks
        }

        release {
            debuggable false   
            zipAlign true
            proguardFile 'proguard.txt'
            runProguard true        
            signingConfig signingConfigs.localks
        }
    }

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        ndk{
            moduleName "S3DClient"
            abiFilter "armeabi-v7a"
            stl "gnustl_static"
        }
    }

    sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java']
            resources.srcDirs = ['src/main/java']
            aidl.srcDirs = ['src/main/java']
            renderscript.srcDirs = ['src/main/java']
            res.srcDirs = ['src/main/res']
            assets.srcDirs = ['src/main/assets']
            jni.srcDirs = []
        }
        paid {
            manifest.srcFile 'src/paid/AndroidManifest.xml'
            java.srcDirs = ['src/paid/java']
            res.srcDirs = ['src/paid/res']

            jni.srcDirs = []
        }
        demo {
            manifest.srcFile 'src/demo/AndroidManifest.xml'
            java.srcDirs = ['src/demo/java']
            res.srcDirs = ['src/demo/res']

            jni.srcDirs = []
        }
    }

    productFlavors {
        paid {
            applicationId = "hu.myprojectpackage1"
        }
        demo {
            applicationId = "hu.myprojectpackage2"
        }
    }
}

dependencies {
    compile files('src/main/libs/sqliteassethelper-2.0.1.jar',
                  'src/main/libs/S3DXAndroidTools.jar',
                  'src/main/libs/roboguice-2.0.jar',
                  'src/main/libs/open-javageom.jar',
                  'src/main/libs/openawt.geom.jar',
                  'src/main/libs/libGoogleAnalyticsServices.jar',
                  'src/main/libs/javax.inject-1.jar',
                  'src/main/libs/guice-3.0-no_aop.jar',
                  'src/main/libs/commons-lang3-3.1.jar',
                  'src/main/libs/bugsense-3.6.jar')
    compile fileTree(dir: "$buildDir/native-libs", include: '*.jar')

    compile 'com.android.support:support-v4:21.0.+'

    compile project(":lib/SlidingLayer")

    compile project(':lib/BlutoothCommunicationHandler') 
    paidCompile project(':lib/Licencing')
}

Den Gradle-build-Skript für eine von der Bibliothek Projekte:

apply plugin: 'android-library'

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.2+'
    }
}
dependencies {
   compile "com.android.support:support-v4:19.0.+"
}

android {
    buildToolsVersion "19.1.0"
    compileSdkVersion 19

    defaultConfig {
        minSdkVersion 4
        targetSdkVersion 18
    }
    dexOptions {
        preDexLibraries = false
    }

    lintOptions {
        abortOnError false
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
        }
    }
}

Den (relevanten Teil -) ProGuard config ist:

-libraryjars src/main/libs/android-support-v4.jar

-keep class android.** { *; }
-keep class android.support** { *; }

-dontnote
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-dontwarn org.openawt.**
-dontwarn android.support.**

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose

-assumenosideeffects class android.util.Log {
    public static *** e(...);
    public static *** w(...);
    public static *** wtf(...);
    public static *** d(...);
    public static *** v(...);
}
-keepattributes Signature
-keepattributes *Annotation*
Wenn Sie gehen, um Gradle ändern Sie diese Abhängigkeiten zu maven depdencies. Dann nutzen Sie android.packagingOptions ausschließen die Dateien, die Probleme verursachen.
Danke für die schnelle commet. Können Sie bitte beschreiben Sie es tiefer, wie es zu implementieren, in diesem Fall?
Was ist der status?

InformationsquelleAutor BertZ | 2015-02-13

Schreibe einen Kommentar