Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego „META-INF / LICENSE”

332

Podczas tworzenia aplikacji pojawia się następujący błąd:

Błąd: wykonanie nie powiodło się dla zadania „: app: transformResourcesWithMergeJavaResForDebug”. Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego „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:2.0.5@aar'
// 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 dodam ten kod do mojego pliku build.gradle,

  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 zostałby 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, jak to rozwiązać?

Cyrus
źródło
Ten sam problem napotkałem podczas uzyskiwania dostępu do Biblioteki klienta Google API na Androida. Rozwiązano problem, wykluczając moduł HttpClient z zależności stopni. Zapoznaj się z dokumentami Google, aby uzyskać więcej informacji developers.google.com/api-client-library/java/... przeszukaj stronę z dokumentami za pomocą „W Androidzie musisz jawnie wykluczyć nieużywane zależności:”
mifthi

Odpowiedzi:

493

Możesz dodać to w yourProject/app/build.gradleśrodkuandroid{}

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'
        exclude("META-INF/*.kotlin_module") 
      }          
}
Shaaban Ebrahim
źródło
23
Czy możesz wyjaśnić, dlaczego to działa i jakie jest znaczenie „META-INF”? Dziękuję Ci!
Shreshth Kharbanda
@CodeSlave powoduje pewne problemy z apk, jeśli nie wykluczyliśmy tych plików z google.github.io/android-gradle-dsl/current/... Wyklucz ścieżki, które pasują do wzorca wykluczenia, nie zostaną uwzględnione w APK. to wszystko co wiem. nie mam pełnego pojęcia o tym problemie
Shaaban Ebrahim
11
Chociaż może to odpowiedzieć na pytanie, lepiej dodać opis, w jaki sposób ta odpowiedź może pomóc w rozwiązaniu problemu. Proszę przeczytać Jak napisać dobrą odpowiedź, aby dowiedzieć się więcej.
Roshana Pitigala
3
W moim przypadku musiałem również dodać „META-INF / LICENSE.md” i „META-INF / LICENSE-notice.md”
Klyner
1
Dodaj wykluczenie („META-INF / *. Kotlin_module”) na liście packaginOptions
Jaspal
129

W moim przypadku wystarczyło wykluczyć tylko ścieżkę „META-INF / DEPENDENCIES” w yourProject/app/build.gradleśrodku android{} . Oto jest

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

A następnie wykonaj Clean Project i Rebuild Project.

Mara
źródło
11
Spróbuj wykluczyć „META-INF / DEPENDENCIES” zamiast tego „META-INF / LICENCJA”
Pelanes,
7
Wyjaśnienia, proszę
Mohammad Ali,
1
@SilSur wyklucza ten plik, który więc pomyłka, tak jak w moim kodzie, ten sam błąd dla „META-INF / proguard / androidx-annotations.pro” ten plik, a następnie został dodany wyklucz „META-INF / proguard / androidx-adnotations. pro ”i jego praca.
Gunavant Patel
4
Chociaż może to odpowiedzieć na pytanie, lepiej dodać opis, w jaki sposób ta odpowiedź może pomóc w rozwiązaniu problemu. Proszę przeczytać Jak napisać dobrą odpowiedź, aby dowiedzieć się więcej.
Roshana Pitigala
Nie musisz czyścić, tylko synchronizuj pliki stopni
Steve Moretz
75

Rozwiązania tutaj nie pomogły mi, ale ten link tak.

Jeśli masz bibliotekę, która dodaje niektóre pliki .so dla Androida - podobnie libassmidi.solub libgnustl_shared.so- musisz powiedzieć gradle, aby wybrał tylko jeden plik podczas pakowania, w przeciwnym razie dojdzie do konfliktu.

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

Miałem ten problem, gdy korzystałem z aplikacji React Native jako biblioteki w projekcie na Androida. Mam nadzieję, że to pomoże

Daniel Reina
źródło
2
Dziękuję, miałem ten sam problem z tylko jednym plikiem .so. W tym samym folderze znajduje się inny plik o nazwie gdbserver, a po dodaniu właściwości packageOptions do biblioteki działa teraz.
Mr. Fish
1
Dziękuję Ci! Pomógł, gdy miałem JAR aar jako zależność zagnieżdżona
faisal00813
31

Miał podobną wiadomość

Błąd: wykonanie nie powiodło się dla zadania „: app: transformResourcesWithMergeJavaResForDebug”. Znaleziono więcej niż jeden plik z niezależną ścieżką systemu operacyjnego „constant-values.html”

Aby rozwiązać ten problem, musiałem włączyć widok pakietów ( 1 ) w Android Studio, a następnie przejrzeć drzewo do bibliotek i zlokalizować duplikaty ( 2) )

Następnie ctrl + alt + f12 (lub menu RMB) ( 3 ) - i znalazłem biblioteki, które spowodowały problem. Zrobiłem listę plików w tych bibliotekach, które spowodowały problemy, i zapisałem je w pliku build.gradle aplikacji w sekcji Androida . Inną opcją jest radzenie sobie z biblioteką zawierającą zduplikowane pliki

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

wprowadź opis zdjęcia tutaj

Dmitrii Chichuk
źródło
1
Jak „następnie przeglądać drzewo w poszukiwaniu bibliotek i lokalizować duplikaty”? Czy naprawdę przejrzałeś wszystkie pliki we wszystkich folderach?
programista Androida
1
Jestem również zdezorientowany, że „zlokalizuj duplikaty”. W aplikacji / bibliotekach może być 100 subcentrów ... jak można zlokalizować duplikaty?
Freewalker
28

Zasadniczo, gdy gradle składa plik apk, kopiuje zawartość ze wszystkich zależności kompilacji. Jest wystarczająco inteligentny, aby zobaczyć, że istnieje duplikat pliku .. pochodzący z dwóch różnych plików jar. Może to być dowolny plik, taki jak a.txt lub META-INF / DEPENDENCIES. Najlepiej jest wykluczyć te pliki, korzystając z poniższego opisu, w przypadku gdy plik jest tam tylko w celach informacyjnych.

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

Lub jeśli plik jest plikiem obowiązkowym, takim jak plik klasy, który został zduplikowany w dwóch powiązanych ze sobą zależnościach jar, najlepiej jest znaleźć alternatywy dla tych słoików, na drodze bardziej kompatybilnej wersji.

Ank
źródło
Po dodaniu tego do mojego projektu pojawia się kolejny błąd, którego ponownie nie jestem w stanie rozwiązać! Jakieś inne rozwiązanie?
hetsgandhi
Hetvi Gandhi, Jaki błąd widzisz?
ank
20

Miałem ten sam problem i próbowałem tego

Błąd: Znaleziono więcej niż jeden plik z niezależną ścieżką systemu operacyjnego „META-INF / proguard / androidx-annotations.pro”

Rozwiązanie: Wszystko, co musisz zrobić, aby to naprawić, to dodać to do sekcji Androida {} w „build.gradle” aplikacji

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}
Apoorva Jain
źródło
18

Dzieje się tak podczas używania

org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.2.0

I został naprawiony w następnej wersji

org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.2.1

Vairavan
źródło
1
podobny problem z org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.3.6, który jest najnowszym na razie. musiał obniżyć wersję
farhan patel
Tak, ten sam numer w 1.3.6
Shefchenko
17

Napotkałem ten sam błąd i stwierdziłem, że wynikał on z różnych modułów zawierających te same klasy z różnych pakietów .

np. Jeden używany pakiet androidx, a drugi używany pre-androidx

Rozwiązałem go, migrując moduł sprzed Androidax na Androidx, korzystając z wbudowanej funkcji Android Studio: „Refaktoryzuj -> Migruj na Androidx ...”, nie wykluczając niczego.


W tej sytuacji możesz sprawdzić, czy masz jakieś niedopasowania zależności między modułami.

Owen Chen
źródło
1
Nie zapomnij wykonać kopii zapasowej bieżącej wersji projektu, ponieważ migracja do systemu AndroidX może uszkodzić Twój projekt!
Kathir
12

Przeczytałem wszystkie odpowiedzi związane z otrzymaniem tej wiadomości Android Studio:

Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego „META-INF / LICENSE”

ale w tym przypadku wykluczenie klas nie jest konieczne, musimy tylko wykluczyć 'META-INF/DEPENDENCIES', można to zrobić wewnątrz /app/build.gradle:

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

}
Jorgesys
źródło
To samo powiedziano w setkach innych odpowiedzi na SO
Atul
11

Zaktualizowałem Studio z Java 7 do Java 8 i ten problem wystąpił. Potem rozwiązałem to w ten sposób:

android {
    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}
Manasvi
źródło
8

W mojej aplikacji dodawałem takie zależności jar:

implementation files('libs/json-simple-1.1.1.jar')

Ale zdałem sobie sprawę, że zostały już dodane z powodu następującego pierwszego wiersza zależności:

implementation fileTree(include: ['*.jar'], dir: 'libs')

Ta linia dodaje wszystkie słoiki w folderze lib do zależności aplikacji.

Dlatego po usunięciu dodatkowej zależności implementation files('libs/json-simple-1.1.1.jar')

działa dobrze.

Sandeep Yohans
źródło
Jest to pomocne, ale nie związane z odpowiedzią. W bibliotekach znajdują się pliki meta-folderów META-INF, które mogą mieć podobną nazwę i format. Powodują one problem z duplikatem pliku, dlatego należy je usunąć.
Abhinav Saxena
7

Napotkałem podobny problem w środowisku aplikacji z wieloma modułami:

Błąd: wykonanie nie powiodło się dla zadania „: app: transformResourcesWithMergeJavaResForDebug”. Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego „META-INF / AL2.0”

Problem ten był zgłaszany przez kilka z moich modułów i żadne z powyższych rozwiązań go nie naprawiało. Okazuje się, że używałem wersji Coroutines 1.3.6, która zdawała się osadzać META-INF / AL2.0, która była już osadzona w innej używanej przeze mnie bibliotece. Aby to naprawić, dodałem następujący fragment kodu do build.gradle modułu, który zawiódł:

configurations.all {
    resolutionStrategy {
        exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug"

    }
}

Biorąc pod uwagę, że działo się to na wielu modułach, przeniosłem ten resolutionStrategykod do mojego build.gradle na poziomie projektu. Potem wszystko działało.

Fred B.
źródło
4

Mam ten sam problem i próbowałem tego

Błąd: Znaleziono więcej niż jeden plik ze ścieżką niezależną od systemu operacyjnego „META-INF / library_release.kotlin_module”

Rozwiązanie:

android {
    packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
    }
}
Bhavesh Moradiya
źródło
3

Miałem podobny problem. dostaję 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 odpowiedziach powyżej, użycie poniższego kodu działa

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

Ale otrzymywałem ten błąd dla 20 różnych plików, więc po wykluczeniu 20 plików zatrzymałem się i próbowałem znaleźć dobre rozwiązanie. Spotkałem także

'Unable to execute dex: Multiple dex files' error.

W końcu udało mi się to rozwiązać.

Po pierwsze (podobnie jak w moim przypadku WillCloseWhenClosed.java był zduplikowanym plikiem), w Android Studio masz opcję „szukaj wszędzie”. Napisz i wyszukaj tam plik. Tam znalazłem wiele wystąpień tego pliku. Więc kliknąłem oba wystąpienia i zobaczyłem ich lokalizację, klikając plik prawym przyciskiem myszy i widząc jego lokalizację, gdy otworzyły się w Android Studio.

Po drugie, zorientowałem się, że mam pewne zależności w pliku gradle. Korzystałem z poniższego kodu

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

a także miałem te same pakiety zip w lokalizacji: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23 !.

To było zbędne i dlatego gradle znajduje 2 pliki. Więc usunąłem moje pakiety zip i rozwiązało to dla mnie błędy. Bądź ostrożny, robiąc to. Musisz dowiedzieć się, który plik lub pakiet ma zostać usunięty.

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

więc poszedłem i usunąłem tutaj plik jsr305-1.3.9.jar.

Jeśli nadal jesteś zdezorientowany, po prostu przejdź do „szukaj wszędzie” w Android Studio, znajdź tam instancje swojego pliku i musisz usunąć jeden z nich. Nie spiesz się i zastanów się, który z nich.

Vi012
źródło
3

Dodawanie

android.useAndroidX = true

android.enableJetifier = true

do gradle.properties działało dla mnie.

Parag Jain
źródło
1

Napotkałem ten problem, najpierw z niektórymi bibliotekami natywnymi (pliki .so), a następnie z plikami java / kotlin. Okazało się, że dołączałem bibliotekę ze źródła, a także odwoływałem się do artefaktów poprzez zależność przechodnią. Sprawdź drzewo zależności, aby sprawdzić, czy nie ma żadnych zbędnych wpisów. Użyj, ./gradlew :app:dependenciesaby uzyskać drzewo zależności. Zamień „app” na nazwę modułu, jeśli nazwa głównego modułu jest inna.

ben_joseph
źródło
1

Spróbuj zmienić minimalną wersję Androida> = 21 w swoim build.gradle android {}

Jemt Tinhwa
źródło
1

Dodaj następujące elementy w pliku gradel poziomu aplikacji w systemie 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'
        exclude("META-INF/*.kotlin_module") 
      } 
Mirza Ahmed Baig
źródło
0

Spróbuj usunąć multidex z domyślnej konfiguracji i sprawdź dziennik błędów kompilacji. Jeśli ten dziennik jest powiązany z klasą INotification. Użyj tego w Androidzie {}

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

To mi pomaga.

Harsh Mittal
źródło
0

Dla mnie poniżej rozwiązanie zadziałało, możesz również uzyskać pomoc, napisałem poniżej wiersza w pliku oceny aplikacji

  packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
Jaykishan Sewak
źródło
0

Byłem podłączony, ale mój projekt został już zmigrowany do systemu AndroidX, ale po ponownej migracji do systemu AndroidX dokonał on częściowej aktualizacji mojego projektu i problem został rozwiązany.

SinaMN75
źródło
0

Dodaj poniższy kod w app.gradle, to rozwiąże wszystkie błędy zależności biblioteki

   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'
    exclude("META-INF/*.kotlin_module")
    exclude 'META-INF/library_release.kotlin_module'
    pickFirst 'lib/armeabi-v7a/libavdevice.so'
    pickFirst 'lib/armeabi/libavdevice.so'
    pickFirst 'lib/armeabi/libswresample.so'
    pickFirst 'lib/armeabi-v7a/libswresample.so'
    pickFirst 'lib/armeabi/libswscale.so'
    pickFirst 'lib/armeabi/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libavutil.so'
    pickFirst 'lib/armeabi/libavutil.so'
    pickFirst 'lib/armeabi-v7a/libavformat.so'
    pickFirst 'lib/armeabi/libavfilter.so'
    pickFirst 'lib/armeabi/libavformat.so'
    pickFirst 'lib/armeabi-v7a/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libswscale.so'
    pickFirst 'lib/armeabi/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libavfilter.so'
}
sanjay
źródło
-1

dla mnie było to raczej .md niż .txt

packagingOptions {
    exclude 'META-INF/LICENSE.md'
    exclude 'META-INF/NOTICE.md'
}
Amin Keshavarzian
źródło
-1

W wielu odpowiedziach na SO dotyczących tego problemu sugerowano dodanie exclude 'META-INF/DEPENDENCIES' i kilka innych wykluczeń. Jednak żaden z nich nie działał dla mnie. W moim przypadku scenariusz wyglądał tak:

Dodałem to w zależnościach:

implementation 'androidx.annotation:annotation:1.1.0'

A także dodałem to w gradle.properties:

android.useAndroidX=true

Oba te dodałem, ponieważ otrzymywałem błąd kompilacji „nie można znaleźć klasy symboli Nullable” i zasugerowano jako rozwiązanie tego problemu w niektórych odpowiedziach, takich jak tutaj

W końcu jednak dostałem błąd:

 More than one file was found with OS independent path 'androidsupportmultidexversion.txt'

Nie excludedziałało dla mnie. W końcu po prostu usunąłem te dodane powyżej wiersze tylko z podejrzeń (Rozwiązane „nie można znaleźć klasy symboli Nullable” w inny alternatywny sposób) i wreszcie pozbyłem się tego błędu kompilacji „Znaleziono więcej niż jeden plik z systemem operacyjnym ...”. Zmarnowałem godziny. Ale w końcu się go pozbyłem.

Atul
źródło
-1

Musisz tylko unieważnić pamięć podręczną i uruchomić ponownie po tym czystym projekcie

E.Akkok
źródło