2013-07-29 10 views
7

Próbuję zbudować Android testu stosując następujący Gradle plik buildAndroid Gradle build: duplikaty plików podczas pakowania 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'] 
     }   
    } 
} 

Po uruchomieniu pojawia się następujący błąd:

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

Odpowiedz

12

Junit v4.5 spakował wszystkie niezbędne zależności do słoju JUnit. W związku z tym nie ma potrzeby pliku hamcrest.jar, ani wynikłego podwójnego pliku LICENSE.txt.

wystarczy zmienić zależności do:

instrumentTestCompile "junit:junit:4.5+"

Podstawowym problemem pozostaje - android nie przyjmując dwie nazwy plików to samo w swoim drzewie budowania. To jest dobre obejście.

+0

+1, w sytuacjach bezczynności użycie "junit: junit: 4. +" rozwiąże wszystkie wartości większe niż 4.0, które obejmują 4.5+. Ale studio/gradle ma ten problem, gdy nie odświeża zależności lub szuka nowych zależności w czasie. Obejście problemu polegałoby na zignorowaniu pamięci podręcznej i ponownym załadowaniu zależności. – Varun

4

Zauważyłem ten komentarz zatwierdzenia w AOSP, rozwiązaniem będzie wykluczyć niektóre pliki przy użyciu DSL. Prawdopodobnie po zwolnieniu 0.7.1.

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

Dodałem wykluczenia dla pliku license.txt. To nie pomaga w studiu. Kiedy buduję/uruchamiam testy z terminala, działa idealnie, ale kiedy próbuję go uruchomić z wnętrza studia, narzeka na duplikaty plików –

Powiązane problemy