Foi encontrado mais de um arquivo com o caminho independente do SO 'META-INF / LICENSE'

333

Quando crio meu aplicativo, recebo o seguinte erro:

Erro: Falha na execução da tarefa ': app: transformResourcesWithMergeJavaResForDebug'. Foi encontrado mais de um arquivo com o caminho independente do SO 'META-INF / LICENSE'

Este é o meu arquivo 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 adiciono esse código ao meu arquivo 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 erro seria resolvido, mas outro problema acontecerá. Como isso:

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)

Quem tem idéias de como resolver isso?

Cyrus
fonte
Eu enfrentei o mesmo problema ao acessar a Biblioteca de clientes da API do Google para Android. Resolvido o problema excluindo o módulo HttpClient das dependências gradle. Consulte os documentos do Google para obter mais detalhes developers.google.com/api-client-library/java/… pesquise a página de documentos com "No Android, você precisará excluir explicitamente dependências não utilizadas:"
mifthi 28/09/19

Respostas:

493

Você pode adicionar isso yourProject/app/build.gradledentroandroid{}

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
fonte
23
Você pode explicar por que isso funciona e qual é o significado de "META-INF"? Obrigado!
Shreshth Kharbanda
@CodeSlave causa algum problema com o apk, se não excluirmos esses arquivos do google.github.io/android-gradle-dsl/current/… Os caminhos de exclusão que correspondem a um padrão de exclusão não serão incluídos no APK. isso tudo que eu sei. Eu não tenho idéia completa sobre esse problema #
Shaaban Ebrahim
11
Embora isso possa responder à pergunta, é melhor adicionar uma descrição de como essa resposta pode ajudar a resolver o problema. Por favor, leia Como escrevo uma boa resposta para saber mais.
Roshana Pitigala
3
No meu caso, eu também precisei adicionar 'META-INF / LICENSE.md' e 'META-INF / LICENSE-notice.md' '
Klyner 24/04/19
1
Adicione exclude ("META-INF / *. Kotlin_module") na lista packaginOptions
Jaspal
129

No meu caso, bastava excluir apenas o caminho 'META-INF / DEPENDENCIES' por yourProject/app/build.gradledentro android{} . Aqui está

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

E então limpe o projeto e reconstrua o projeto.

Mara
fonte
11
Tente excluir 'META-INF / DEPENDENCIES' em vez disso, exclua 'META-INF / LICENSE'
Pelanes
7
Explicação agradar
Mohammad Ali
1
O @SilSur exclui esse arquivo que, por engano, como no meu código, mesmo erro para "META-INF / proguard / androidx-annotations.pro" neste arquivo, e então eu adicionei exclui 'META-INF / proguard / androidx-anotations. pro 'e seu trabalho.
Gunavant Patel
4
Embora isso possa responder à pergunta, é melhor adicionar uma descrição de como essa resposta pode ajudar a resolver o problema. Por favor, leia Como escrevo uma boa resposta para saber mais.
Roshana Pitigala
Você não precisa de limpar apenas a sincronização Gradle arquivos
steve Moretz
75

As soluções aqui não me ajudaram, mas esse link sim.

Se você tem uma biblioteca que está adicionando alguns arquivos .so do Android - como libassmidi.soou libgnustl_shared.so-, você precisa dizer ao gradle para escolher apenas um ao empacotar, caso contrário, você terá o conflito.

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

Eu estava tendo esse problema ao usar um aplicativo React Native como uma biblioteca em um projeto Android. Espero que ajude

Daniel Reina
fonte
2
Obrigado, tive o mesmo problema com apenas um arquivo .so. Há outro arquivo chamado gdbserver na mesma pasta e, após adicionar o packagingOptions para a biblioteca, ele funciona agora.
Sr. Fish
1
Obrigado! Ajudou quando eu tinha um aar JNA como dependência nested
faisal00813
31

Teve mensagem semelhante

Erro: Falha na execução da tarefa ': app: transformResourcesWithMergeJavaResForDebug'. Mais de um arquivo foi encontrado com o caminho independente do SO 'constant-values.html'

Para resolvê-lo, tive que ativar a visualização de pacotes ( 1 ) no Android Studio, navegar pela árvore até as bibliotecas e localizar as duplicatas ( 2 )

Em seguida, ctrl + alt + f12 (ou menu RMB) ( 3 ) - e encontrou as bibliotecas que causaram o problema. Criou uma lista de arquivos dentro das bibliotecas que causaram os problemas e os escreveu no arquivo build.gradle do aplicativo na seção android . Outra opção é lidar com a biblioteca, contendo arquivos duplicados

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

insira a descrição da imagem aqui

Dmitrii Chichuk
fonte
1
Como você "navega pela árvore até as bibliotecas e localiza as duplicatas"? Você realmente revisou todos os arquivos em todas as pastas?
desenvolvedor android
1
Também estou confuso sobre "localizar as duplicatas". Existem talvez 100 subentradas em app / Libraries ... como se faz para localizar duplicatas?
Freewalker
28

Basicamente, quando gradle reúne o arquivo apk, ele copia o conteúdo de todas as dependências de compilação. É inteligente o suficiente para ver que há um arquivo duplicado ... vindo de dois arquivos jar diferentes. Pode ser qualquer arquivo como a.txt ou META-INF / DEPENDENCIES. Talvez seja melhor excluir esses arquivos usando o abaixo, caso o arquivo esteja presente apenas para fins informativos.

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

Ou, se for o caso, o arquivo é um arquivo obrigatório, como um arquivo de classe, duplicado em duas dependências de jar relacionadas entre si, é melhor encontrar alternativas para esses jars, no sentido de uma versão mais compatível.

ank
fonte
Quando adiciono isso ao meu projeto, recebo outro erro que, novamente, não consigo resolver! Alguma outra solução?
Hetsgandhi
Hetvi Gandhi, Qual é o erro que você está vendo?
ank
20

Eu estava tendo o mesmo problema e tentei isso

Erro: foi encontrado mais de um arquivo com o caminho independente do SO 'META-INF / proguard / androidx-annotations.pro'

Solução: tudo o que você precisa fazer para corrigir isso é adicioná-lo à seção android {} no 'build.gradle' do seu aplicativo

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

Isso acontece ao usar

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

E é corrigido na próxima versão

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

Vairavan
fonte
1
problema semelhante com org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.3.6, que é o mais recente até agora. teve que fazer o downgrade
farhan patel
Sim, mesmo problema em 1.3.6
Shefchenko
17

Eu encontrei o mesmo erro e descobri que o resultado de módulos diferentes continha as mesmas classes de pacotes diferentes .

por exemplo, um pacote androidx usado e o outro pré-androidx

Eu o resolvi migrando o módulo pré-androidx para androidx usando o recurso interno do Android Studio: "Refatorar -> Migrar para Androidx ..." sem excluir nada.


Para sua situação, você pode verificar se há alguma incompatibilidade de dependência entre os módulos.

Owen Chen
fonte
1
Não se esqueça de fazer um backup da versão atual do seu projeto, pois a migração para o AndroidX pode danificá-lo!
precisa
12

Li todas as respostas relacionadas à obtenção desta mensagem em Android Studio:

Foi encontrado mais de um arquivo com o caminho independente do SO 'META-INF / LICENSE'

mas, neste caso, excluir classes não é necessário, precisamos excluir apenas 'META-INF/DEPENDENCIES', isso pode ser feito dentro de /app/build.gradle:

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

}
Jorgesys
fonte
O mesmo foi dito em centenas de outras respostas no SO
Atul
11

Atualizei o Studio do Java 7 para o Java 8 e esse problema ocorreu. Então eu resolvi assim:

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

No meu aplicativo, eu estava adicionando as dependências do jar desta forma:

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

Mas percebi que eles já foram adicionados por causa da seguinte primeira linha nas dependências:

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

Essa linha adiciona todos os jars na pasta lib à dependência do aplicativo.

Portanto, após remover a dependência extra implementation files('libs/json-simple-1.1.1.jar')

está funcionando bem.

Sandeep Yohans
fonte
Isso é útil, mas não relacionado à resposta. Nas bibliotecas, você encontra as meta-pastas de arquivos META-INF, que podem ser semelhantes em nome e formato. Isso causa problema de arquivo duplicado, portanto, deve ser removido.
Abhinav Saxena
7

Eu enfrentei um problema semelhante ao trabalhar em um ambiente de aplicativos de vários módulos:

Erro: Falha na execução da tarefa ': app: transformResourcesWithMergeJavaResForDebug'. Mais de um arquivo foi encontrado com o caminho independente do SO 'META-INF / AL2.0'

Esse problema estava sendo relatado por vários desses módulos meus e nenhuma das soluções acima a corrigia. Acontece que eu estava usando a versão Coroutines 1.3.6, que parecia incorporar o META-INF / AL2.0, que já estava incorporado por outra das bibliotecas que eu estava usando. Para corrigi-lo, adicionei o seguinte trecho de código ao build.gradle do módulo que estava com falha:

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

    }
}

Dado que isso estava acontecendo em vários módulos, mudei esse resolutionStrategycódigo para o meu nível de projeto build.gradle. Tudo funcionou depois disso.

Fred B.
fonte
4

Estou com o mesmo problema e tentei isso

Erro: foi encontrado mais de um arquivo com o caminho independente do SO 'META-INF / library_release.kotlin_module'

Solução:

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

Eu tive um problema parecido. eu estava recebendo a mensagem de erro -

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

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

Conforme indicado em algumas das respostas acima, o uso do código abaixo funciona

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

Mas eu estava recebendo esse erro para 20 arquivos diferentes, então, após excluir 20 arquivos, parei e tentei encontrar uma solução decente. Eu também tinha encontrado o

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

Eu finalmente consegui resolver isso.

Em primeiro lugar (como no meu caso, WillCloseWhenClosed.java era o arquivo duplicado), no android studio você tem a opção de 'pesquisar em todos os lugares'. Escreva e procure o arquivo lá. Lá encontrei várias instâncias deste arquivo. Então, eu cliquei nas duas instâncias e vi a localização delas clicando com o botão direito do mouse no arquivo e vendo sua localização quando elas foram abertas no android studio.

Em segundo lugar, descobri que tinha algumas dependências no arquivo gradle. Eu estava usando o código abaixo

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

e também tive os mesmos pacotes zip no local: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23 !.

Então isso foi redundante e é por isso que o gradle está encontrando 2 arquivos. Então eu apaguei meus pacotes zip e ele resolveu os erros para mim. Tenha cuidado ao fazer isso. Você precisa descobrir qual é o arquivo ou pacote correto a ser excluído.

Em terceiro lugar, o gradle também faz um zip desses arquivos de erro neste local (pelo menos para mim) - C: \ Arquivos de programas \ Android \ Android Studio \ gradle \ m2repository \ com \ google \ code \ findbugs \ jsr305 \ 1.3. 9 \ jsr305-1.3.9.jar!

então eu fui e excluí o arquivo jsr305-1.3.9.jar daqui também.

Se você ainda está confuso, basta ir na 'pesquisa em todos os lugares' no android studio, encontrar instâncias do seu arquivo lá e você teria que excluir um deles. Leve o seu tempo e descobrir qual.

Vi012
fonte
3

Adicionando

android.useAndroidX = true

android.enableJetifier = true

para gradle.properties trabalharam para mim.

Parag Jain
fonte
1

Eu enfrentei esse problema, primeiro com algumas bibliotecas nativas (arquivos .so) e depois com arquivos java / kotlin. Aconteceu que eu estava incluindo uma biblioteca da fonte, bem como referenciando artefatos por meio de uma dependência transitiva. Verifique sua árvore de dependência para ver se existem entradas redundantes. Use ./gradlew :app:dependenciespara obter a árvore de dependência. Substitua "app" pelo nome do módulo, se o nome do módulo principal for diferente.

ben_joseph
fonte
1

Tente alterar a versão mínima do Android> = 21 no seu build.gradle android {}

Jemt tinhwa
fonte
1

Adicione os seguintes arquivos gradel no nível do aplicativo no 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
fonte
0

Tente remover o multidex da configuração padrão e verifique o log de erros de construção. Se esse log estiver relacionado à classe INotification. Use isso no android {}

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

Isso me ajuda.

Harsh Mittal
fonte
0

Para mim, abaixo a solução funcionou, você pode obter ajuda também, escrevi abaixo da linha no arquivo gradle do aplicativo

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

Eu estava conectado, mas meu projeto já foi migrado para o AndroidX, mas depois de migrar para o androidX novamente, ele refatorou parte do meu projeto e o problema foi resolvido.

SinaMN75
fonte
0

Adicione o código abaixo em app.gradle, isso resolverá todos os erros de dependência da 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
fonte
-1

para mim, era .md em vez de .txt

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

Em muitas das respostas sobre SO neste problema, foi sugerido adicionar exclude 'META-INF/DEPENDENCIES'e excluir outras. No entanto, nenhum desses funcionou para mim. No meu caso, o cenário era assim:

Eu adicionei isso nas dependências:

implementation 'androidx.annotation:annotation:1.1.0'

E também adicionei isso em gradle.properties:

android.useAndroidX=true

Eu adicionei os dois, porque estava recebendo o erro de compilação 'não é possível encontrar a classe de símbolo Nullable' e foi sugerido como solução para isso em algumas respostas, como aqui

No entanto, acabei encontrando um erro:

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

Não excludeestava funcionando para mim. Finalmente, acabei de remover as linhas adicionadas acima, por suspeita (Resolvido 'não pode encontrar a classe de símbolo Nullable' de alguma maneira alternativa) e, finalmente, me livrei desse erro de compilação "Mais de um arquivo foi encontrado com o SO ...". Eu perdi horas minhas. Mas finalmente se livrou disso.

Atul
fonte
-1

Você só precisa invalidar o cache e reiniciar , depois que o Clean Project

E.Akkok
fonte