Se encontró más de un archivo con la ruta independiente del sistema operativo 'META-INF / LICENSE'

333

Cuando construyo mi aplicación, aparece el siguiente error:

Error: Error de ejecución para la tarea ': aplicación: transformResourcesWithMergeJavaResForDebug'. Se encontró más de un archivo con la ruta independiente del sistema operativo 'META-INF / LICENSE'

Este es mi archivo 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'
}

Cuando agrego este código a mi archivo 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'
        }

Este error se resolvería, pero sucederá otro problema. Me gusta esto:

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én tiene ideas de cómo resolver esto?

Ciro
fuente
Me enfrenté al mismo problema al acceder a la Biblioteca de cliente API de Google para Android. Se resolvió el problema al excluir el módulo HttpClient de las dependencias de gradle. Consulte los documentos de Google para obtener más detalles developers.google.com/api-client-library/java/… busque en la página de documentos con "En Android, deberá excluir explícitamente las dependencias no utilizadas:"
mifthi

Respuestas:

493

Puedes agregar esto yourProject/app/build.gradleadentroandroid{}

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
fuente
23
¿Puede explicar por qué esto funciona y cuál es el significado de "META-INF"? ¡Gracias!
Shreshth Kharbanda
@CodeSlave causa algún problema con apk si no excluimos estos archivos de google.github.io/android-gradle-dsl/current/… Excluir rutas que coincidan con un patrón de exclusión no se incluirán en el APK. que todo lo que se No tengo idea completa sobre este problema
Shaaban Ebrahim
11
Si bien esto puede responder la pregunta, es mejor agregar alguna descripción sobre cómo esta respuesta puede ayudar a resolver el problema. Lea Cómo escribo una buena respuesta para saber más.
Roshana Pitigala
3
En mi caso, también necesitaba agregar 'META-INF / LICENSE.md' y 'META-INF / LICENSE-notice.md'
Klyner
1
Agregar exclusión ("META-INF / *. Kotlin_module") en la lista de packaginOptions
Jaspal
129

En mi caso, fue suficiente para excluir solo la ruta 'META-INF / DEPENDENCIES' en el yourProject/app/build.gradleinterior android{} . Aquí está

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

Y luego hacer Proyecto limpio y Proyecto de reconstrucción.

Mara
fuente
11
Intente excluir 'META-INF / DEPENDENCIAS' en lugar de excluir 'META-INF / LICENCIA'
Pelanes
77
Explicación por favor
Mohammad Ali
1
@SilSur excluye ese archivo, por lo que por error, como en mi código, el mismo error para "META-INF / proguard / androidx-annotations.pro" este archivo, y luego agregué excluir 'META-INF / proguard / androidx-annotations. pro 'y su trabajo.
Gunavant Patel
44
Si bien esto puede responder la pregunta, es mejor agregar alguna descripción sobre cómo esta respuesta puede ayudar a resolver el problema. Lea Cómo escribo una buena respuesta para saber más.
Roshana Pitigala
No es necesario limpiar solo sincronizar archivos gradle
steve moretz
75

Las soluciones aquí no me ayudaron, pero este enlace sí.

Si tiene una biblioteca que agrega algunos archivos .so de Android, como libassmidi.soo libgnustl_shared.sotiene que decirle a Gradle que elija solo uno al empaquetar, de lo contrario obtendrá el conflicto.

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

Estaba teniendo este problema al usar una aplicación React Native como biblioteca en un proyecto de Android. Espero eso ayude

Daniel Reina
fuente
2
Gracias, tuve el mismo problema con un solo archivo .so. Hay otro archivo llamado gdbserver en la misma carpeta y, después de agregar las opciones de empaquetado para la biblioteca, funciona ahora.
Sr. Fish
1
¡Gracias! Me ayudó cuando tuve un JNA aar como dependencia anidada
faisal00813
31

Tenía un mensaje similar

Error: Error de ejecución para la tarea ': aplicación: transformResourcesWithMergeJavaResForDebug'. Se encontró más de un archivo con la ruta independiente del sistema operativo 'constant-values.html'

Para resolverlo, tuve que habilitar la vista de paquetes ( 1 ) en Android Studio, luego buscar en el árbol las bibliotecas y ubicar los duplicados ( 2 )

Luego, ctrl + alt + f12 (o menú RMB) ( 3 ) - y encontró bibliotecas que causaron el problema. Hice una lista de archivos dentro de esas bibliotecas que causaron los problemas, y los escribió en el archivo build.gradle de la aplicación dentro de la sección de Android . Otra opción es tratar con la biblioteca, que contiene archivos duplicados

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

ingrese la descripción de la imagen aquí

Dmitrii Chichuk
fuente
1
¿Cómo "navegas a través del árbol a las bibliotecas y localizas los duplicados"? ¿Realmente revisaste todos los archivos en todas las carpetas?
Desarrollador de Android
1
También estoy confundido acerca de "localizar los duplicados". Hay quizás 100 subentradas en la aplicación / Bibliotecas ... ¿cómo se hace para localizar duplicados?
Freewalker
28

Básicamente, cuando Gradle reúne el archivo apk, copia el contenido de todas las dependencias de compilación. Es lo suficientemente inteligente como para ver que hay un archivo duplicado ... proveniente de dos archivos jar diferentes. Esto podría ser cualquier archivo como a.txt o META-INF / DEPENDENCIES. Puede ser mejor excluir estos archivos usando lo siguiente, en caso de que el archivo esté presente solo con fines informativos.

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

O, en caso de que el archivo sea obligatorio, como un archivo de clase, que se ha duplicado en dos dependencias jar relacionadas entre sí, lo mejor es encontrar alternativas a estos archivos jar, en la forma de una versión más compatible.

ank
fuente
Cuando agrego esto a mi proyecto, aparece otro error que, de nuevo, no puedo resolver. ¿Alguna otra solución?
hetsgandhi
Hetvi Gandhi, ¿Cuál es el error que estás viendo?
tok
20

Estaba teniendo el mismo problema y probé esto

Error: se encontró más de un archivo con la ruta independiente del sistema operativo 'META-INF / proguard / androidx-annotations.pro'

Solución: todo lo que tiene que hacer para solucionar esto es agregar esto a la sección de Android {} en 'build.gradle' de su aplicación

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

Esto sucede cuando se usa

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

Y se arregla en la próxima versión

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

Vairavan
fuente
1
problema similar con org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.3.6, que es el último hasta ahora. tuvo que rebajar
farhan patel
Sí, el mismo problema en 1.3.6
Shefchenko
17

Encontré el mismo error y descubrí que era el resultado de que diferentes módulos contenían las mismas clases de diferentes paquetes .

Por ejemplo, uno usaba el paquete androidx y el otro usaba pre-androidx

Lo resolví migrando el módulo pre-androidx a androidx usando la función incorporada de Android Studio: "Refactor -> Migrate to Androidx ..." sin excluir nada.


Para su situación, puede verificar si tiene desajustes de dependencia entre los módulos.

Owen Chen
fuente
1
¡No olvide hacer una copia de seguridad de la versión actual de su proyecto, ya que migrar a AndroidX puede interrumpir su proyecto!
Kathir
12

He leído todas las respuestas relacionadas con la recepción de este mensaje Android Studio:

Se encontró más de un archivo con la ruta independiente del sistema operativo 'META-INF / LICENSE'

pero en este caso excluir clases no es necesario, solo necesitamos excluir 'META-INF/DEPENDENCIES', esto se puede hacer dentro de /app/build.gradle:

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

}
Jorgesys
fuente
Esto mismo se ha dicho en cientos de otras respuestas en SO
Atul
11

Actualicé Studio de Java 7 a Java 8, y ocurrió este problema. Luego lo resolví de esta manera:

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

En mi aplicación, estaba agregando las dependencias jar como esta:

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

Pero me di cuenta de que ya se habían agregado debido a la siguiente primera línea en dependencias:

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

Esta línea agrega todos los frascos en la carpeta lib a la dependencia de la aplicación.

Por lo tanto, después de eliminar la dependencia adicional implementation files('libs/json-simple-1.1.1.jar')

Está funcionando bien.

Sandeep Yohans
fuente
Esto es útil pero no está relacionado con la respuesta. En las bibliotecas, encontrará metacarpetas de archivos META-INF que pueden ser similares en nombre y formato. Estos causan problemas de archivos duplicados, por lo tanto, deben eliminarse.
Abhinav Saxena el
7

Me he enfrentado a un problema similar al trabajar en un entorno de aplicación de múltiples módulos:

Error: Error de ejecución para la tarea ': aplicación: transformResourcesWithMergeJavaResForDebug'. Se encontró más de un archivo con la ruta independiente del sistema operativo 'META-INF / AL2.0'

Varios de estos módulos míos informaron sobre este problema y ninguna de las soluciones anteriores lo solucionó. Resulta que estaba usando la versión Coroutines 1.3.6 que parecía estar incrustando META-INF / AL2.0 que ya estaba incrustada por otra de las bibliotecas que estaba usando. Para solucionarlo, he agregado el siguiente fragmento de código al build.gradle del módulo que estaba fallando:

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

    }
}

Dado que estaba sucediendo en varios módulos, he movido ese resolutionStrategycódigo a mi nivel de proyecto build.gradle. Todo funcionó después de eso.

Fred B.
fuente
4

Tengo el mismo problema y probé esto

Error: se encontró más de un archivo con la ruta independiente del sistema operativo 'META-INF / library_release.kotlin_module'

Solución:

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

Tuve un problema similar. recibía el mensaje de error

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

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

Como se indica en algunas de las respuestas anteriores, usar el siguiente código funciona

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

Pero recibí este error para 20 archivos diferentes, así que después de excluir 20 archivos, paré e intenté encontrar una solución decente. También me encontré con el

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

Finalmente logré resolver esto.

En primer lugar (como en mi caso WillCloseWhenClosed.java era el archivo duplicado), en Android Studio tiene la opción de 'buscar en todas partes'. Escriba y busque el archivo allí. Allí encontré varias instancias de este archivo. Así que hice clic en ambas instancias y vi su ubicación haciendo clic derecho en el archivo y viendo su ubicación cuando se abrieron en el estudio de Android.

En segundo lugar, descubrí que tenía algunas dependencias en el archivo gradle. Estaba usando el siguiente código

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

y también tenía sus mismos paquetes zip en la ubicación: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23 !.

Así que esto era redundante y por eso Gradle está encontrando 2 archivos. Así que eliminé mis paquetes zip y resolvió los errores por mí. Ten cuidado al hacer esto. Debe averiguar cuál es el archivo o paquete correcto que se eliminará.

En tercer lugar, gradle también crea un archivo zip de estos archivos de errores en esta ubicación (al menos para mí lo hizo): C: \ Archivos de programa \ Android \ Android Studio \ gradle \ m2repository \ com \ google \ code \ findbugs \ jsr305 \ 1.3. 9 \ jsr305-1.3.9.jar!

así que fui y eliminé el archivo jsr305-1.3.9.jar de aquí también.

Si todavía está confundido, simplemente vaya a 'buscar en todas partes' en el estudio de Android, encuentre instancias de su archivo allí y tendría que eliminar uno de ellos. Tómese su tiempo y descubra cuál.

Vi012
fuente
3

Agregando

android.useAndroidX = true

android.enableJetifier = true

a gradle.properties trabajado para mí.

Parag Jain
fuente
1

Enfrenté este problema, primero con algunas bibliotecas nativas (archivos .so) y luego con archivos java / kotlin. Resultó que estaba incluyendo una biblioteca desde la fuente, así como referencias de artefactos a través de una dependencia transitiva. Verifique su árbol de dependencia para ver si hay entradas redundantes. Use ./gradlew :app:dependenciespara obtener el árbol de dependencias. Reemplace "aplicación" con el nombre de su módulo si el nombre del módulo principal es diferente.

ben_joseph
fuente
1

Intente cambiar la versión mínima de Android> = 21 en su build.gradle android {}

Jemt tinhwa
fuente
1

Agregue lo siguiente en el archivo gradel de nivel de aplicación dentro de 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
fuente
0

Intente eliminar multidex de la configuración predeterminada y verifique el registro de errores de compilación. Si ese registro es relacionado con la clase INotification. Use esto en Android {}

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

Esto me ayuda

Mittal áspero
fuente
0

Para mí, la solución a continuación funcionó, también puede obtener ayuda, escribí debajo de la línea en el archivo gradle de la aplicación

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

Estaba conectado, pero mi proyecto ya había migrado a AndroidX, pero después de migrar a androidX nuevamente, refactorizó una parte de mi proyecto y el problema se resolvió.

SinaMN75
fuente
0

Agregue el siguiente código en app.gradle, esto resolverá todos los errores de dependencia de la biblioteca

   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
fuente
-1

para mí, era .md en lugar de .txt

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

En muchas de las respuestas sobre SO sobre este problema, se ha sugerido agregar exclude 'META-INF/DEPENDENCIES' y algunas otras excluir. Sin embargo, ninguno de estos funcionó para mí. En mi caso, el escenario era así:

Había agregado esto en dependencias:

implementation 'androidx.annotation:annotation:1.1.0'

Y también había agregado esto en gradle.properties:

android.useAndroidX=true

Agregué ambos, porque recibía el error de compilación 'no se puede encontrar la clase de símbolo Nullable' y se sugirió como solución a esto en algunas de las respuestas como aquí

Sin embargo, finalmente conseguí un error:

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

No excludeestaba trabajando para mí. Finalmente, simplemente eliminé esas líneas agregadas arriba solo por suspensión (resuelto 'no se puede encontrar la clase de símbolo Nullable' de alguna manera alternativa) y finalmente me deshice de este error de compilación "Se encontró más de un archivo con sistema operativo ...". Perdí horas mías. Pero finalmente lo eliminé.

Atul
fuente
-1

Solo necesita invalidar la caché y reiniciar , después de ese proyecto limpio

E.Akkok
fuente