2016-04-18 4 views
8

Я использую Android Studio 2.0 на Windows 7. При создании моего Android проекта, я получаю следующее сообщение об ошибке:DuplicateFileException ошибка при построении Android APK

: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` 

Я копался в течение нескольких часов и не могу видеть все, что вызывает это. Я удалил .gradle в своем домашнем каталоге, но он просто перестраивает все это. Кто-нибудь знает, что вызывает это?

Полный Gradle выход:

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 

Из того, что я могу сказать, что это конфликт между двумя зависимостями:

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' 
} 

Я думаю, что эти два типа зависимостей:

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' 

I 'm не удается удалить ни одно из них, так как оно вызывает ошибки компиляции на внутреннем модуле. Похоже, что эти две зависимости почти идентичны. Должны ли они оба там? Любые советы приветствуются!

+1

Пожалуйста, разместите весь вывод консоли Gradle, а не только эти строки. См. [Этот вопрос и ответ переполнения стека] (https://stackoverflow.com/questions/36698816/gradle-what-is-a-non-zero-exit-value-and-how-do-i-fix-it# комментарий60986098_36698816) для больше. – CommonsWare

+0

OK, выход градации добавлен. Я просмотрел выход, но ничто из этого ничего не говорит мне. –

ответ

7

Чтобы завершить ответ @ DSH в:

В дереве зависимостей есть 2 фляги файлы, содержащие один и тот же файл с именем sep_approx_spanish.txt, это не допускается.

Для решения проблемы вам нужно отслеживать, какая из ваших зависимостей градиента имеет две банки по имени appengine-api-1.0-sdk-1.9.28.jar и appengine-endpoints-1.9.28.jar; чтобы сделать это, вы можете открыть консоль терминала Android Studio и введите:

//if ou are on windows 
gradlew dependencies 

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

Вы увидите Gradle делать много вещей, но в определенный момент он будет печатать дерево целиком зависимостей. После того, как вы обнаружите, которые являются 2 зависимостей вызывают проблему, добавьте этот кусок кода в конце одного из объявлений зависимостей

{ 
    exclude "sep_approx_spanish.txt" 
} 

Так, например, если два зависимостей этих

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

если должен стать

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

или

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

таким образом вы говорите градиенту, чтобы не принимать во внимание этот файл для одной из двух библиотек, избегая дублирования файла внутри apk.

+0

Отличный ответ, это решило. Мне пришлось пройти через несколько txt-файлов, чтобы заставить его работать, но как только я их разобрал, все было в порядке. Кроме того, отличная работа, написание очень тщательного ответа :) –

+0

рад узнать, что это помогло вам :) – Apperside

+1

@JamesFunk сделал это для вас? Я получил другую ошибку: Ошибка: (26, 0) Метод Gradle DSL не найден: 'com.google.appengine: appengine-endpoints: 1.9.28()' – sublimental

2

Ошибка сообщает вам, что при создании APK будут созданы два файла с именем com/google/appengine/repackaged/org/apache/commons/codec/language/bm/sep_approx_spanish.txt. Это сбой, поскольку APK может содержать только один файл на любом заданном пути. Вероятно, это вызвано двумя разными файлами jar в вашем пути к классу, содержащим файл. В моем проекте это происходило только с файлами, которые на самом деле не использовались во время выполнения, поэтому я полностью их исключил из APK.

+0

Хотя это технически правильно, я отметил другой как ответ, потому что он объяснил, как исправить это, а не только причину. –

+0

Хорошо, отлично! :) – dsh

0

Завершение ответа @Apperside.

Я исправил ошибку, добавив следующие строки в мою сборку.файл градиента моего модуля приложения:

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/*' 
     } 

    (...) 
} 
Смежные вопросы