Plusieurs fichiers ont été trouvés avec le chemin indépendant du système d'exploitation «META-INF / LICENSE»

333

Lorsque je crée mon application, j'obtiens l'erreur suivante:

Erreur: l'exécution a échoué pour la tâche ': app: transformResourcesWithMergeJavaResForDebug'. Plusieurs fichiers ont été trouvés avec le chemin indépendant du système d'exploitation «META-INF / LICENSE»

Voici mon fichier 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'
}

Lorsque j'ajoute ce code à mon fichier 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'
        }

Cette erreur serait résolue, mais un autre problème se produira. Comme ça:

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)

Qui a des idées pour résoudre ce problème?

Cyrus
la source
J'ai rencontré le même problème lors de l'accès à la bibliothèque cliente Google API pour Android. Résolution du problème en excluant le module HttpClient des dépendances de gradle. Reportez - vous Google docs pour plus de détails developers.google.com/api-client-library/java/... recherche sur la page docs avec « Sur Android, vous devez exclure explicitement les dépendances inutilisées: »
mifthi

Réponses:

493

Vous pouvez l'ajouter à l' yourProject/app/build.gradleintérieurandroid{}

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
la source
23
Pouvez-vous expliquer pourquoi cela fonctionne et quelle est la signification de "META-INF"? Je vous remercie!
Shreshth Kharbanda
@CodeSlave, cela cause un problème avec apk si nous n'excluons pas ces fichiers de google.github.io/android-gradle-dsl/current/… Les chemins d'exclusion qui correspondent à un modèle d'exclusion ne seront pas inclus dans l'APK. c'est tout ce que je sais. je n'ai pas une idée complète de ce problème
Shaaban Ebrahim
11
Bien que cela puisse répondre à la question, il est préférable d'ajouter une description de la façon dont cette réponse peut aider à résoudre le problème. Veuillez lire Comment écrire une bonne réponse pour en savoir plus.
Roshana Pitigala
3
Dans mon cas, j'ai également dû ajouter «META-INF / LICENSE.md» et «META-INF / LICENSE-notice.md»
Klyner le
1
Ajouter exclude ("META-INF / *. Kotlin_module") dans la liste packaginOptions
Jaspal
129

Dans mon cas, il suffisait d'exclure uniquement le chemin 'META-INF / DEPENDENCIES' à l' yourProject/app/build.gradleintérieur android{} . C'est ici

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

Et puis faites Clean Project et Rebuild Project.

Mara
la source
11
Essayez d'exclure 'META-INF / DEPENDENCES' au lieu d'exclure 'META-INF /
LICENSE
7
Explication s'il vous plaît
Mohammad Ali
1
@SilSur exclut ce fichier qui vous donc par erreur comme dans mon code même erreur pour "META-INF / proguard / androidx-annotations.pro" ce fichier, et puis j'ai été ajouté exclure 'META-INF / proguard / androidx-annotations. pro 'et son travail.
Gunavant Patel
4
Bien que cela puisse répondre à la question, il est préférable d'ajouter une description de la façon dont cette réponse peut aider à résoudre le problème. Veuillez lire Comment écrire une bonne réponse pour en savoir plus.
Roshana Pitigala
Vous n'avez pas besoin de nettoyer simplement les fichiers de synchronisation synchrones
steve moretz
75

Les solutions ici ne m'ont pas aidé, mais ce lien l'a fait.

Si vous avez une bibliothèque qui ajoute des fichiers Android .so - comme libassmidi.soou libgnustl_shared.so- vous devez dire à gradle de n'en choisir qu'un lors de l'empaquetage, sinon vous obtiendrez le conflit.

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

J'avais ce problème lors de l'utilisation d'une application React Native en tant que bibliothèque dans un projet Android. J'espère que ça aide

Daniel Reina
la source
2
Merci, j'ai eu le même problème avec un seul fichier .so. Il y a un autre fichier appelé gdbserver dans le même dossier et après avoir ajouté les options de packaging pour la bibliothèque, il fonctionne maintenant.
M. Fish
1
Je vous remercie! A aidé lorsque j'avais une JNA aar en tant que dépendance imbriquée
faisal00813
31

Avait un message similaire

Erreur: l'exécution a échoué pour la tâche ': app: transformResourcesWithMergeJavaResForDebug'. Plusieurs fichiers ont été trouvés avec le chemin indépendant du système d'exploitation 'constant-values.html'

Pour le résoudre, j'ai dû activer la vue des packages ( 1 ) dans Android Studio, puis parcourir l'arborescence jusqu'aux bibliothèques et localiser les doublons ( 2 )

Ensuite, ctrl + alt + f12 (ou menu RMB) ( 3 ) - et trouvé les bibliothèques à l'origine du problème. Faire la liste des fichiers à l'intérieur de ces bibliothèques qui ont causé les problèmes et les écrire dans le fichier build.gradle de l'application dans la section Android . Une autre option consiste à gérer la bibliothèque contenant des fichiers en double

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

entrez la description de l'image ici

Dmitrii Chichuk
la source
1
Comment "parcourez-vous ensuite l'arborescence jusqu'aux bibliothèques et localisez-vous les doublons"? Avez-vous vraiment parcouru tous les fichiers de tous les dossiers?
développeur Android
1
Je suis également confus au sujet de «localiser les doublons». Il y a peut-être 100 sous-entrées dans l'application / les bibliothèques ... comment procéder pour localiser les doublons?
Freewalker
28

Fondamentalement, lorsque gradle rassemble le fichier apk, il copie le contenu de toutes les dépendances de compilation, il est assez intelligent pour voir qu'il y a un fichier en double ... provenant de deux fichiers jar différents. Il peut s'agir de n'importe quel fichier comme a.txt ou META-INF / DEPENDENCIES. Il peut être préférable d'exclure ces fichiers à l'aide de ce qui suit, au cas où le fichier ne s'y trouve qu'à des fins d'information.

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

Ou si, dans le cas, le fichier est un fichier obligatoire comme un fichier de classe, qui a été dupliqué sur deux dépendances de jar liées entre elles, il est préférable de trouver des alternatives à ces jars, à la manière d'une version plus compatible.

ank
la source
Quand j'ajoute ceci à mon projet, j'obtiens une autre erreur que je ne peux pas résoudre encore! Une autre solution?
hetsgandhi
Hetvi Gandhi, quelle est l'erreur que vous voyez?
ank
20

J'avais le même problème et j'ai essayé

Erreur: plusieurs fichiers ont été trouvés avec le chemin indépendant du système d'exploitation «META-INF / proguard / androidx-annotations.pro»

Solution: tout ce que vous avez à faire pour résoudre ce problème consiste à l'ajouter à la section Android {} dans le "build.gradle" de votre application.

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}
Apoorva Jain
la source
18

Cela se produit lors de l'utilisation

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

Et est corrigé dans la prochaine version

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

Vairavan
la source
1
problème similaire avec org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.3.6 qui est le dernier en date. a dû rétrograder
farhan patel
Oui, même problème le 1.3.6
Shefchenko
17

J'ai rencontré la même erreur, et j'ai trouvé qu'elle résultait de différents modules contenant les mêmes classes de différents packages .

Par exemple, un package androidx utilisé et l'autre pré-androidx utilisé

Je l'ai résolu en migrant le module pré-androidx vers androidx en utilisant la fonction intégrée d'Android Studio: "Refactor -> Migrer vers Androidx ..." sans rien exclure.


Pour votre situation, vous pouvez vérifier si vous avez des incompatibilités de dépendance entre les modules.

Owen Chen
la source
1
N'oubliez pas de faire une sauvegarde de la version actuelle de votre projet car la migration vers AndroidX peut interrompre votre projet!
Kathir
12

J'ai lu toutes les réponses liées à la réception de ce message Android Studio:

Plusieurs fichiers ont été trouvés avec le chemin indépendant du système d'exploitation «META-INF / LICENSE»

mais dans ce cas, l'exclusion des classes n'est pas nécessaire, il suffit d'exclure 'META-INF/DEPENDENCIES', cela peut être fait à l'intérieur de /app/build.gradle:

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

}
Jorgesys
la source
Cela a été dit dans des centaines d'autres réponses sur SO
Atul
11

J'ai mis à jour Studio de Java 7 vers Java 8 et ce problème s'est produit. Ensuite, je l'ai résolu de cette façon:

android {
    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}
Manasvi
la source
8

Dans mon application, j'ajoutais les dépendances du pot comme ceci:

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

Mais j'ai réalisé qu'ils ont déjà été ajoutés en raison de la première ligne suivante dans les dépendances:

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

Cette ligne ajoute tous les fichiers jars du dossier lib à la dépendance de l'application.

Par conséquent, après avoir supprimé la dépendance supplémentaire implementation files('libs/json-simple-1.1.1.jar')

ça marche bien.

Sandeep Yohans
la source
Ceci est utile mais n'est pas lié à la réponse. Dans les bibliothèques, vous trouverez des fichiers méta-dossiers META-INF qui peuvent être similaires en nom et en format. Celles-ci provoquent un problème de fichier en double et doivent donc être supprimées.
Abhinav Saxena
7

J'ai rencontré un problème similaire en travaillant dans un environnement d'application à plusieurs modules:

Erreur: l'exécution a échoué pour la tâche ': app: transformResourcesWithMergeJavaResForDebug'. Plusieurs fichiers ont été trouvés avec le chemin indépendant du système d'exploitation «META-INF / AL2.0»

Ce problème était signalé par plusieurs de mes modules et aucune des solutions ci-dessus ne le résolvait. Il s'avère que j'utilisais la version Coroutines 1.3.6 qui semblait incorporer META-INF / AL2.0 qui était déjà incorporée par une autre des bibliothèques que j'utilisais. Pour le corriger, j'ai ajouté l'extrait de code suivant au build.gradle du module qui échouait:

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

    }
}

Étant donné que cela se produisait sur plusieurs modules, j'ai déplacé ce resolutionStrategycode dans mon build.gradle au niveau du projet. Tout a fonctionné après cela.

Fred B.
la source
4

J'ai le même problème et j'ai essayé

Erreur: fichiers ont été trouvés avec le chemin indépendant du système d'exploitation «META-INF / library_release.kotlin_module»

Solution:

android {
    packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
    }
}
Bhavesh Moradiya
la source
3

J'avais un problème similaire. je recevais le message d'erreur -

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

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

Comme indiqué dans certaines des réponses ci-dessus, l'utilisation du code ci-dessous fonctionne

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

Mais j'obtenais cette erreur pour 20 fichiers différents, donc après avoir exclu 20 fichiers, je me suis arrêté et j'ai essayé de trouver une solution décente. J'avais également rencontré le

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

J'ai finalement réussi à résoudre ce problème.

Tout d'abord (comme dans mon cas WillCloseWhenClosed.java était le fichier en double), dans Android Studio, vous avez la possibilité de `` rechercher partout ''. Écrivez-y et recherchez le fichier. Là, j'ai trouvé plusieurs instances de ce fichier. J'ai donc cliqué sur les deux instances et vu leur emplacement en cliquant avec le bouton droit sur le fichier et en voyant son emplacement lors de leur ouverture dans Android Studio.

Deuxièmement, j'ai compris que j'avais des dépendances dans le fichier gradle. J'utilisais le code ci-dessous

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

et j'ai également eu leurs mêmes packages zip à l'emplacement: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23 !.

C'était donc redondant et c'est pourquoi gradle trouve 2 fichiers. J'ai donc supprimé mes packages zip et cela a résolu les erreurs pour moi. Soyez prudent en faisant cela. Vous devez déterminer quel est le bon fichier ou package à supprimer.

Troisièmement, gradle crée également un zip de ces fichiers de bogues à cet emplacement (au moins pour moi, il a été créé) - C: \ Program Files \ Android \ Android Studio \ gradle \ m2repository \ com \ google \ code \ findbugs \ jsr305 \ 1.3. 9 \ jsr305-1.3.9.jar!

donc je suis allé et j'ai supprimé le fichier jsr305-1.3.9.jar d'ici aussi.

Si vous êtes toujours confus, lancez simplement la `` recherche partout '' dans Android Studio, trouvez des instances de votre fichier et vous devrez supprimer l'un d'entre eux. Prenez votre temps et déterminez lequel.

Vi012
la source
3

Ajouter

android.useAndroidX = true

android.enableJetifier = true

to gradle.properties a fonctionné pour moi.

Parag Jain
la source
1

J'ai rencontré ce problème, d'abord avec certaines bibliothèques natives (fichiers .so) puis avec des fichiers java / kotlin. Il s'est avéré que j'incluais une bibliothèque à partir de la source ainsi que le référencement artificiel via une dépendance transitive. Vérifiez votre arbre de dépendance pour voir s'il existe des entrées redondantes. Utilisez ./gradlew :app:dependenciespour obtenir l'arborescence des dépendances. Remplacez «app» par le nom de votre module si le nom du module principal est différent.

ben_joseph
la source
1

Essayez de changer la version minimale d'Android> = 21 dans votre build.gradle android {}

Jemt tinhwa
la source
1

Ajouter le fichier gradel suivant au niveau de l'application dans 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
la source
0

Essayez de supprimer multidex de la configuration par défaut et consultez le journal des erreurs de génération. Si ce journal est en relation avec la classe INotification. Utilisez-le dans Android {}

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

Cela m'aide.

Harsh Mittal
la source
0

Pour moi, la solution ci-dessous a fonctionné, vous pouvez également obtenir de l'aide, j'ai écrit la ligne ci-dessous dans le fichier gradle de l'application

  packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
Jaykishan Sewak
la source
0

J'étais câblé, mais mon projet était déjà migré vers AndroidX, mais après une nouvelle migration vers androidX, il a refactorisé une partie de mon projet et le problème a été résolu.

SinaMN75
la source
0

Ajoutez le code ci-dessous dans app.gradle, cela résoudra toutes les erreurs de dépendance de la bibliothèque

   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
la source
-1

pour moi, c'était .md plutôt que .txt

packagingOptions {
    exclude 'META-INF/LICENSE.md'
    exclude 'META-INF/NOTICE.md'
}
Amin Keshavarzian
la source
-1

Dans de nombreuses réponses sur SO à ce problème, il a été suggéré d'ajouter exclude 'META-INF/DEPENDENCIES' et certains autres exclut. Cependant, aucun de ces éléments n'a fonctionné pour moi. Dans mon cas, le scénario était comme ceci:

J'avais ajouté cela dans les dépendances:

implementation 'androidx.annotation:annotation:1.1.0'

Et aussi je l'avais ajouté dans gradle.properties:

android.useAndroidX=true

J'avais ajouté les deux, car j'obtenais une erreur de construction «ne peut pas trouver la classe de symboles Nullable» et il a été suggéré comme solution à cela sur certaines des réponses comme ici

Cependant, j'ai finalement atterri en obtenant une erreur:

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

Non excludetravaillait pour moi. Enfin, je viens de supprimer les lignes ajoutées ci-dessus juste par suspicion (Résolu 'ne peut pas trouver la classe de symboles Nullable' d'une manière alternative) et enfin je me suis débarrassé de l'erreur de construction "Plus d'un fichier a été trouvé avec OS ...". J'ai perdu des heures. Mais finalement je m'en suis débarrassé.

Atul
la source
-1

Vous avez juste besoin d' invalider le cache et redémarrer , après ce projet propre

E.Akkok
la source