Build in debug mode, crash in release - ZipException double write

I am updating the application from 2.3 to Nougat (SDK 25). When I add com.android.support:appcompat-v7:25.0.0 to support ActivityCompat.requestPermissions . When I run this in debug mode, the application works without problems, but working with ./gradlew assembleDebug causes the following error:

 Error:Execution failed for task ':transformClassesWithJarMergingForDebug'. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/v4/hardware/display/DisplayManagerCompat.class 

When I run this in debug mode, the application builds without problems, however, when I try the Build APK , I get the error above.

Is there a way to track duplicate package? I ran the following:

 ./gradlew -q dependencies :dependencies --configuration compile ------------------------------------------------------------ Root project ------------------------------------------------------------ compile - Classpath for compiling the main sources. +--- com.android.support:multidex:1.0.1 +--- com.android.support:appcompat-v7:25.0.0 | +--- com.android.support:support-vector-drawable:25.0.0 | | \--- com.android.support:support-compat:25.0.0 | | \--- com.android.support:support-annotations:25.0.0 | \--- com.android.support:animated-vector-drawable:25.0.0 | \--- com.android.support:support-vector-drawable:25.0.0 (*) +--- project :deps:android-map-utils:library | \--- project :deps:google-maps-m4b \--- project :deps:google-play-services (*) - dependencies omitted (listed previously) 

Here is my build.gradle

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.2' } } apply plugin: 'com.android.application' dependencies { compile 'com.android.support:multidex:1.0.1' compile 'com.android.support:appcompat-v7:25.0.0' compile fileTree(include: '*.jar', dir: 'libs') compile fileTree(include: '*.jar', dir: 'lib') compile project(':deps:google-maps-m4b') compile project(':deps:android-map-utils:library') compile project(':deps:google-play-services') } android { compileSdkVersion 24 buildToolsVersion '25.0.0' packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/license.txt' exclude 'META-INF/LGPL2.1' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/notice.txt' } defaultConfig { // Already hit dex limit multiDexEnabled true dexOptions { javaMaxHeapSize "4g" } } lintOptions { abortOnError false } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } } allprojects { repositories { jcenter() } } 

Files in libs : armeabi/libcryptowrapper.so Files in lib :

 ClientCertUtil.jar apache-mime4j-0.6.jar commons-codec-1.6.jar commons-io-2.4.jar commons-logging-1.1.3.jar gcm.jar httpclient-4.3.4.jar httpclientandroidlib-1.2.1.jar httpcore-4.3.jar httpmime-4.3.1.jar javarosa.jar joda-time-2.0.jar kxml2-2.3.0.jar mgrs.jar opencsv-2.3.jar regexp-me.jar zip4j_1.3.2.jar 

When adding exclude module: 'support-v4' to appcompat-v7 , the assembly fails and the debug log is displayed, I can’t load the main activity using index out of bound, length: 0, index: 3 :

 Error:warning: Ignoring InnerClasses attribute for an anonymous inner class Error:(net.lingala.zip4j.unzip.Unzip$1) that doesn't come with an Error:associated EnclosingMethod attribute. This class was probably produced by a Error:compiler that did not target the modern .class file format. The recommended Error:solution is to recompile the class from source, using an up-to-date compiler Error:and without specifying any "-target" type options. The consequence of ignoring Error:this warning is that reflective operations on this class will incorrectly Error:indicate that it is *not* an inner class. 

Launch

 ./gradlew -q projects ------------------------------------------------------------ Root project ------------------------------------------------------------ Root project 'opendatakit-collect' \--- Project ':deps' +--- Project ':deps:android-map-utils' | \--- Project ':deps:android-map-utils:library' +--- Project ':deps:google-maps-m4b' \--- Project ':deps:google-play-services' 

Running ./gradlew :dependencies since I don't have a project name:

 Incremental java compilation is an incubating feature. :dependencies ------------------------------------------------------------ Root project ------------------------------------------------------------ _debugAndroidTestAnnotationProcessor - ## Internal use, do not manually configure ## No dependencies _debugAndroidTestApk - ## Internal use, do not manually configure ## \--- com.android.support:multidex-instrumentation:1.0.1 \--- com.android.support:multidex:1.0.1 _debugAndroidTestCompile - ## Internal use, do not manually configure ## \--- com.android.support:multidex-instrumentation:1.0.1 \--- com.android.support:multidex:1.0.1 _debugAnnotationProcessor - ## Internal use, do not manually configure ## No dependencies _debugApk - ## Internal use, do not manually configure ## +--- com.android.support:multidex:1.0.1 +--- com.android.support:appcompat-v7:25.0.0 | +--- com.android.support:support-vector-drawable:25.0.0 | | \--- com.android.support:support-compat:25.0.0 | | \--- com.android.support:support-annotations:25.0.0 | \--- com.android.support:animated-vector-drawable:25.0.0 | \--- com.android.support:support-vector-drawable:25.0.0 (*) +--- project :deps:google-maps-m4b +--- project :deps:android-map-utils:library | \--- project :deps:google-maps-m4b \--- project :deps:google-play-services _debugCompile - ## Internal use, do not manually configure ## +--- com.android.support:multidex:1.0.1 +--- com.android.support:appcompat-v7:25.0.0 | +--- com.android.support:support-vector-drawable:25.0.0 | | \--- com.android.support:support-compat:25.0.0 | | \--- com.android.support:support-annotations:25.0.0 | \--- com.android.support:animated-vector-drawable:25.0.0 | \--- com.android.support:support-vector-drawable:25.0.0 (*) +--- project :deps:google-maps-m4b +--- project :deps:android-map-utils:library | \--- project :deps:google-maps-m4b \--- project :deps:google-play-services _debugUnitTestAnnotationProcessor - ## Internal use, do not manually configure ## No dependencies _debugUnitTestApk - ## Internal use, do not manually configure ## No dependencies _debugUnitTestCompile - ## Internal use, do not manually configure ## No dependencies _releaseAnnotationProcessor - ## Internal use, do not manually configure ## No dependencies _releaseApk - ## Internal use, do not manually configure ## +--- com.android.support:multidex:1.0.1 +--- com.android.support:appcompat-v7:25.0.0 | +--- com.android.support:support-vector-drawable:25.0.0 | | \--- com.android.support:support-compat:25.0.0 | | \--- com.android.support:support-annotations:25.0.0 | \--- com.android.support:animated-vector-drawable:25.0.0 | \--- com.android.support:support-vector-drawable:25.0.0 (*) +--- project :deps:google-maps-m4b +--- project :deps:android-map-utils:library | \--- project :deps:google-maps-m4b \--- project :deps:google-play-services _releaseCompile - ## Internal use, do not manually configure ## +--- com.android.support:multidex:1.0.1 +--- com.android.support:appcompat-v7:25.0.0 | +--- com.android.support:support-vector-drawable:25.0.0 | | \--- com.android.support:support-compat:25.0.0 | | \--- com.android.support:support-annotations:25.0.0 | \--- com.android.support:animated-vector-drawable:25.0.0 | \--- com.android.support:support-vector-drawable:25.0.0 (*) +--- project :deps:google-maps-m4b +--- project :deps:android-map-utils:library | \--- project :deps:google-maps-m4b \--- project :deps:google-play-services _releaseUnitTestAnnotationProcessor - ## Internal use, do not manually configure ## No dependencies _releaseUnitTestApk - ## Internal use, do not manually configure ## No dependencies _releaseUnitTestCompile - ## Internal use, do not manually configure ## No dependencies androidJacocoAgent - The Jacoco agent to use to get coverage data. \--- org.jacoco:org.jacoco.agent:0.7.5.201505241946 androidJacocoAnt - The Jacoco ant tasks to use to get execute Gradle tasks. \--- org.jacoco:org.jacoco.ant:0.7.5.201505241946 +--- org.jacoco:org.jacoco.core:0.7.5.201505241946 | \--- org.ow2.asm:asm-debug-all:5.0.1 +--- org.jacoco:org.jacoco.report:0.7.5.201505241946 | +--- org.jacoco:org.jacoco.core:0.7.5.201505241946 (*) | \--- org.ow2.asm:asm-debug-all:5.0.1 \--- org.jacoco:org.jacoco.agent:0.7.5.201505241946 androidTestAnnotationProcessor - Classpath for the annotation processor for 'androidTest'. No dependencies androidTestApk - Classpath packaged with the compiled 'androidTest' classes. No dependencies androidTestCompile - Classpath for compiling the androidTest sources. No dependencies androidTestProvided - Classpath for only compiling the androidTest sources. No dependencies androidTestWearApp - Link to a wear app to embed for object 'androidTest'. No dependencies annotationProcessor - Classpath for the annotation processor for 'main'. No dependencies apk - Classpath packaged with the compiled 'main' classes. No dependencies archives - Configuration for archive artifacts. No dependencies compile - Classpath for compiling the main sources. +--- com.android.support:multidex:1.0.1 +--- com.android.support:appcompat-v7:25.0.0 | +--- com.android.support:support-vector-drawable:25.0.0 | | \--- com.android.support:support-compat:25.0.0 | | \--- com.android.support:support-annotations:25.0.0 | \--- com.android.support:animated-vector-drawable:25.0.0 | \--- com.android.support:support-vector-drawable:25.0.0 (*) +--- project :deps:google-maps-m4b +--- project :deps:android-map-utils:library | \--- project :deps:google-maps-m4b \--- project :deps:google-play-services debugAnnotationProcessor - Classpath for the annotation processor for 'debug'. No dependencies debugApk - Classpath packaged with the compiled 'debug' classes. No dependencies debugCompile - Classpath for compiling the debug sources. No dependencies debugProvided - Classpath for only compiling the debug sources. No dependencies debugWearApp - Link to a wear app to embed for object 'debug'. No dependencies default - Configuration for default artifacts. No dependencies default-mapping - Configuration for default mapping artifacts. No dependencies default-metadata - Metadata for the produced APKs. No dependencies instrumentTestAnnotationProcessor - Classpath for the annotation processor for 'instrumentTest'. No dependencies instrumentTestApk - Classpath packaged with the compiled 'instrumentTest' classes. No dependencies instrumentTestCompile - Classpath for compiling the instrumentTest sources. No dependencies instrumentTestProvided - Classpath for only compiling the instrumentTest sources. No dependencies instrumentTestWearApp - Link to a wear app to embed for object 'instrumentTest'. No dependencies provided - Classpath for only compiling the main sources. No dependencies releaseAnnotationProcessor - Classpath for the annotation processor for 'release'. No dependencies releaseApk - Classpath packaged with the compiled 'release' classes. No dependencies releaseCompile - Classpath for compiling the release sources. No dependencies releaseProvided - Classpath for only compiling the release sources. No dependencies releaseWearApp - Link to a wear app to embed for object 'release'. No dependencies testAnnotationProcessor - Classpath for the annotation processor for 'test'. No dependencies testApk - Classpath packaged with the compiled 'test' classes. No dependencies testCompile - Classpath for compiling the test sources. No dependencies testDebugAnnotationProcessor - Classpath for the annotation processor for 'testDebug'. No dependencies testDebugApk - Classpath packaged with the compiled 'testDebug' classes. No dependencies testDebugCompile - Classpath for compiling the testDebug sources. No dependencies testDebugProvided - Classpath for only compiling the testDebug sources. No dependencies testDebugWearApp - Link to a wear app to embed for object 'testDebug'. No dependencies testProvided - Classpath for only compiling the test sources. No dependencies testReleaseAnnotationProcessor - Classpath for the annotation processor for 'testRelease'. No dependencies testReleaseApk - Classpath packaged with the compiled 'testRelease' classes. No dependencies testReleaseCompile - Classpath for compiling the testRelease sources. No dependencies testReleaseProvided - Classpath for only compiling the testRelease sources. No dependencies testReleaseWearApp - Link to a wear app to embed for object 'testRelease'. No dependencies testWearApp - Link to a wear app to embed for object 'test'. No dependencies wearApp - Link to a wear app to embed for object 'main'. No dependencies BUILD SUCCESSFUL Total time: 13.053 secs This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html 
+8
android android gradle
source share
4 answers

Thanks for editing the question. Since there are so many jar libs, it is almost impossible for us to reproduce the error.

So here is what to try. Since you said that the error occurred after adding the com.android.support:appcompat-v7:25.0.0 lib library, follow these steps:

 compile (compile 'com.android.support:appcompat-v7:25.0.0') { exclude module: 'support-v4' } 

See if it works or if the error changes

EDIT:

You have ./gradlew -q dependencies :dependencies --configuration compile following command: ./gradlew -q dependencies :dependencies --configuration compile

You can run this command on your Android Studio terminal and post debugApk and releaseApk dependencies in your question.

Command (change the application to your module name if it is different):

 ./gradlew app:dependencies 
0
source share

I assume that some kind of dependency you added has appcompat-v4 inside it, which causes an error, not quite sure

Possible solutions:

  • Try removing zip4j_1.3.2.jar and adding compile 'com.android.support:appcompat-v7:24.2.0' again

  • one suggested by @ th3pat3l: add

compile (compile 'com.android.support:appcompat-v7:25.0.0') { exclude module: 'support-v4' }

Tip for Api versions> 14:

  • Avoid using jar because they are packaged and you are unlikely to be able to change them, instead try using them in the build.gradle file of the project by adding a simple compile ''xxx.xx.xx
0
source share

I also ran into this problem when I import an old eclipse project. Some old dependency arose in the project as a jar file.
The first way to just delete

 compile fileTree(dir: 'libs', include: '*.jar') 

in gradle file

and add the dependency in the gradle file.

This works for me ..

The second way You probably already fixed this, but so that it does not go unanswered, try adding this to your build.gradle:

 configurations { all*.exclude group: 'com.android.support', module: 'support-v4' } 
0
source share

Try to clean the project and rebuild it from Android Studio

0
source share

All Articles