Android Studio 0.4 Archivos duplicados copiados en APK META-INF / LICENSE.txt

115

Después de haber actualizado mi Studio de 0.3.7 a 0.4.0, no puedo compilar mi proyecto. Encontré una solución en stackoverflow: archivos duplicados copiados (Android Studio 0.4.0)

Actualicé mi proyecto a gradle 0.7. +, Pero no sé dónde debo poner las siguientes cadenas:

android {

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

Mi 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 Desarrollar en ubuntu 13.04

a.black13
fuente
2
androidSección interior
Eugen Martynov
Gracias. Puse block packagingOptions () en el archivo principal de configuración de gradle. Primero inserté este bloque en archivos gradle de bibliotecas. Todo el trabajo es perfecto =)
a.black13

Respuestas:

155

Poner las dependencias en la parte superior y el packageOptions al final funcionó para mí.

apply plugin: 'android'. 

Aquí está mi build.gradle completo en la carpeta de la aplicación.

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: Casi todas las licencias de SO incluyen la obligación de "incluir una copia de la licencia" en su proyecto. Esto significa que debe incluir una copia de todas las licencias del sistema operativo que usa en sus proyectos. Al "excluirlos" en gradle, viola las licencias.

Excluirlos del proyecto podría no ser la mejor opción. Gracias RS por la información.

biniam
fuente
2
@Andree La razón por la que excluimos los archivos es porque no queremos que los archivos .txt (y otros) se incluyan en el .apk que generará la compilación.
Biniam
4
Excluir no se reconoce fuera del androide {}: /
Un androide-
4
Excluir debe estar dentro de Android {}, entonces solo funciona.
Pavan Pyati
2
! ¡Esta solución viola todas las licencias de código abierto! Como está obligado a agregar el texto de licencia original de cada biblioteca a su paquete
RS
2
Hola. Alguna. Casi todas las licencias de SO incluyen la obligación de "incluir una copia de la licencia" en su proyecto. Esto significa que debe incluir una copia de todas las licencias del sistema operativo que usa en sus proyectos. Al "excluirlos" en gradle, viola las licencias.
RS
47

¡¡Atención!! Posible violación de la licencia OpenSource.

Al excluir los archivos license.txt como se propuso anteriormente, puede violar algunas licencias de código abierto, ya que es un punto común en las licencias de código abierto aceptar agregarlo a su fuente. Mejor revise sus licencias de código abierto.

Actualización: hasta que haya una solución mejor, utilice

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

así, al menos cumple una parte de la obligación de licencia

RS
fuente
23

solo agrega

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

en build.gradle

Shankey
fuente
Estamos violando una licencia de código abierto como esta
RS
16

Puede solucionarlo agregando el siguiente 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
fuente
Hola. Este problema se solucionó hace 1.5 años Gracias por la respuesta
a.black13
:-) Acabo de encontrar este problema hoy y encontré este hilo. Y no me doy cuenta de la fecha.
AlfredZhong
No notó la fecha E ignoró todas las demás respuestas.
El increíble
11

Estaba enfrentando el mismo problema que con la nueva versión de gradle, debajo del formato de texto build.gradle funciona para mí:

Hay dos tarros jackson en mi carpeta 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
fuente
¡Gracias! Estuve golpeándome la cabeza contra esto durante ~ 5 horas hoy. :) Es el packagingOptions { exclude 'libs/jackson...' }que lo arregló.
CJBrew
8

Añadiendo:

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

funcionó para mí, la solución de biniam_Ethiopia es probablemente la más segura

Jan Wilmans
fuente
8

Al insertar este código

android{

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

ASEGÚRESE sise muestra por error

> Archivos duplicados copiados en APK META-INF / LICENSE.txt

Luego añade

 android{

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

}

si se muestra un error

> Archivos duplicados copiados en APK META-INF / LICENSE

Luego añade

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

si se muestra un error

> Archivos duplicados copiados en APK META-INF / license.txt

Luego añade

 android{

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

}

En texto breve, CASE y el formato del documento (.txt) son muy importantes.

(este error también existe en Android Studio 1.1.0)

Shreekant N
fuente
6

Esto te ayudará a resolver el 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
fuente
¿Por qué esto tiene tantos votos negativos si es básicamente lo mismo que la respuesta correcta?
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'
}

Agregue el archivo build.gradle y el proyecto syn

Gajendra kumar
fuente
3

Solo agrego 2:

android{

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

}
josedlujan
fuente
¿Se incluirá esto todavía en la producción de aplicaciones?
RoCk RoCk
2

Tuve un error similar y lo resolví sin la función packingOptions()y exclude. Estaba agregando dos dependencias, pero una era un subgrupo de la primera. Esto causó el error, una vez que eliminé uno de ellos, obtuve una construcción limpia. Recomiendo buscar un error similar dentro de su bloque de dependencia.

Android Amature
fuente
Hola, resolví este problema hace mucho tiempo agregando packageOptions (). Gracias por la respuesta) +1
a.black13
Este problema se solucionó en la nueva versión disponible de AS
a.black 13 de
2

Al usar java-jwty jackson-corejuntos, use lo siguiente:

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ş
fuente
2

Esto puede ser una mala práctica; sin embargo, si incluye varias bibliotecas grandes, es posible que se encuentre trabajando en cientos de este tipo de conflictos.

A continuación se enumera una solución súper simple para tales casos:

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