2013-07-29 33 views
7

Tôi cố gắng để xây dựng một thử nghiệm Android bằng cách sử dụng sau đây gradle xây dựng tập tinAndroid gradle xây dựng: tập tin trùng lặp trong bao bì của APK license.txt

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4.2' 
    } 

apply plugin: 'android-library' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    instrumentTestCompile "junit:junit:4.+"   
} 

android { 
    compileSdkVersion 17 
    buildToolsVersion "17.0.0" 

    instrumentTest.setRoot('tests') 
    instrumentTest { 
     java.srcDirs = ['tests/src'] 
     res.srcDirs = ['tests/res'] 
     assets.srcDirs = ['tests/assets'] 
     resources.srcDirs = ['tests/src'] 
     }   
    } 
} 

Khi chạy tôi nhận được lỗi sau:

Error: duplicate files during packaging of APK ... Path in archive: LICENSE.txt Origin 1: ....gradle/caches/artifacts-24/filestore/junit/junit/4.11/jar/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar Origin 2: ....gradle/caches/artifacts-24/filestore/org.hamcrest/hamcrest-core/1.3/jar/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar :packageTest FAILED

FAILURE: Build failed with an exception.

  • What went wrong: Execution failed for task ':packageTest'. Duplicate files at the same path inside the APK: LICENSE.txt

Trả lời

12

Junit v4.5 đã đóng gói tất cả các phụ thuộc cần thiết vào bình JUnit. Do đó không cần cho hamcrest.jar, và không có tệp LICENSE.txt kép.

chỉ cần thay đổi phụ thuộc vào:

instrumentTestCompile "junit:junit:4.5+"

Vấn đề cơ bản vẫn còn - android không chấp nhận hai tập tin tên giống nhau ở cây xây dựng của nó. Tuy nhiên, đây là cách giải quyết tốt.

+0

+1, trong trường hợp không sử dụng, sử dụng "junit: junit: 4. +" sẽ giải quyết mọi thứ lớn hơn 4.0 bao gồm 4,5+. Nhưng studio/gradle có vấn đề này, nơi nó không làm mới các phụ thuộc hoặc tìm phụ thuộc mới hơn ở lần. Cách giải quyết sẽ bỏ qua bộ nhớ cache và tải lại các phụ thuộc. – Varun

4

Tôi nhận thấy nhận xét cam kết này trong AOSP, giải pháp sẽ loại trừ một số tệp bằng DSL. Có lẽ khi 0.7.1 được phát hành.

commit e7669b24c1f23ba457fdee614ef7161b33feee69 
Author: Xavier Ducrohet <---> 
Date: Thu Dec 19 10:21:04 2013 -0800 

    Add DSL to exclude some files from packaging. 

    This only applies to files coming from jar dependencies. 
    The DSL is: 

    android { 
     packagingOptions { 
     exclude 'META-INF/LICENSE.txt' 
     } 
    } 
+1

Tôi đã thêm loại trừ cho license.txt. Nó không giúp với studio. Khi tôi xây dựng/chạy thử nghiệm từ thiết bị đầu cuối nó hoạt động hoàn hảo, nhưng khi tôi đang cố gắng chạy nó từ bên trong studio android, nó phàn nàn về các tệp trùng lặp –