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


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.


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


23

il suffit d'ajouter

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

dans build.gradle


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

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

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


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)


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

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


3

J'ajoute juste 2:

android{

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

}

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.


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

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 "**"
    }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.