574 votes

Plus d'un fichier a été trouvé avec le chemin indépendant du système d'exploitation 'META-INF/LICENSE'.

Lorsque je construis mon application, j'obtiens l'erreur suivante :

Erreur : L'exécution de la tâche ':app:transformResourcesWithMergeJavaResForDebug' a échoué. Plus d'un fichier a été trouvé 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 surviendrait. Comme celui-ci :

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 ?

2 votes

J'ai rencontré le même problème lors de l'accès à la bibliothèque client API de Google pour Android. J'ai résolu le problème en excluant le module HttpClient des dépendances de Gradle. Reportez-vous à la documentation de Google pour plus de détails. developers.google.com/api-client-library/java/ rechercher la page de documentation avec "Sur Android, vous devrez explicitement exclure les dépendances inutilisées :"

0 votes

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

831voto

Shaaban Ebrahim Points 2953

Vous pouvez l'ajouter dans yourProject/app/build.gradle à l'intérieur de android{} . Le site exclure ajoute la ressource nommée à la liste des ressources qui ne sont pas emballées dans l'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") 
      }          
}

El exclude est dépréciée dans la version 7.0.2 et vous devriez utiliser quelque chose de similaire à ceci :

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

77 votes

Pouvez-vous m'expliquer pourquoi cela fonctionne et quelle est la signification de "META-INF" ? Merci.

2 votes

@CodeSlave cela cause des problèmes avec l'apk si nous n'avons pas exclu ces fichiers de l'apk. 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.

0 votes

Pouvez-vous nous en dire un peu plus à ce sujet ? J'ai essayé et cela a fonctionné mais mon erreur dit qu'il a découvert deux 'META-INF/DEPENDENCIES'. Comme j'emballe également ce fichier, j'aurais dû recevoir une nouvelle erreur, non ?

208voto

Mara Points 1370

Dans mon cas, il suffisait d'exclure uniquement le chemin 'META-INF/DEPENDENCIES' dans le fichier yourProject/app/build.gradle à l'intérieur de android{} . Le voici

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

Et ensuite faire le projet de nettoyage et le projet de reconstruction.

11 votes

Essayez d'exclure 'META-INF/DEPENDENCIES' au lieu d'exclure 'META-INF/LICENSE'.

21 votes

Explication, s'il vous plaît

3 votes

@SilSur exclure ce fichier qui donc vous en erreur comme dans mon code même erreur pour "META-INF/proguard/androidx-annotations.pro" ce fichier, et puis j'ai été ajouter exclure 'META-INF/proguard/androidx-annotations.pro' et son travail.

107voto

Daniel Reina Points 1702

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

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

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

J'avais ce problème lorsque j'utilisais une application React Native comme bibliothèque dans un projet Android. J'espère que cela vous aidera

2 votes

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 d'emballage pour la bibliothèque, cela fonctionne maintenant.

1 votes

Merci ! Cela m'a aidé lorsque j'avais un aar JNA comme dépendance imbriquée.

0 votes

Merci ! Dans mon cas, j'ai ajouté la ligne suivante pickFirst "**/libarcore_sdk_c.so" fonctionne bien.

46voto

ank Points 366

En fait, lorsque Gradle crée le fichier apk, il copie le contenu de toutes les dépendances de la compilation. Il est assez intelligent pour voir qu'il y a un fichier en double, provenant de deux fichiers jar différents. Cela pourrait être n'importe quel fichier comme a.txt ou META-INF/DEPENDENCIES. Il peut être préférable d'exclure ces fichiers en utilisant la commande ci-dessous, au cas où le fichier ne serait présent que pour des raisons d'information.

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

Ou si le fichier est un fichier obligatoire comme un fichier de classe, qui a été dupliqué à travers deux dépendances jar qui sont liées l'une à l'autre, il est préférable de trouver des alternatives à ces jars, sous la forme d'une version plus compatible.

0 votes

Lorsque je l'ajoute à mon projet, j'obtiens une autre erreur que je ne parviens pas à résoudre ! Une autre solution ?

1 votes

Hetvi Gandhi, quelle est l'erreur que vous voyez ?

0 votes

Dans mon cas, cette dépendance a causé le problème : implémentation 'com.google.apis:google-api-services-people:v1-rev20210120-1.31.0'.

37voto

Dmitriy Chichuk Points 277

J'ai eu un message similaire

Erreur:L'exécution a échoué pour la tâche ':app:transformResourcesWithMergeJavaResForDebug'. Plus d'un fichier a été trouvé avec le chemin indépendant de l'OS 'constant-values.html'.

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

Ensuite, ctrl+alt+f12 (ou menu RMB)( 3 ) - et a trouvé les bibliothèques qui ont causé le problème. J'ai dressé la liste des fichiers de ces bibliothèques qui posaient problème, et les ai écrits dans le fichier build.gradle de l'application, à l'intérieur du fichier Android section. L'autre option consiste à traiter la bibliothèque, qui contient des fichiers en double.

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

enter image description here

4 votes

Comment "parcourir ensuite l'arbre jusqu'aux bibliothèques, et localiser les doublons" ? Avez-vous vraiment passé en revue tous les fichiers de tous les dossiers ?

2 votes

Je suis également confus à propos de "localiser les doublons". Il y a peut-être 100 sous-entrées dans les applications/bibliothèques... comment faire pour localiser les doublons ?

0 votes

Dans mon cas, j'ai dû ajouter un caractère de remplacement au chemin d'accès afin d'exclure le fichier dans le sous-dossier, par exemple "**/file_to_exclude.dll". J'exclue également un dossier et ses enfants avec "folder_content_to_exclude/**".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X