Android Studio 0.4 arquivos duplicados copiados no APK META-INF / LICENSE.txt

115

Depois de atualizar meu Studio de 0.3.7 para 0.4.0, não consigo compilar meu projeto. Encontrei uma solução para stackoverflow: arquivos duplicados copiados (Android Studio 0.4.0)

Atualizei meu projeto para gradle 0.7. +, Mas não sei onde devo colocar as próximas strings:

android {

    packagingOptions {
       exclude 'META-INF/LICENSE.txt'
    }
}

Meu logcat: log

Execution failed for task ':Prog:packageDebug'.
> Duplicate files copied in APK META-INF/LICENSE.txt
    File 1: /home/scijoker/AndroidStudioProjects/ProgProject/Prog/libs/httpclient-4.1.1.jar
    File 2: /home/scijoker/AndroidStudioProjects/ProgProject/Prog/libs/httpclient-4.1.1.jar

PS Develop in ubuntu 13.04

a.black13
fonte
2
androidSeção interna
Eugen Martynov
Obrigado. Eu coloquei block packagingOptions () no arquivo principal de configuração do gradle. Primeiro eu inseri este bloco em arquivos gradle de bibliotecas. Todo o trabalho está perfeito =)
a.black13

Respostas:

155

Colocar as dependências no topo e packageOptions no final funcionou para mim.

apply plugin: 'android'. 

Aqui está meu build.gradle completo na pasta do app.

dependencies {
    compile 'com.android.support:support-v4:+'
    compile files('libs/apache-mime4j-0.6.jar')
    compile files('libs/httpmime-4.0.jar')
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 10
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-    rules.txt'
    }


    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }
}

EDITAR: Quase todas as licenças do sistema operacional incluem a obrigação de "incluir uma cópia da licença" em seu projeto. Então, isso significa que você deve incluir uma cópia de todas as licenças do sistema operacional que você usa em seus projetos. Ao "excluí-los" no gradle, você viola as licenças.

Excluí-los do projeto pode não ser a melhor opção. Obrigado RS pela informação.

biniam
fonte
2
@Andree O motivo pelo qual excluímos os arquivos é porque não queremos que os arquivos .txt (e outros) sejam incluídos no .apk que será gerado pelo build.
biniam
4
excluir não é reconhecido fora do android {}: /
An-droid
4
Excluir deve estar dentro do android {}, então só funciona.
Pavan Pyati de
2
! Esta solução viola todas as licenças de código aberto! Como você é obrigado a adicionar o texto da licença original de cada biblioteca ao seu pacote
RS
2
Oi. Qualquer. Quase todas as licenças do sistema operacional incluem a obrigação de "incluir uma cópia da licença" em seu projeto. Portanto, isso significa que você deve incluir uma cópia de todas as licenças do sistema operacional que usa em seus projetos. Ao "excluí-los" no gradle, você viola as licenças.
RS
47

Atenção!! Possível violação da licença OpenSource.

Ao excluir os arquivos license.txt conforme proposto acima, você pode violar algumas licenças de código aberto, pois é um ponto comum em licenças de código aberto concordar em adicioná-lo à sua fonte. Melhor verificar suas licenças de código aberto.

Atualização: até que haja uma solução melhor, use

packagingOptions {
   pickFirst  'META-INF/license.txt'
}

assim, você pelo menos cumpre uma parte da obrigação da licença

RS
fonte
23

apenas adicione

android {
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
    }
}

em build.gradle

shankey
fonte
Nossa licença de código aberto está violando como esta
RS
16

Você pode corrigi-lo adicionando o seguinte código a project/app/build.gradle:

android {
    // Fixed build error : Duplicate files copied in APK META-INF/xxx
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE.txt'
    }
}
AlfredZhong
fonte
Oi. Este problema foi corrigido há 1,5 anos Obrigado pela resposta
a.black13
:-) Acabei de encontrar esse problema hoje e encontrei este tópico. E não percebo a data.
AlfredZhong
Você não percebeu a data E ignorou todas as outras respostas.
O incrível janeiro
11

Eu estava enfrentando o mesmo problema da nova versão do gradle, abaixo do formato de texto build.gradle que funciona para mim:

Existem dois jars jackson na minha pasta libs.

android {
         compileSdkVersion 21
         buildToolsVersion "21.1.2"

         defaultConfig {
            applicationId "com.omtlab.myapplication"
            minSdkVersion 14
            targetSdkVersion 21
            versionCode 1
            versionName "1.0"
         }
         buildTypes {
             release {
                 minifyEnabled false
                 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
         }
         packagingOptions {
            exclude 'libs/jackson-core-asl-1.9.13.jar'
            exclude 'libs/jackson-mapper-asl-1.9.13.jar'
            exclude 'META-INF/ASL2.0'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/NOTICE'
         }
}

dependencies {
    //compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile files('libs/jackson-core-asl-1.9.13.jar')
    compile files('libs/jackson-mapper-asl-1.9.13.jar')
}
Dhiral Pandya
fonte
Obrigado! Eu estava batendo minha cabeça contra isso por ~ 5 horas hoje. :) É o packagingOptions { exclude 'libs/jackson...' }que consertou.
CJBrew
8

Adicionando:

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

funcionou para mim, a solução de biniam_Ethiopia é provavelmente a mais à prova de falhas

Jan Wilmans
fonte
8

Ao inserir este código

android{

packagingOptions{
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
 }
}

TENHA CERTEZA se no erro ele está mostrando

> Arquivos duplicados copiados no APK META-INF / LICENSE.txt

então adicione

 android{

packagingOptions{
    exclude 'META-INF/LICENSE.txt'
 }

}

se estiver errado , está mostrando

> Arquivos duplicados copiados no APK META-INF / LICENSE

então adicione

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

se estiver errado , está mostrando

> Arquivos duplicados copiados no APK META-INF / license.txt

então adicione

 android{

packagingOptions{
    exclude 'META-INF/license.txt'
 }

}

Em um texto curto, CASE e FORMATO de documento (.txt) são muito importantes.

(este erro também existe no Android Studio 1.1.0)

Shreekant N
fonte
6

Isso ajudará você a resolver o problema

packagingOptions {
    exclude 'META-INF/ASL2.0'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/DEPENDENCIES'
}
Suresh Sarak
fonte
por que isso tem tantos votos negativos se é basicamente o mesmo que a resposta adequada?
Necronet
4
packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LGPL2.1'
}

Adicionar o arquivo build.gradle e o projeto syn

Gajendra Kumar
fonte
3

Acabei de adicionar 2:

android{

packagingOptions{
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/LICENSE'
 }

}
Josedlujan
fonte
Isso ainda será incluído na produção do aplicativo?
RoCk RoCk
2

Eu tive um erro semelhante e resolvi sem a função packingOptions()e exclude. Eu estava adicionando duas dependências, mas uma era um subgrupo da primeira. Isso causou o erro, uma vez que removi um deles, obtive uma compilação limpa. Recomendo verificar se há um erro semelhante em seu bloco de dependência.

Android Amature
fonte
Olá, resolvi esse problema há muito tempo adicionando packingOptions (). Obrigado pela resposta) +1
a.black13
Este problema foi corrigido na nova versão disponível do AS
a.black13
2

Ao usar java-jwte em jackson-coreconjunto, use o seguinte:

exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml")
Olcay Ertaş
fonte
2

Isso pode muito bem ser uma prática ruim, no entanto, se você estiver incluindo várias bibliotecas grandes, poderá se ver trabalhando em centenas desses tipos de conflitos.

Listado abaixo está uma solução super simples para esses casos:

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
Mapsy
fonte