Android Studio 0.4 Дублікати файлів, скопійованих у APK META-INF / LICENSE.txt


115

Після оновлення своєї студії з 0,3,7 до 0,4,0 я не можу скласти свій проект. Я знайшов рішення щодо stackoverflow: копіюються копії копій (Android Studio 0.4.0)

Я оновив свій проект до gradle 0.7. +, Але не знаю, куди потрібно поставити наступні рядки:

android {

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

Мій logcat: журнал

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 Developing в ubuntu 13.04


2
Всередині androidрозділу
Євген Мартинов

Дякую. Я поміщаю блок packOptions () в основний файл gradle conf. Спочатку я вставив цей блок у бібліотеки файлів gradle. Усі роботи ідеально =)
a.black13

Відповіді:


155

Розміщення залежностей вгорі, а пакунок Опції в кінці працював на мене.

apply plugin: 'android'. 

Ось мій повний build.gradle в папці додатків.

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: Майже всі ліцензії ОС включають зобов’язання "включити копію ліцензії" у ваш проект. Отже, це означає, що ви повинні включити в свої проекти копію всіх ліцензій на ОС, якими ви користуєтеся. "Виключаючи" їх у gradle, ви порушуєте ліцензії.

Виключення їх із проекту може виявитися не найкращим варіантом. Дякую РС за інформацію.


2
@Andree Причина, яку ми виключаємо, полягає в тому, що ми не хочемо, щоб .txt (та інші) файли були включені до .apk, який буде генерований збіркою.
Бініям

4
виключення не розпізнається поза android {}: /
An-droid

4
Виключити має бути всередині android {}, тоді працює лише він.
Pavan Pyati

2
! Це рішення порушує всі ліцензії з відкритим кодом! Оскільки ви зобов'язані додати оригінальний текст ліцензії кожної бібліотеки до свого пакету
RS

2
Привіт. Будь-який. Майже всі ліцензії на ОС включають зобов’язання "включити копію ліцензії" у свій проект. Отже, це означає, що ви повинні включити в свої проекти копію всіх ліцензій на ОС, якими ви користуєтеся. "Виключаючи" їх у gradle, ви порушуєте ліцензії.
RS

47

Увага !! Можливе порушення ліцензії на OpenSource.

Якщо виключати файли License.txt, як було запропоновано вище, ви можете порушити деякі ліцензії на відкриті джерела, оскільки це звичайний момент, коли ліцензії на відкриті джерела погоджуються додати його до свого джерела. Краще перевірте свої ліцензії на відкриті джерела.

Оновлення: Доки не знайдеться кращого рішення, використовуйте

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

наприклад, ви принаймні виконуєте частину ліцензійного зобов'язання


23

просто додати

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

в build.gradle


Наші порушують ліцензію
RS

16

Ви можете виправити це, додавши такий код до 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'
    }
}

Привіт. Цю проблему виправили 1,5 роки тому Дякую за відповідь
a.black13

:-) Я щойно зіткнувся з цією проблемою і знайшов цю тему. І я не помічаю дату.
АльфредЖонг

Ви не помітили дату І проігнорували всі інші відповіді.
Неймовірний січень

11

Я зіткнувся з тією ж проблемою, що і в новій версії gradle, Нижче build.gradle для мене текстовий формат :

У моїй папці «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')
}

Дякую! Я сьогодні стукав головою об це близько 5 годин. :) Це те, packagingOptions { exclude 'libs/jackson...' }що це виправило.
CJBrew

8

Додавання:

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

працював на мене, рішення biniam_Ethiopia, мабуть, найбезпечніше


8

Під час вставлення цього коду

android{

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

БУДУТЬ БЕЗПЕЧНО, якщо помилка відображається

> Дублікати файлів, скопійованих у APK META-INF / LICENSE.txt

потім додайте

 android{

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

}

якщо помилково це відображається

> Дублікати файлів, скопійованих в APK META-INF / LICENSE

потім додайте

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

якщо помилково це відображається

> Дублікати файлів, скопійованих у APK META-INF / License.txt

потім додайте

 android{

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

}

Коротше кажучи, CASE та документ FORMAT (.txt) є настільки важливими.

(ця помилка існує і в Android Studio 1.1.0)


6

Це допоможе вам вирішити проблему

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

Чому в цьому є стільки зворотних запитів, якщо в основному те саме, що належна відповідь?
Некронет

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

Додайте у файл build.gradle файл та синхронізуйте проект


3

Я просто додаю 2:

android{

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

}

Чи буде це все ще включено у виробництво додатків?
RoCk RoCk

2

У мене була подібна помилка і вирішено її без функції packingOptions()та excludeфункції. Я додав дві залежності, але одна була підгрупою першої. Це спричинило помилку, коли я видалив одну з них, я отримав чисту конструкцію. Рекомендую перевірити наявність аналогічної помилки у вашому блоці залежності.


Привіт, я давно вирішив цю проблему, додавши packingOptions (). Дякую за відповідь) +1
a.black13

Ця проблема виправлена ​​в новій доступній версії AS
a.black13

2

При використанні java-jwtта jackson-coreспільному використанні:

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

Це може бути дуже поганою практикою, однак якщо ви включаєте кілька великих бібліотек, ви можете опинитися у сотні таких конфліктів.

Наведене нижче - надзвичайно просте виправлення таких випадків:

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.