2016-04-18 37 views
8

Tôi đang sử dụng Android Studio 2.0 trên Windows 7. Khi xây dựng dự án Android của tôi, tôi nhận được lỗi sau:DuplicateFileException lỗi khi xây dựng 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` 

Tôi đã được đào bới xung quanh trong nhiều giờ và không thể nhìn thấy bất cứ điều gì gây ra điều này. Tôi đã xóa .gradle trong thư mục chính của tôi, nhưng nó chỉ xây dựng lại tất cả như nhau. Có ai biết điều gì gây ra điều này?

Full đầu ra 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 

Từ những gì tôi có thể nói, đó là một mâu thuẫn giữa hai phụ thuộc:

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

Tôi nghĩ đó là hai phụ thuộc sau đây:

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' 

tôi 'không thể loại bỏ bất kỳ lỗi nào trong số này, vì nó gây ra lỗi biên dịch trên mô-đun phụ trợ. Dường như hai phụ thuộc này gần như giống hệt nhau, tuy nhiên. Cả hai có nên ở trong đó không? Lời khuyên nào được đánh giá cao!

+1

Vui lòng đăng toàn bộ đầu ra Gradle Console, không chỉ những dòng này. Xem [câu hỏi và câu trả lời tràn ngăn xếp này] (https://stackoverflow.com/questions/36698816/gradle-what-is-a-non-zero-exit-value-and-how-do-i-fix-it# comment60986098_36698816) để biết thêm. – CommonsWare

+0

OK, đầu ra gradle được thêm vào. Tôi đã xem xét đầu ra, nhưng không có điều gì gợi ý cho tôi. –

Trả lời

7

Để hoàn thành câu trả lời @ DSH của:

Trong cây phụ thuộc của bạn có 2 file jar có chứa các tập tin cùng tên sep_approx_spanish.txt, điều này là không được phép.

Để giải quyết vấn đề của bạn, bạn phải theo dõi xem phụ thuộc gradle nào của bạn có hai lọ tên là appengine-api-1.0-sdk-1.9.28.jarappengine-endpoints-1.9.28.jar; để làm điều này bạn có thể mở giao diện điều khiển thiết bị đầu cuối android studio và gõ vào:

//if ou are on windows 
gradlew dependencies 

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

Bạn sẽ thấy gradle làm rất nhiều thứ, nhưng ở một thời điểm nào đó nó sẽ in toàn bộ cây phụ thuộc. Khi bạn tìm được 2 phụ thuộc đang gây ra vấn đề, thêm đoạn mã này vào cuối của một trong những tờ khai phụ thuộc

{ 
    exclude "sep_approx_spanish.txt" 
} 

Vì vậy, ví dụ nếu hai phụ thuộc là những

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

nếu phải trở thành

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

hoặc

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

theo cách này, bạn yêu cầu gradle không xem xét tệp đó cho một trong hai thư viện, tránh trùng lặp tệp trong APK.

+0

Câu trả lời hoàn hảo, điều này đã giải quyết được. Tôi đã phải đi qua một số tập tin txt để có được nó để làm việc, nhưng một khi tôi đã nhận được tất cả chúng được sắp xếp ra, nó đã được sử dụng tốt. Ngoài ra, công việc tuyệt vời viết một câu trả lời rất kỹ lưỡng :) –

+0

vui mừng khi biết nó đã giúp bạn :) – Apperside

+1

@ JamesFunk đã làm công việc này cho bạn? Tôi đã kết thúc một lỗi khác: Lỗi: (26, 0) Không tìm thấy phương thức DSL Gradle: 'com.google.appengine: appengine-endpoints: 1.9.28()' – sublimental

2

Lỗi này cho bạn biết rằng việc tạo APK của bạn sẽ dẫn đến hai tệp có tên là com/google/appengine/repackaged/org/apache/commons/codec/language/bm/sep_approx_spanish.txt. Đây là lỗi do APK chỉ có thể chứa một tệp ở bất kỳ đường dẫn cụ thể nào. Điều này có thể do hai tệp jar khác nhau trong đường dẫn lớp của bạn chứa tệp. Trong dự án của tôi, điều này chỉ xảy ra với các tệp không thực sự được sử dụng trong thời gian chạy nên tôi đã loại trừ chúng khỏi APK hoàn toàn.

+0

Mặc dù về mặt kỹ thuật này là chính xác, tôi đã đánh dấu câu trả lời khác là câu trả lời vì nó cũng giải thích cách khắc phục nó, chứ không phải nguyên nhân. –

+0

Được rồi, tuyệt vời! :) – dsh

0

Hoàn thành câu trả lời @Apperside.

Tôi đã sửa lỗi bằng cách thêm các dòng sau vào bản dựng của mình.tệp gradle của mô-đun ứng dụng của tôi:

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

    (...) 
} 
Các vấn đề liên quan