È stato trovato più di un file con il percorso indipendente dal sistema operativo 'META-INF / LICENSE'


333

Quando creo la mia app, viene visualizzato il seguente errore:

Errore: Esecuzione non riuscita per l'attività ': app: transformResourcesWithMergeJavaResForDebug'. È stato trovato più di un file con il percorso indipendente dal sistema operativo 'META-INF / LICENSE'

Questo è il mio file 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'
}

Quando aggiungo questo codice al mio file 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'
        }

Questo errore sarebbe risolto, ma si verificherà un altro problema. Come questo:

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)

Chi ha idee su come risolverlo?


Ho riscontrato lo stesso problema durante l'accesso alla Libreria client dell'API di Google per Android. Risolto il problema escludendo il modulo HttpClient dalle dipendenze di livello. Consulta i documenti di Google per maggiori dettagli developers.google.com/api-client-library/java/… cerca nella pagina dei documenti con "Su Android, dovrai escludere esplicitamente le dipendenze non utilizzate:"
mifthi,

Risposte:


493

Puoi aggiungerlo yourProject/app/build.gradleall'internoandroid{}

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

23
Puoi spiegare perché funziona e qual è il significato di "META-INF"? Grazie!
Shreshth Kharbanda,

@CodeSlave causa qualche problema con apk se non escludiamo questi file da google.github.io/android-gradle-dsl/current/… I percorsi di esclusione che corrispondono a un modello di esclusione non verranno inclusi nell'APK. che tutto quello che so. non ho idea completa di questo problema
Shaaban Ebrahim,

11
Mentre questo può rispondere alla domanda, è meglio aggiungere una descrizione su come questa risposta può aiutare a risolvere il problema. Si prega di leggere Come posso scrivere una buona risposta per saperne di più.
Roshana Pitigala,

3
Nel mio caso avevo anche bisogno di aggiungere 'META-INF / LICENSE.md' e 'META-INF / LICENSE-notice.md'
Klyner

1
Aggiungi exclude ("META-INF / *. Kotlin_module") nell'elenco packaginOptions
Jaspal

129

Nel mio caso è stato sufficiente escludere solo il percorso "META-INF / DEPENDENCIES" yourProject/app/build.gradleall'interno android{} . Ecco qui

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

E quindi esegui Clean Project e Rebuild Project.


11
Prova a escludere "META-INF / DEPENDENCIES" invece escludi "META-INF / LICENSE"
Pelanes,

7
Spiegazione per favore
Mohammad Ali

1
@SilSur esclude quel file che quindi ti sbagli, come nel mio codice, lo stesso errore per "META-INF / proguard / androidx-annotations.pro" questo file, e quindi ho aggiunto escludi 'META-INF / proguard / androidx-annotations. pro 'e il suo lavoro.
Gunavant Patel,

4
Mentre questo può rispondere alla domanda, è meglio aggiungere una descrizione su come questa risposta può aiutare a risolvere il problema. Si prega di leggere Come posso scrivere una buona risposta per saperne di più.
Roshana Pitigala,

Non è necessario pulire solo la sincronizzazione dei file gradle
steve moretz

75

Le soluzioni qui non mi hanno aiutato, ma questo link ha fatto.

Se hai una libreria che sta aggiungendo alcuni file .so Android - come libassmidi.soo libgnustl_shared.so- devi dire a Gradle di sceglierne solo uno durante il packaging, altrimenti otterrai il conflitto.

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

Ho riscontrato questo problema durante l'utilizzo di un'app React Native come libreria in un progetto Android. Spero che sia d'aiuto


2
Grazie, ho avuto lo stesso problema con un solo file .so. C'è un altro file chiamato gdbserver nella stessa cartella e dopo aver aggiunto il packagingOptions per la libreria funziona ora.
Mr. Fish,

1
Grazie! Aiutato quando avevo un JNA aar come dipendenza nidificata
faisal00813

31

Aveva un messaggio simile

Errore: Esecuzione non riuscita per l'attività ': app: transformResourcesWithMergeJavaResForDebug'. È stato trovato più di un file con il percorso indipendente dal sistema operativo 'constant-valori.html'

Per risolverlo, ho dovuto abilitare la visualizzazione dei pacchetti ( 1 ) in Android Studio, quindi sfogliare l'albero nelle librerie e individuare i duplicati ( 2 )

Quindi, ctrl + alt + f12 (o menu RMB) ( 3 ) - e ha trovato le librerie che hanno causato il problema. Crea un elenco di file all'interno di quelle librerie che hanno causato i problemi e li ha scritti nel file build.gradle dell'app nella sezione Android . Un'altra opzione è quella di gestire la libreria, contenente file duplicati

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

inserisci qui la descrizione dell'immagine


1
Come "sfoglia quindi l'albero nelle librerie e individua i duplicati"? Hai davvero esaminato tutti i file in tutte le cartelle?
sviluppatore Android il

1
Sono anche confuso su "individuare i duplicati". Ci sono forse 100 voci secondarie nell'app / Librerie ... come si fa a localizzare i duplicati?
Freewalker

28

Fondamentalmente quando gradle mette insieme il file apk, copia il contenuto da tutte le dipendenze di compilazione, è abbastanza intelligente da vedere che esiste un file duplicato ... proveniente da due diversi file jar. Potrebbe trattarsi di qualsiasi file come a.txt o META-INF / DEPENDENCIES. Potrebbe essere meglio escludere questi file usando quanto segue, nel caso in cui il file sia presente solo a scopo informativo.

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

O se nel caso, il file è un file obbligatorio come un file di classe, che è stato duplicato su due dipendenze jar correlate tra loro, è meglio trovare alternative a questi barattoli, nel modo di una versione più compatibile.


Quando aggiungo questo al mio progetto, ottengo un altro errore che ancora non riesco a risolvere! Qualche altra soluzione?
hetsgandhi,

Hetvi Gandhi, qual è l'errore che stai vedendo?
ank

20

Stavo avendo lo stesso problema e ho provato questo

Errore: è stato trovato più di un file con il percorso indipendente dal sistema operativo 'META-INF / proguard / androidx-annotations.pro'

Soluzione: tutto ciò che devi fare per risolvere questo problema è aggiungerlo alla sezione android {} nella 'build.gradle' della tua app

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

18

Questo succede quando si usa

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

Ed è stato risolto nella prossima versione

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


1
problema simile con org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.3.6 che è l'ultimo a partire da ora. ha dovuto effettuare il downgrade
farhan patel

Sì, stesso numero su 1.3.6
Shefchenko,

17

Ho riscontrato lo stesso errore e ho scoperto che il risultato di moduli diversi conteneva le stesse classi di pacchetti diversi .

ad esempio, un pacchetto androidx usato e l'altro pre-androidx usato

L'ho risolto migrando il modulo pre-androidx su androidx usando la funzionalità integrata di Android Studio: "Refactor -> Migrate to Androidx ..." senza escludere nulla.


Per la tua situazione, puoi verificare se ci sono differenze di dipendenza tra i moduli.


1
Non dimenticare di fare un backup della versione corrente del tuo progetto poiché la migrazione ad AndroidX potrebbe interrompere il tuo progetto!
Kathir,

12

Ho letto tutte le risposte relative alla ricezione di questo messaggio in Android Studio:

È stato trovato più di un file con il percorso indipendente dal sistema operativo 'META-INF / LICENSE'

ma in questo caso escludere le classi non è necessario, dobbiamo solo escludere 'META-INF/DEPENDENCIES', questo può essere fatto all'interno di /app/build.gradle:

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

}

Lo stesso è stato detto in centinaia di altre risposte su SO
Atul

11

Ho aggiornato Studio da Java 7 a Java 8 e si è verificato questo problema. Quindi l'ho risolto in questo modo:

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

8

Io la mia app, stavo aggiungendo le dipendenze jar in questo modo:

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

Ma mi sono reso conto che erano già stati aggiunti a causa della seguente prima riga nelle dipendenze:

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

Questa riga aggiunge tutti i barattoli nella cartella lib alla dipendenza dell'app.

Quindi dopo aver rimosso la dipendenza extra implementation files('libs/json-simple-1.1.1.jar')

funziona benissimo.


Questo è utile ma non correlato alla risposta. Nelle librerie sono presenti meta-cartelle di file META-INF che possono essere simili per nome e formato. Questi causano problemi di file duplicati quindi devono essere rimossi.
Abhinav Saxena,

7

Ho riscontrato un problema simile lavorando in un ambiente di app a più moduli:

Errore: Esecuzione non riuscita per l'attività ': app: transformResourcesWithMergeJavaResForDebug'. È stato trovato più di un file con il percorso indipendente dal sistema operativo 'META-INF / AL2.0'

Questo problema è stato segnalato da molti di questi miei moduli e nessuna delle soluzioni di cui sopra lo stava risolvendo. Si scopre che stavo usando la versione Coroutines 1.3.6 che sembrava incorporare META-INF / AL2.0 che era già stata incorporata da un'altra delle librerie che stavo usando. Per risolvere il problema, ho aggiunto il seguente frammento di codice al build.gradle del modulo che non funzionava:

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

    }
}

Dato che stava accadendo su più moduli, ho spostato quel resolutionStrategycodice nel mio build.gradle a livello di progetto. Dopo tutto ha funzionato.


4

Sto riscontrando lo stesso problema e ho provato questo

Errore: è stato trovato più di un file con il percorso indipendente dal sistema operativo 'META-INF / library_release.kotlin_module'

Soluzione:

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

3

Ho avuto un problema simile. stavo ricevendo il messaggio di errore -

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

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

Come indicato in alcune delle risposte sopra, l'utilizzo del codice seguente funziona

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

Ma stavo ottenendo questo errore per 20 file diversi, quindi dopo aver escluso 20 file, mi sono fermato e ho cercato una soluzione decente. Avevo anche incontrato il

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

Finalmente sono riuscito a risolverlo.

Innanzitutto (come nel mio caso WillCloseWhenClosed.java era il file duplicato), in Android Studio hai un'opzione di 'cerca ovunque'. Scrivi e cerca il file lì. Lì ho trovato più istanze di questo file. Quindi ho cliccato su entrambe le istanze e ho visto la loro posizione facendo clic con il tasto destro sul file e vedendo la sua posizione quando si aprivano in Android Studio.

In secondo luogo, ho capito che avevo alcune dipendenze nel file gradle. Stavo usando il codice qui sotto

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

e inoltre avevo i loro stessi pacchetti zip nella posizione: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23 !.

Quindi questo era ridondante ed è per questo che Gradle sta trovando 2 file. Quindi ho eliminato i miei pacchetti zip e ho risolto gli errori per me. Fai attenzione mentre lo fai. Devi capire qual è il file o il pacchetto corretto da eliminare.

In terzo luogo, Gradle crea anche una zip di questi file di bug in questa posizione (almeno per quanto mi riguarda) - C: \ Programmi \ Android \ Android Studio \ gradle \ m2repository \ com \ google \ code \ findbugs \ jsr305 \ 1.3. 9 \ jsr305-1.3.9.jar!

così sono andato e ho eliminato il file jsr305-1.3.9.jar anche da qui.

Se sei ancora confuso, vai su 'cerca ovunque' in Android Studio, trova le istanze del tuo file lì e dovresti eliminarne uno. Prenditi il ​​tuo tempo e scopri quale.


3

Aggiunta

android.useAndroidX = true

android.enableJetifier = true

a gradle.properties ha funzionato per me.


1

Ho affrontato questo problema, prima con alcune librerie native (file .so) e poi con i file java / kotlin. Ho scoperto che stavo includendo una libreria dalla fonte, oltre a fare riferimento a artefattivi attraverso una dipendenza transitiva. Controlla l'albero delle dipendenze per vedere se ci sono voci ridondanti. Utilizzare ./gradlew :app:dependenciesper ottenere l'albero delle dipendenze. Sostituisci "app" con il nome del tuo modulo se il nome del modulo principale è diverso.


1

Prova a cambiare la versione minima di Android> = 21 nel tuo build.gradle android {}


1

Aggiungi il seguente file di gradel a livello di app all'interno di 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") 
      } 

0

Prova a rimuovere multidex dalla configurazione predefinita e controlla il registro degli errori di compilazione. Se quel registro è in qualche modo correlabile con la classe INotification. Usa questo in Android {}

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

Questo mi aiuta.


0

Per me sotto la soluzione ha funzionato potresti ricevere aiuto, ho scritto sotto la riga nel file gradle dell'app

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

0

Ero cablato, ma il mio progetto era già stato migrato su AndroidX, ma dopo essere nuovamente migrato su AndroidX, ha riformattato parte del mio progetto e il problema è stato risolto.


0

Aggiungi il codice seguente in app.gradle per risolvere tutti gli errori di dipendenza della libreria

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

-1

per me, era .md piuttosto che .txt

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

-1

In molte delle risposte su SO su questo problema è stato suggerito di aggiungere exclude 'META-INF/DEPENDENCIES' e alcune altre escludono. Tuttavia nessuno di questi ha funzionato per me. Nel mio caso lo scenario era così:

Ho aggiunto questo nelle dipendenze:

implementation 'androidx.annotation:annotation:1.1.0'

E ho anche aggiunto questo in gradle.properties:

android.useAndroidX=true

Entrambi ho aggiunto, perché stavo ottenendo un errore di build "Impossibile trovare la classe di simboli Nullable" ed è stato suggerito come soluzione a questo su alcune risposte come qui

Tuttavia, alla fine sono arrivato a ottenere l'errore:

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

No excludestava lavorando per me. Alla fine ho appena rimosso quelle righe aggiunte appena per sospetto (risolto 'impossibile trovare la classe di simboli Nullable' in qualche modo alternativo) e finalmente mi sono liberato di questo errore di build "Più di un file trovato con OS ...". Ho perso ore mie. Ma finalmente me ne sono liberato.


-1

Devi solo invalidare la cache e riavviare , dopo quel progetto pulito

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.