2017-06-03 27 views
37

Podczas budowania aplikacji wystąpił błąd.Znaleziono więcej niż jeden plik z niezależną ścieżką systemu operacyjnego "META-INF/LICENSE"

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. More than one file was found with OS independent path 'META-INF/LICENSE'

To jest mój plik build.gradle

apply plugin: 'com.android.application' 
apply plugin: 'kotlin-android' 
android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "cn.sz.cyrus.kotlintest" 
     minSdkVersion 14 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 

     javaCompileOptions{ 
      annotationProcessorOptions{ 
       includeCompileClasspath = true 
      } 
     } 
     multiDexEnabled true 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    packagingOptions { 
/*  exclude 'META-INF/DEPENDENCIES' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/NOTICE.txt'*/ 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" 
    compile 'com.android.support:appcompat-v7:25.3.1' 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:design:25.3.1' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1' 
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1' 
    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1' 
    compile 'com.github.GrenderG:Toasty:1.2.5' 
    compile 'com.orhanobut:logger:1.15' 

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1' 
    compile 'com.umeng.analytics:analytics:latest.integration' 
    compile 'ai.api:libai:1.4.8' 
    compile 'ai.api:sdk:[email protected]' 
// api.ai SDK dependencies 
    compile 'com.google.code.gson:gson:2.8.0' 
    compile 'commons-io:commons-io:2.4' 
    compile 'com.android.support:multidex:1.0.1' 
} 

kiedy dodać te kod do mojego Gradle pliku.

packagingOptions { 
      exclude 'META-INF/DEPENDENCIES' 
      exclude 'META-INF/NOTICE' 
      exclude 'META-INF/LICENSE' 
      exclude 'META-INF/LICENSE.txt' 
      exclude 'META-INF/NOTICE.txt' 
     } 

Ten błąd zostanie rozwiązany, ale wystąpi inny problem. lubię to

java.lang.NoClassDefFoundError: com.squareup.leakcanary.internal.HeapAnalyzerService 
at com.squareup.leakcanary.LeakCanary.isInAnalyzerProcess(LeakCanary.java:145) 
at cn.sz.cyrus.wemz.TestApplication.onCreate(TestApplication.kt:32) 

Kto ma pomysły na to pytanie? Dzięki za pierwszy.

Odpowiedz

40

W moim przypadku wystarczyło wykluczyć tylko ścieżkę "META-INF/LICENSE" na yourProject/app/build.gradle wewnątrz android{}. Tutaj jest

packagingOptions { 
    exclude 'META-INF/LICENSE' 
} 

A następnie wykonaj Clean Project i Rebuild Project.

+7

To mi nie pomogło ... –

+6

Spróbuj wykluczyć "META-INF/ZALEŻNOŚĆ" zamiast tego wykluczyć "META-INF/LICENSE" – Pelanes

+0

@ Shore-T wypróbuj moje rozwiązanie Mam nadzieję, że będzie to dla ciebie dobre –

35

Możesz dodać ten w yourProject/app/build.gradle wewnątrz android{}

packagingOptions { 
    exclude 'META-INF/DEPENDENCIES' 
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/LICENSE.txt' 
    exclude 'META-INF/license.txt' 
    exclude 'META-INF/NOTICE' 
    exclude 'META-INF/NOTICE.txt' 
    exclude 'META-INF/notice.txt' 
    exclude 'META-INF/ASL2.0' 
} 
+1

zaoszczędzisz mój czas Tnx, +1 głos dla Ciebie. –

+0

@SagarAghara jesteś w większości mile widziany^_^jesteśmy tutaj, aby pomóc innym –

+1

To będzie miłe, jeśli twoja odpowiedź określa lokalizację tego ustawienia, mówi wewnątrz androida {} – tyolab

4

Gdyby podobny komunikat

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. More than one file was found with OS independent path 'constant-values.html'

Aby rozwiązać go, musiałem włączyć widok pakiety() w Android Studio, a następnie przeglądać przez drzewo do bibliotek i zlokalizuj duplikaty()

Następnie, ctrl + alt + f12 (lub menu RMB)() - i znaleziono biblioteki, które spowodowały problem. Sporządzono listę plików wewnątrz tych bibliotek, które spowodowały problemy, i zapisano je w pliku build.gradle aplikacji w sekcji android. Inną opcją jest radzić sobie z biblioteki, zawierające duplikaty plików

packagingOptions { 
    exclude 'allclasses-frame.html' 
    exclude 'allclasses-noframe.html' 
    <..> 

enter image description here

0

miałem podobny problem. I był już komunikat o błędzie -

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. 

More than one file was found with OS independent path 'javax/annotation/WillCloseWhenClosed.java' 

Jak stwierdzono w niektórych z powyższych odpowiedzi, korzystając z poniższego kodu działa

'packagingOptions { 
     exclude 'allclasses-frame.html' 
    }' 

Ale ja otrzymuję ten błąd na 20 różnych plików, więc po wyłączeniu 20 plików, zatrzymałem się i próbowałem znaleźć przyzwoite rozwiązanie. Napotkaliśmy także na to, że w końcu udało mi się rozwiązać ten problem.

Po pierwsze (jak w moim przypadku WillCloseWhenClosed.java był duplikatem pliku), w studiu android masz opcję "szukaj wszędzie". Zapisz i wyszukaj tam plik. Tam znalazłem wiele instancji tego pliku.Kliknąłem więc na oba wystąpienia i zobaczyłem ich lokalizację, klikając prawym przyciskiem myszy plik i widząc jego lokalizację po otwarciu w Androidzie.

Po drugie, stwierdziłem, że mam pewne zależności w pliku gradle. Używałem poniższy kod

dependencies { 
    compile 'com.google.api-client:google-api-client:1.23.0' 
} 

i też miałem ich samych paczek zip w lokalizacji: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1,23 !.

To było zbyteczne i dlatego gradle znajduje 2 pliki. Usunąłem więc moje pakiety zip i rozwiązałem dla mnie błędy. Zachowaj ostrożność podczas robienia tego. Musisz dowiedzieć się, który plik jest poprawny lub który chcesz usunąć.

Po trzecie, gradle tworzy również zip tych plików błędów w tej lokalizacji (przynajmniej dla mnie to zrobione) - C: \ Program Files \ Android \ Android Studio \ gradle \ m2repository \ com \ google \ kod \ findbugs \ jsr305 \ 1.3.9 \ jsr305-1.3.9.jar!

więc poszedłem i usunąłem plik jsr305-1.3.9.jar stąd również.

Jeśli nadal jesteś zdezorientowany, po prostu przejdź do "wyszukiwania wszędzie" w androidowym studiu, znajdź tam swoje pliki i będziesz musiał usunąć jeden z nich. Nie spiesz się i wymyśl, który.

4

Rozwiązania tu mi nie pomoże, ale ten link nie: https://groups.google.com/forum/#!topic/Android-ndk/vfMfld5FY7A

Jeśli masz bibliotekę, która jest dodanie kilku android pliki .so -Jak libassmidi.so lub libgnustl_shared.so - trzeba powiedzieć Gradle wybrać tylko jedną podczas pakowania, w przeciwnym razie dojdzie do konfliktu.

android { 
    packagingOptions { 
    pickFirst 'lib/armeabi-v7a/libassmidi.so' 
    pickFirst 'lib/x86/libassmidi.so' 
    } 
} 

Wystąpił ten problem podczas używania aplikacji React Native jako biblioteki w projekcie Android. Mam nadzieję, że pomaga

+0

Dziękuję, miałem ten sam problem z tylko jednym plikiem .so. Istnieje inny plik o nazwie gdbserver w tym samym folderze i po dodaniu packagingOptions dla biblioteki działa on teraz. –

1

Zasadniczo, gdy gradle składa razem plik APK, kopiuje zawartość ze wszystkich zależności kompilacji. Jest wystarczająco inteligentny, aby przekonać się, że istnieje duplikat file..coming z dwóch różnych plików JAR. Może to być dowolny plik, taki jak a.txt lub META-INF/DEPENDENCIES. Najlepiej byłoby wykluczyć te pliki za pomocą poniższego, na wypadek gdyby plik był tam obecny tylko w celach informacyjnych.

android{ 
    packagingOptions { 
     exclude 'META-INF/DEPENDENCIES' 
    } 
} 

Albo jeśli w przypadku plik jest obowiązkowe pliku jak plik klasy, która została powielona w dwóch zależnościami słoik, które są związane ze sobą, to najlepiej znaleźć alternatywy dla tych słoikach, w sposób bardziej kompatybilnej wersji.