Proguard Exception java.io.IOException:重复的zip条目

时间:2017-07-22 18:59:12

标签: android android-gradle proguard android-proguard android-build

在使用proguard构建应用程序以进行发布时,我收到了此错误。

任务执行失败':app:transformClassesAndResourcesWithProguardForRelease'。

<html ng-app="myApp">
<head>
<script type="text/javascript" src="/angular.min.js"></script>
<script src="/app.js"></script>

<title> Index </title>
</head>  
<body ng-controller="MyController">    
{{vr}}
{{name}}

<button ng-click="f1()">Click me</button>

 </body>
</html>

build.gradle文件:

Warning:Exception while processing task java.io.IOException: Can't write 
[C:\Users\sagar.HP\AndroidStudioProjects\MyApp\app\build\intermediates\
transforms\proguard\release\jars\3\1f\main.jar] (Can't read 
[C:\Users\sagar.HP\.android\build-
cache\bf0ee9d089eb4a68c393\output\jars\classes.jar(;;;;;;**.class)] 
(Duplicate zip entry [com/google/android/gms/internal/bs.class == 
classes.jar:com/google/android/gms/internal/zzas.class]))

Proguard-rules.pro

 android {
    compileSdkVersion 25
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "com.ardent.sys.telugulivetv"
        minSdkVersion 17
        targetSdkVersion 25
        versionCode 12
        versionName "2.3.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

buildTypes {
        release {
            shrinkResources false
            minifyEnabled true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    project.ext { appName = 'Telugu Live TV' }
                    def formattedDate = new Date().format('yyyyMMddHHmmss')
                    def newName = output.outputFile.name
                    newName = newName.replace("app-", "$project.ext.appName-") //"MyAppName" -> I set my app variables in the root project
                    newName = newName.replace("-release", "-release" + formattedDate)
                    //noinspection GroovyAssignabilityCheck
                    output.outputFile = new File(output.outputFile.parent, newName)
                }
            }
        }
    }

    dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile files('libs/YouTubeAndroidPlayerApi.jar')


    compile ('com.adincube.sdk:AdinCube-Java-206ebf:1.+@aar') {
        transitive = true
    }
    compile('com.adincube.sdk:AdinCube-Native-RecyclerView-Extension:1.+') {
        transitive = true
    }
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support:support-v4:25.3.1'

    compile 'com.mcxiaoke.volley:library-aar:1.0.1'

    compile 'com.google.firebase:firebase-crash:11.0.2'
    compile 'com.google.firebase:firebase-core:11.0.2'
    compile 'com.google.firebase:firebase-messaging:11.0.2'

    compile 'com.squareup.picasso:picasso:2.5.2'

    compile 'com.facebook.android:audience-network-sdk:4.+'

    compile 'com.android.support.constraint:constraint-layout:1.0.2'

    compile 'com.google.code.gson:gson:2.8.1'

    testCompile 'junit:junit:4.12'
}


apply plugin: 'com.google.gms.google-services'

我阅读了所有相关问题,但这并没有解决我的问题。请帮我解决这个错误。

1 个答案:

答案 0 :(得分:4)

play-service-ads facebook模块使用的audience-network-sdk与firebase模块使用的模块之间存在冲突。以下将解决它:

compile('com.facebook.android:audience-network-sdk:4.+') {
    exclude module: 'play-services-ads'
}
compile 'com.google.android.gms:play-services-ads:11.0.2'

但在那之后,你又发生了另一场冲突(这次与游戏服务无关):

  

com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:com / facebook / ads / AbstractAdListener.class

这是因为com.adincube.sdk:AdinCube-Java-206ebf包含对com.adincube.partner:facebook的依赖关系,其具有包名com.facebook.ads。我猜它是facebook库的非官方修改包。如果您确定不需要此依赖项,则可以将其排除在外:

compile('com.adincube.sdk:AdinCube-Java-206ebf:1.+@aar') {
    transitive = true
    exclude module: 'facebook'
}

否则请与adincube.com联系,以获取有关将其模块与com.facebook.android:audience-network-sdk

集成的说明