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?


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

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.


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


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


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.


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

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


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.


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

}

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

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.


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.


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

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.


3

Adicionando

android.useAndroidX = true

android.enableJetifier = true

para gradle.properties trabalharam para mim.


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.


1

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


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

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.


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

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.


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

-1

para mim, era .md em vez de .txt

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

-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.


-1

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.