Error DuplicateFileException al crear APK de Android

Estoy usando Android Studio 2.0 en Windows 7. Al construir mi proyecto de Android, obtengo el siguiente error:

:app:transformResourcesWithMergeJavaResForDebug FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK com/google/appengine/repackaged/org/apache/commons/codec/language/bm/sep_approx_spanish.txt File1: C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.google.appengine\appengine-api-1.0-sdk\1.9.28\e92c18272b555027d9ec666e7a89162f10638314\appengine-api-1.0-sdk-1.9.28.jar File2: C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.google.appengine\appengine-endpoints\1.9.28\bf2e8a74bd28e388b3487fc78a0c7adfa592fd5d\appengine-endpoints-1.9.28.jar` 

He estado cavando durante horas y no puedo ver nada que cause esto. He eliminado .gradle en mi directorio personal, pero solo lo reconstruye todo igual. ¿Alguien sabe qué causa esto?

Salida de gradle completa:

 Executing tasks: [:app:clean, :app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources, :app:assembleDebug] Configuration on demand is an incubating feature. WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.1 is ignored for debug as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.1 is ignored for release as it may be conflicting with the internal version provided by Android. In case of problem, please repackage it with jarjar to change the class packages Incremental java compilation is an incubating feature. :app:clean :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE :app:checkDebugManifest :app:preReleaseBuild UP-TO-DATE :backend:appengineDownloadSdk :backend:compileJava :backend:processResources UP-TO-DATE :backend:classes :backend:appengineEndpointsGetClientLibs UP-TO-DATE :backend:appengineEndpointsExpandClientLibs UP-TO-DATE :backend:compileEndpointsSrcJava :backend:processEndpointsSrcResources UP-TO-DATE :backend:endpointsSrcClasses :backend:_appengineEndpointsAndroidArtifact UP-TO-DATE :backend:jar UP-TO-DATE :app:prepareComAndroidSupportAnimatedVectorDrawable2330Library :app:prepareComAndroidSupportAppcompatV72330Library :app:prepareComAndroidSupportSupportV42330Library :app:prepareComAndroidSupportSupportVectorDrawable2330Library :app:prepareComGoogleAndroidGmsPlayServicesAuth840Library :app:prepareComGoogleAndroidGmsPlayServicesBase840Library :app:prepareComGoogleAndroidGmsPlayServicesBasement840Library :app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library :app:prepareDebugDependencies :app:compileDebugAidl :app:compileDebugRenderscript :app:generateDebugBuildConfig :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets :app:generateDebugResValues UP-TO-DATE :app:processDebugGoogleServices :app:generateDebugResources :app:mergeDebugResources :app:processDebugManifest :app:processDebugResources :app:generateDebugSources :app:mockableAndroidJar UP-TO-DATE :app:preDebugUnitTestBuild UP-TO-DATE :app:prepareDebugUnitTestDependencies :app:preDebugAndroidTestBuild UP-TO-DATE :app:prepareDebugAndroidTestDependencies :app:compileDebugAndroidTestAidl :app:processDebugAndroidTestManifest :app:compileDebugAndroidTestRenderscript :app:generateDebugAndroidTestBuildConfig :app:generateDebugAndroidTestAssets UP-TO-DATE :app:mergeDebugAndroidTestAssets :app:generateDebugAndroidTestResValues UP-TO-DATE :app:generateDebugAndroidTestResources :app:mergeDebugAndroidTestResources :app:processDebugAndroidTestResources :app:generateDebugAndroidTestSources :app:compileDebugJavaWithJavac Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. :app:compileDebugNdk UP-TO-DATE :app:compileDebugSources :app:buildInfoDebugLoader :app:transformClassesWithExtractJarsForDebug :app:transformClassesWithInstantRunVerifierForDebug :app:transformClassesWithJavaResourcesVerifierForDebug UP-TO-DATE :app:mergeDebugJniLibFolders :app:transformNative_libsWithMergeJniLibsForDebug :app:processDebugJavaRes UP-TO-DATE :app:transformResourcesWithMergeJavaResForDebug FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK com/google/appengine/repackaged/org/apache/commons/codec/language/bm/sep_approx_spanish.txt File1: C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.google.appengine\appengine-api-1.0-sdk\1.9.28\e92c18272b555027d9ec666e7a89162f10638314\appengine-api-1.0-sdk-1.9.28.jar File2: C:\Users\USER\.gradle\caches\modules-2\files-2.1\com.google.appengine\appengine-endpoints\1.9.28\bf2e8a74bd28e388b3487fc78a0c7adfa592fd5d\appengine-endpoints-1.9.28.jar * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 15.364 secs 

Por lo que puedo decir, es un conflicto entre dos dependencias:

 dependencies { appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.28' compile 'com.google.appengine:appengine-endpoints:1.9.28' compile 'com.google.appengine:appengine-endpoints-deps:1.9.28' compile 'javax.servlet:servlet-api:2.5' compile 'com.google.http-client:google-http-client-jackson2:1.20.0' compile 'com.google.http-client:google-http-client-gson:1.19.0' } 

Creo que son estas dos dependencias:

 appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.28' compile 'com.google.appengine:appengine-endpoints:1.9.28' compile 'com.google.appengine:appengine-endpoints-deps:1.9.28' 

No puedo eliminar ninguno de estos, ya que provoca errores de compilación en el módulo de backend. Parece que esas dos dependencias son casi idénticas, sin embargo. ¿Deberían estar los dos allí? Cualquier consejo es apreciado!

Para completar la respuesta de @ dsh:

En su árbol de dependencias hay 2 archivos jar que contienen el mismo archivo llamado sep_approx_spanish.txt , esto no está permitido.

Para resolver tu problema tienes que rastrear cuál de tus dependencias de gradle tiene los dos tarros llamados appengine-api-1.0-sdk-1.9.28.jar y appengine-endpoints-1.9.28.jar ; Para hacer esto usted puede abrir la consola del terminal del estudio del android y mecanografiar adentro:

 //if ou are on windows gradlew dependencies //if you are on unix based os ./gradlew dependencies 

Verás gradle haciendo muchas cosas, pero en un cierto punto imprimirá todo el árbol de dependencia. Una vez que encuentre cuáles son las 2 dependencias están causando el problema, agregue esta pieza de código al final de una de las declaraciones de dependencia

 { exclude "sep_approx_spanish.txt" } 

Por ejemplo, si las dos dependencias son estas

 compile 'com.google.appengine:appengine-endpoints:1.9.28' compile 'com.google.appengine:appengine-endpoints-deps:1.9.28 

Si debe ser

 compile 'com.google.appengine:appengine-endpoints:1.9.28'{ exclude "sep_approx_spanish.txt" } compile 'com.google.appengine:appengine-endpoints-deps:1.9.28 

o

 compile 'com.google.appengine:appengine-endpoints:1.9.28' compile 'com.google.appengine:appengine-endpoints-deps:1.9.28'{ exclude "sep_approx_spanish.txt" } 

De esta manera se le dice a gradle que no tome en consideración ese fichero para una de las dos bibliotecas, evitando la duplicación del fichero dentro del apk.

El error le dice que la construcción de su APK daría lugar a dos archivos denominados com / google / appengine / reempaquetado / org / apache / commons / codec / idioma / bm / sep_approx_spanish.txt. Esto es un error porque el APK sólo puede contener un archivo en cualquier ruta de acceso. Esto es probablemente causado por dos archivos jar diferentes en su classpath que contienen el archivo. En mi proyecto, esto sólo ocurrió con archivos que no se utilizaron realmente en tiempo de ejecución, así que los excluí del APK por completo.

Completando la respuesta @Apperside.

Fijé el error agregando las líneas siguientes a mi archivo de build.gradle de mi módulo de la aplicación:

 android{ packagingOptions { exclude 'com/google/appengine/repackaged/org/apache/commons/codec/language/bm/*' exclude 'com/google/appengine/repackaged/org/codehaus/jackson/impl/VERSION.txt' exclude 'com/google/appengine/repackaged/org/apache/commons/codec/language/*' } (...) } 
  • Conflicto con dependencia 'com.android.support:support-annotations'. Las versiones resueltas para la aplicación (23.3.0) y la aplicación de prueba (23.1.1) difieren
  • Emulador de Android (Android Studio) Botón de inicio no funciona y da logcat - I / WindowManager: No iniciar la actividad porque la configuración del usuario está en curso
  • Android Studio Rendering error con material interactivo
  • Android Studio 2.0 Instant Run hace que DexFile no cargue todas las clases
  • Al agregar Facebook SDK "appeventslogger.activateapp (this)" se muestra obsoleta
  • La compilación del proyecto Android se ejecutó correctamente pero se ejecutó con error: java.util.zip.ZipException: entrada duplicada
  • Error: Error de ejecución de la tarea ': app: packageDebug'. > Com.android.builder.packaging.PackagerException
  • La aplicación no se ejecutará en Android Studio 2.0, después de actualizar desde 1.5
  • Android Studio 2.0 inicia APK en otro dispositivo
  • Mensaje de advertencia de archivo SVG en el editor de Android Studio
  • No hay ninguna opción de actividad en blanco en Android Studio 2.0 para crear
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.