Er zijn meer dan één bestand gevonden met OS-onafhankelijk pad ‘META-INF/LICENSE’

Als ik mijn app bouw, krijg ik de volgende foutmelding:

Fout: uitvoering mislukt voor taak ‘:app:transformResourcesWithMergeJavaResForDebug’.
Er is meer dan één bestand gevonden met OS-onafhankelijk pad ‘META-INF/LICENSE’

Dit is mijn build.gradle-bestand:

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

Als ik deze code aan mijn build.gradle-bestand toevoeg,

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

Deze fout zou worden opgelost, maar er zal zich een ander probleem voordoen. Zoals dit:

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)

Wie heeft ideeën om dit op te lossen?


Antwoord 1, autoriteit 100%

Je kunt dit toevoegen in yourProject/app/build.gradlebinnen android{}. De functie uitsluitenvoegt de genoemde bron toe aan de lijst met bronnen die niet zijn verpakt in de APK.

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") 
      }          
}

De functie excludeis verouderd in 7.0.2 en u zou iets soortgelijks als dit moeten gebruiken:

android {
   ...
   packagingOptions {
       resources.excludes.add("META-INF/*")
   }
}

Antwoord 2, autoriteit 26%

In mijn geval was het voldoende om alleen pad ‘META-INF/DEPENDENCIES’ op yourProject/app/build.gradlebinnen android{}uit te sluiten. Hier is het

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

En doe vervolgens Project opschonen en Project opnieuw opbouwen.


Antwoord 3, autoriteit 15%

De oplossingen hier hebben me niet geholpen, maar deze linkdeed.

Als je een bibliotheek hebt die Android .so-bestanden toevoegt, zoals libassmidi.soof libgnustl_shared.so, moet je dit aan gradleom er maar één te kiezen bij het verpakken, anders krijg je het conflict.

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

Ik had dit probleem bij het gebruik van een React Native-app als bibliotheek in een Android-project. Ik hoop dat het helpt


Antwoord 4, autoriteit 5%

Als gradle het apk-bestand samenstelt, kopieert het de inhoud van alle compile-afhankelijkheden. Het is intelligent genoeg om te zien dat er een duplicaatbestand is.. afkomstig van twee verschillende jar-bestanden. Dit kan elk bestand zijn zoals a.txt of META-INF/DEPENDENCIES. Het is misschien het beste om deze bestanden uit te sluiten met behulp van het onderstaande, voor het geval het bestand daar alleen voor informatieve doeleinden aanwezig is.

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

Of als het bestand een verplicht bestand is, zoals een klassenbestand, dat is gedupliceerd over twee jar-afhankelijkheden die aan elkaar gerelateerd zijn, is het het beste om alternatieven voor deze jars te vinden, in de vorm van een meer compatibele versie.


Antwoord 5, autoriteit 5%

Ik heb een soortgelijk probleem ondervonden bij het werken in een app-omgeving met meerdere modules:

Fout: uitvoering mislukt voor taak
‘:app:transformResourcesWithMergeJavaResForDebug’. Meer dan één bestand
gevonden met OS-onafhankelijk pad ‘META-INF/AL2.0’

Dit probleem werd gemeld door verschillende van deze modules van mij en geen van de bovenstaande oplossingen loste het op.
Het bleek dat ik versie Coroutines 1.3.6 gebruikte die META-INF/AL2.0 leek in te sluiten die al was ingesloten door een andere van de bibliotheken die ik gebruikte. Om het op te lossen, heb ik het volgende codefragment toegevoegd aan de build.gradle van de module die niet werkte:

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

Aangezien het op meerdere modules gebeurde, heb ik die resolutionStrategy-code verplaatst naar mijn projectniveau build.gradle.
Alles werkte daarna.


Antwoord 6, autoriteit 5%

Een soortgelijk bericht gehad

Fout:Uitvoering mislukt voor taak ‘:app:transformResourcesWithMergeJavaResForDebug’.
Er is meer dan één bestand gevonden met OS-onafhankelijk pad ‘constant-values.html’

Om het op te lossen, moest ik de pakkettenweergave(1) inschakelen in Android Studio, vervolgens door de boomstructuur bladeren naar bibliotheken en de duplicaten lokaliseren(2)

Vervolgens, ctrl+alt+f12 (of RMB-menu)(3) – en vond bibliotheken die het probleem veroorzaakten.
Lijst gemaakt van bestanden in die bibliotheken die de problemen veroorzaakten, en schreef ze naar app’s build.gradle-bestand in de android-sectie. Een andere optie is om met de bibliotheek om te gaan, die dubbele bestanden bevat

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

voer hier de afbeeldingsbeschrijving in


Antwoord 7, autoriteit 4%

Voeg het volgende toe in app-niveau gradle-bestand in 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") 
} 

Antwoord 8, autoriteit 4%

Dit gebeurt bij gebruik

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

En is opgelost in de volgende versie

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


Antwoord 9, autoriteit 3%

Ik had hetzelfde probleem en ik heb dit geprobeerd

Fout: meer dan één bestand gevonden met OS-onafhankelijk pad
‘META-INF/proguard/androidx-annotations.pro’

Oplossing:
Het enige dat u hoeft te doen om dit op te lossen, is dit toe te voegen aan het gedeelte Android { } in de ‘build.gradle’ van uw app

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}

Antwoord 10, autoriteit 3%

Ik ben dezelfde fout tegengekomen en ik ontdekte dat deze het gevolg was van verschillende modules die dezelfde klassen uit verschillende pakketten bevatten.

bijv. Het ene gebruikte androidx-pakket en het andere gebruikte pre-androidx

Ik heb het opgelost door de pre-androidx-module naar Androidx te migreren met behulp van de ingebouwde functie van Android Studio: “Refactor –> Migreren naar Androidx…”zonder iets uit te sluiten.


Voor uw situatie kunt u controleren of er afhankelijkheidsmismatches zijn tussen modules.


Antwoord 11, autoriteit 3%

Het is volkomen veilig om alle meta-infobestanden uit te sluiten die er alleen zijn voor documentatie- en informatiedoeleinden:

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

Bron: https://stackoverflow.com/a/49101232/13093413


Antwoord 12, autoriteit 2%

Ik heb alle antwoorden gelezen over het ontvangen van dit bericht in Android Studio:

Er is meer dan één bestand gevonden met OS-onafhankelijk pad
‘META-INF/LICENTIE’

maar in dit geval is het uitsluiten van klassen niet nodig, we hoeven alleen 'META-INF/DEPENDENCIES'uit te sluiten, dit kan binnen de /app/build.gradle:

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

Antwoord 13, autoriteit 2%

Ik heb Studio geüpdatet van Java 7 naar Java 8 en dit probleem deed zich voor. Toen heb ik het op deze manier opgelost:

android {
    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}

Antwoord 14

Ik mijn app, ik was de jar-afhankelijkheden als volgt aan het toevoegen:

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

Maar ik realiseerde me dat ze al waren toegevoegd vanwege de volgende eerste regel in afhankelijkheden:

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

Deze regel voegt alle jars in de lib-map toe aan app-afhankelijkheid.

Vandaar dat na het verwijderen van de extra afhankelijkheid implementation files('libs/json-simple-1.1.1.jar')

het werkt prima.


Antwoord 15

Toevoegen

android.useAndroidX=true

android.enableJetifier=true

to gradle.propertieswerkte voor mij.


Antwoord 16

Omdat het nog niet is genoemd, kunt u de bestanden ook samenvoegen om in overeenstemming te blijven met de licentievereisten (of gewoon pickFirstgebruiken zoals aangegeven door Daniel Reina).

packagingOptions {
    merge "META-INF/LICENSE"
    merge "META-INF/AL2.0"
    merge "META-INF/LGPL2.1"
}

Referentie: Gradle API 4.2 Verpakkingsopties


Antwoord 17

Ik had een soortgelijk probleem. ik kreeg de foutmelding –

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
More than one file was found with OS independent path 'javax/annotation/WillCloseWhenClosed.java'

Zoals vermeld in sommige van de bovenstaande antwoorden, werkt het gebruik van de onderstaande code

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

Maar ik kreeg deze foutmelding voor 20 verschillende bestanden, dus nadat ik 20 bestanden had uitgesloten, stopte ik en probeerde een fatsoenlijke oplossing te vinden. Ik was ook de

. tegengekomen

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

Het is me eindelijk gelukt om dit op te lossen.

Ten eerste (zoals in mijn geval WillCloseWhenClosed.java het dubbele bestand was), heb je in Android Studio de optie ‘overal zoeken’. Schrijf en zoek naar het bestand daar. Daar vond ik meerdere exemplaren van dit bestand. Dus ik klikte op beide instanties en zag hun locatie door met de rechtermuisknop op het bestand te klikken en de locatie te zien toen ze in Android Studio werden geopend.

Ten tweede kwam ik erachter dat ik enkele afhankelijkheden had in het gradle-bestand. Ik gebruikte de onderstaande code

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

en ook ik had dezelfde zip-pakketten op de locatie :\Users\user\AndroidStudioProjects\git\appname\app\libs\google-http-client-1.23!.

Dus dit was overbodig en daarom vindt gradle 2 bestanden. Dus ik heb mijn zip-pakketten verwijderd en het loste de fouten voor mij op. Wees voorzichtig terwijl u dit doet. Je moet uitzoeken welk bestand of pakket het juiste is om te verwijderen.

Ten derde maakt gradle ook een zip van deze bugbestanden op deze locatie (in ieder geval voor mij gemaakt) – C:\Program Files\Android\Android Studio\gradle\m2repository\com\google\code\findbugs\jsr305 \1.3.9\jsr305-1.3.9.jar!

dus ik heb het bestand jsr305-1.3.9.jar ook hier verwijderd.

Als je nog steeds in de war bent, ga dan gewoon naar ‘overal zoeken’ in Android Studio, vind daar exemplaren van je bestand en je zou er een moeten verwijderen. Neem de tijd en zoek uit welke.


Antwoord 18

Ik heb hetzelfde probleem en ik heb dit geprobeerd

Fout:
Er is meer dan één bestand gevonden met OS-onafhankelijk pad ‘META-INF/library_release.kotlin_module’

Oplossing:

android {
    packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
    }
}

Antwoord 19

Deze fout wordt veroorzaakt door het toevoegen van een ondersteuningsbibliotheek in plaats van AndroidX.
Zorg ervoor dat je welke gebruikt:

voor AndroidX:

dependencies {
    def multidex_version = "2.0.1"
    implementation 'androidx.multidex:multidex:$multidex_version'
}

Als je AndroidX niet gebruikt:

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

Gebruik ook in manifest de naam van de toepassingsklasse in plaats van “android.support.multidex.MultiDexApplication” in de toepassingstag (mijn naam van de toepassingsklasse is G):

de fout:

<application
            android:name="android.support.multidex.MultiDexApplication" >
        ...
</application>

rechts:

<application
            android:name=".G" >
        ...
</application>

Antwoord 20

Gebaseerd op de antwoorden van @JohnnyLambada en @Shaaban Ebrahim

Voor het uitsluiten van geneste bestanden heb ik het volgende gebruikt.

   packagingOptions {
        resources.excludes.add("META-INF/**/*")
    }

PS: Niet spammen met hetzelfde antwoord, maar slechts een suggestie als je een foutmelding krijgt, zoiets als

4 files found with path 'META-INF/gradle/incremental.annotation.processors'.

die fouten van geneste mappen opvangt en ter informatie: ik had mijn afhankelijkheden ingesteld met behulp van kotlin-dsl


Antwoord 21

Dit werkt voor mij

packagingOptions {
   exclude 'META-INF/*'
}

Antwoord 22

Ik heb met dit probleem te maken gehad, eerst met enkele native bibliotheken (.so-bestanden) en vervolgens met java/kotlin-bestanden. Bleek dat ik een bronbibliotheek aan het opnemen was en ook verwees naar artifactory via een transitieve afhankelijkheid. Controleer uw afhankelijkheidsstructuur om te zien of er overbodige vermeldingen zijn. Gebruik ./gradlew :app:dependenciesom de afhankelijkheidsboom te krijgen. Vervang “app” door uw modulenaam als de hoofdmodulenaam anders is.


Antwoord 23

Probeer multidex uit de standaardconfiguratie te verwijderen en controleer het build-foutlogboek.
Als dat logboek enigszins te relateren is aan de INotification-klasse. Gebruik dit in Android{}

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

Dit helpt me.


Antwoord 24

zet dit in de build.gradle (Module AppName)

android {
   // ....
   packagingOptions{
     pickFirst "androidsupportmultidexversion.txt"
  }
}

Antwoord 25

In veel van de antwoorden op SO op dit probleem is gesuggereerd om exclude 'META-INF/DEPENDENCIES'toe te voegen en enkele andere uitsluitingen. Geen van deze werkte echter voor mij. In mijn geval was het scenario als volgt:

Ik had dit toegevoegd in afhankelijkheden:

implementation 'androidx.annotation:annotation:1.1.0'

En ik had dit ook toegevoegd in gradle.properties:

android.useAndroidX=true

Beide had ik toegevoegd, omdat ik een buildfout kreeg ‘kan symboolklasse Nullable niet vinden’ en het werd voorgesteld als oplossing hiervoor op sommige antwoorden zoals hier

Uiteindelijk kreeg ik echter een foutmelding:

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

Geen excludewerkte voor mij. Uiteindelijk heb ik zojuist die toegevoegde regels hierboven gewoon uit verdenking verwijderd (opgelost ‘kan symboolklasse Nullable niet vinden’ op een andere manier) en uiteindelijk heb ik deze “Er is meer dan één bestand gevonden met OS…” build-fout verwijderd. Ik heb uren van mezelf verspild. Maar ben er uiteindelijk vanaf gekomen.


Antwoord 26

Als je dit probleem hebt en je hebt een gradle .jar dependency, zoals dit:

implementation group: 'org.mortbay.jetty', name: 'jetty', version: '6.1.26'

Intervalversies totdat één overeenkomt en de uitzondering oplost, en pas het beste antwoord van deze thread toe.`


Antwoord 27

Als u met een project met meerdere modules werkt en dit probleem tegenkomt tijdens het testen van espresso, moet u de packagingOptions-code toevoegen aan elk gradle-bestand. In mijn geval heb ik onderstaande code toegevoegd voor elk gradle-bestand.

packagingOptions {
    exclude 'META-INF/lib_release.kotlin_module'
}

Antwoord 28

Voeg multiDexEnabled truetoe in android {}

En verwijder implementation 'com.android.support:multidex:x.x.x'van afhankelijkheden


Antwoord 29

in gradle 7.2en hoger kun je het probleem als volgt oplossen:

in je app/build.gradlein androidblok:

 packagingOptions {
        resources.excludes.add("META-INF/notice.txt")
        resources.merges.add("META-INF/LICENSE")
        resources.merges.add("META-INF/AL2.0")
        resources.merges.add("META-INF/LGPL2.1")
    }

Antwoord 30

Werkte voor mij. Voeg deze toe aan de build.gradle van uw app in het Android{}-blok.

packagingOptions {
    exclude 'META-INF/AL2.0'
    exclude 'META-INF/LGPL2.1'
}

Other episodes