Android Studio 0.4 Fichiers dupliqués copiés dans APK META-INF / LICENSE.txt

115

Après avoir mis à jour mon Studio de 0.3.7 à 0.4.0, je ne peux pas compiler mon projet. J'ai trouvé une solution sur stackoverflow: fichiers en double copiés (Android Studio 0.4.0)

J'ai mis à jour mon projet vers gradle 0.7. +, Mais je ne sais pas où je dois mettre les chaînes suivantes:

android {

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

Mon logcat: journal

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 dans ubuntu 13.04

a.black13
la source
2
androidSection intérieure
Eugen Martynov
Merci. J'ai mis le bloc packagingOptions () dans le fichier de configuration principal de gradle. J'ai d'abord inséré ce bloc dans les fichiers gradle des bibliothèques. Tout le travail est parfait =)
a.black13

Réponses:

155

Mettre les dépendances en haut et le packageOptions à la fin a fonctionné pour moi.

apply plugin: 'android'. 

Voici mon build.gradle complet dans le dossier de l'application.

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: Presque toutes les licences OS incluent l'obligation "d'inclure une copie de la licence" dans votre projet. Cela signifie donc que vous devez inclure une copie de toutes les licences de système d'exploitation que vous utilisez dans vos projets. En les "excluant" dans gradle, vous enfreignez les licences.

Les exclure du projet n'est peut-être pas la meilleure option. Merci RS pour l'info.

biniam
la source
2
@Andree La raison pour laquelle nous excluons les fichiers est que nous ne voulons pas que les fichiers .txt (et autres) soient inclus dans le .apk qui sera généré par la construction.
biniam
4
l'exclusion n'est pas reconnue en dehors d'android {}: /
An-droid
4
L'exclusion doit être dans Android {}, alors seulement cela fonctionne.
Pavan Pyati
2
! Cette solution viole toutes les licences Open Source! Comme vous êtes obligé d'ajouter le texte de licence original de chaque bibliothèque à votre package
RS
2
Salut. Tout. Presque toutes les licences du système d'exploitation incluent l'obligation «d'inclure une copie de la licence» dans votre projet. Cela signifie donc que vous devez inclure une copie de toutes les licences de système d'exploitation que vous utilisez dans vos projets. En les "excluant" dans gradle, vous enfreignez les licences.
RS
47

Attention!! Violation possible de la licence OpenSource.

En excluant les fichiers license.txt comme proposé ci-dessus, vous pouvez violer certaines licences open source car c'est un point commun dans les licences open source d'accepter de l'ajouter à votre source. Mieux vaut vérifier vos licences open source.

Mise à jour: jusqu'à ce qu'il y ait une meilleure solution, utilisez

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

comme ça, vous remplissez au moins une partie de l'obligation de licence

RS
la source
23

il suffit d'ajouter

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

dans build.gradle

Shankey
la source
Nous violons la licence Open Source comme celle-ci
RS
16

Vous pouvez le résoudre en ajoutant le code suivant à 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
la source
Salut. Ce problème a été résolu il y a 1,5 ans Merci pour la réponse
a.black13
:-) Je viens de rencontrer ce problème aujourd'hui et j'ai trouvé ce fil. Et je ne remarque pas la date.
AlfredZhong
Vous n'avez pas remarqué la date ET ignoré toutes les autres réponses.
L'incroyable janvier
11

J'étais confronté au même problème que dans la nouvelle version de gradle, sous build.gradle format de texte fonctionne pour moi:

Il y a deux jars jackson dans mon dossier 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
la source
Je vous remercie! Je me cognais la tête contre cela pendant ~ 5 heures aujourd'hui. :) C'est le packagingOptions { exclude 'libs/jackson...' }qui l'a corrigé.
CJBrew
8

Ajouter:

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

a fonctionné pour moi, la solution de biniam_Ethiopia est probablement la plus sûre

Jan Wilmans
la source
8

Lors de l'insertion de ce code

android{

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

ASSUREZ-VOUS que si une erreur s'affiche

> Fichiers dupliqués copiés dans APK META-INF / LICENSE.txt

puis ajouter

 android{

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

}

si en erreur il montre

> Dupliquer les fichiers copiés dans l'APK META-INF / LICENSE

puis ajouter

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

si en erreur il montre

> Fichiers dupliqués copiés dans APK META-INF / license.txt

puis ajouter

 android{

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

}

En bref, CASE et le format du document (.txt) sont si importants.

(cette erreur existe également dans Android Studio 1.1.0)

Shreekant N
la source
6

Cela vous aidera à résoudre le problème

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
la source
pourquoi cela a tant de votes négatifs si c'est fondamentalement la même chose que la bonne réponse?
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'
}

Ajouter le fichier build.gradle et le projet de synchronisation

Gajendra Kumar
la source
3

J'ajoute juste 2:

android{

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

}
josedlujan
la source
Cela sera-t-il toujours inclus dans la production d'applications?
RoCk RoCk
2

J'ai eu une erreur similaire et je l'ai résolue sans la fonction packingOptions()et exclude. J'ajoutais deux dépendances mais l'une était un sous-groupe du premier. Cela a causé l'erreur, une fois que j'ai supprimé l'un d'eux, j'ai obtenu une version propre. Je recommande de rechercher une erreur similaire dans votre bloc de dépendance.

Android Amature
la source
Salut, j'ai résolu ce problème il y a longtemps en ajoutant packingOptions (). Merci pour la réponse) +1
a.black13
Ce problème est résolu dans la nouvelle version disponible d'AS
a.black13
2

Lors de l'utilisation java-jwtet jackson-coreutiliser ensemble ce qui suit:

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ş
la source
2

Cela peut très bien être une mauvaise pratique, mais si vous incluez plusieurs grandes bibliothèques, vous pouvez vous retrouver à travailler sur des centaines de ces types de conflits.

Vous trouverez ci-dessous une solution très simple pour de tels cas:

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