Android Studio 0.4 File duplicati copiati nell'APK META-INF / LICENSE.txt


115

Dopo aver aggiornato il mio Studio da 0.3.7 a 0.4.0, non riesco a compilare il mio progetto. Ho trovato una soluzione su stackoverflow: file duplicati copiati (Android Studio 0.4.0)

Ho aggiornato il mio progetto al gradle 0.7. +, Ma non so dove devo mettere le prossime stringhe:

android {

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

Il mio 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

Sviluppo PS in Ubuntu 13.04


2
androidSezione interna
Eugen Martynov

Grazie. Ho inserito il blocco packagingOptions () nel file conf gradle principale. Per prima cosa ho inserito questo blocco nei file gradle delle librerie. Tutto funziona perfettamente =)
Black13

Risposte:


155

Mettere le dipendenze in cima e le opzioni di pacchetto alla fine ha funzionato per me.

apply plugin: 'android'. 

Ecco il mio build.gradle completo nella cartella dell'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'
    }
}

EDIT: quasi tutte le licenze del sistema operativo includono l'obbligo di "includere una copia della licenza" nel progetto. Quindi questo significa che devi includere una copia di tutte le licenze del sistema operativo che usi nei tuoi progetti. "Escludendoli" in gradle, violate le licenze.

Escluderli dal progetto potrebbe non essere l'opzione migliore. Grazie RS per le informazioni.


2
@Andree Il motivo per cui escludiamo i file è perché non vogliamo che i file .txt (e altri) vengano inclusi nel .apk che verrà generato dalla build.
biniam

4
l'esclusione non è riconosciuta al di fuori di Android {}: /
An-droid

4
Escludi dovrebbe essere all'interno di Android {}, quindi funziona solo.
Pavan Pyati

2
! Questa soluzione viola tutte le licenze open source! Poiché sei obbligato ad aggiungere il testo della licenza originale di ciascuna libreria al tuo pacchetto
RS

2
Ciao. Qualunque. Quasi tutte le licenze del sistema operativo includono l'obbligo di "includere una copia della licenza" nel progetto. Quindi questo significa che devi includere una copia di tutte le licenze del sistema operativo che usi nei tuoi progetti. "Escludendoli" in gradle, violate le licenze.
RS

47

Attenzione!! Possibile violazione della licenza OpenSource.

Escludendo i file license.txt come proposto sopra, potresti violare alcune licenze opensource poiché è un punto comune nelle licenze opensource accettare di aggiungerlo alla tua fonte. Controlla meglio le tue licenze opensource.

Aggiornamento: fino a quando non ci sarà una soluzione migliore, usa

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

in questo modo soddisfi almeno una parte dell'obbligo di licenza


23

basta aggiungere

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

in build.gradle


I nostri stanno violando la licenza opensource in questo modo
RS

16

Puoi risolverlo aggiungendo il seguente codice 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'
    }
}

Ciao. Questo problema è stato risolto 1,5 anni fa Grazie per la risposta
a.black13

:-) Ho appena incontrato questo problema oggi e ho trovato questo thread. E non noto la data.
AlfredZhong

Non hai notato la data E hai ignorato tutte le altre risposte.
L'incredibile gen

11

Stavo affrontando lo stesso problema della nuova versione di gradle, sotto il formato di testo build.gradle funziona per me:

Ci sono due vasi jackson nella mia cartella 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')
}

Grazie! Oggi ho sbattuto la testa contro questo per circa 5 ore. :) È quello packagingOptions { exclude 'libs/jackson...' }che l'ha risolto.
CJBrew

8

Aggiunta:

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

ha funzionato per me, la soluzione di biniam_Ethiopia è probabilmente la più sicura


8

Durante l'inserimento di questo codice

android{

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

ASSICURARSI se per errore viene visualizzato

> File duplicati copiati nell'APK META-INF / LICENSE.txt

Poi aggiungi

 android{

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

}

se per errore sta mostrando

> File duplicati copiati nell'APK META-INF / LICENSE

Poi aggiungi

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

se per errore sta mostrando

> File duplicati copiati nell'APK META-INF / license.txt

Poi aggiungi

 android{

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

}

In breve, il testo CASE e il formato del documento (.txt) sono così importanti.

(questo errore esiste anche in Android Studio 1.1.0)


6

Questo ti aiuterà a risolvere il 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'
}

perché questo ha così tanti voti negativi se è fondamentalmente la stessa della risposta corretta?
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'
}

Aggiungi il file build.gradle e sincronizza il progetto


3

Aggiungo solo 2:

android{

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

}

Sarà ancora incluso nella produzione dell'app?
RoCk RoCk

2

Ho avuto un errore simile e l'ho risolto senza la funzione packingOptions()e exclude. Stavo aggiungendo due dipendenze, ma una era un sottogruppo del primo. Ciò ha causato l'errore, una volta rimosso uno di essi ho ottenuto una build pulita. Consiglio di verificare un errore simile all'interno del blocco delle dipendenze.


Ciao, ho risolto questo problema molto tempo fa aggiungendo packingOptions (). Grazie per la risposta) +1
Black13

Questo problema è stato risolto nella nuova versione disponibile di AS
a.black13

2

Quando si utilizza java-jwte jackson-coreinsieme utilizzare quanto segue:

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

2

Questa potrebbe benissimo essere una cattiva pratica, tuttavia se includi più librerie di grandi dimensioni, potresti trovarti a lavorare su centinaia di questi tipi di conflitti.

Di seguito è elencata una soluzione semplicissima per questi casi:

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.