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


115

После обновления Studio с 0.3.7 до 0.4.0 я не могу скомпилировать свой проект. Я нашел решение для stackoverflow: скопированы повторяющиеся файлы (Android Studio 0.4.0)

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

android {

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

Мой логарифм: журнал

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 Разрабатывать в ubuntu 13.04


2
Внутри androidраздела
Евгений Мартынов

Спасибо. Я поместил блок PackagingOptions () в основной файл конфигурации gradle. Сначала я вставил этот блок в файлы библиотеки gradle. Все работает отлично =)
a.black13

Ответы:


155

Размещение зависимостей вверху и packageOptions в конце сработало для меня.

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

РЕДАКТИРОВАТЬ: Почти все лицензии на ОС включают обязательство «включить копию лицензии» в ваш проект. Это означает, что вы должны включить в свои проекты копии всех лицензий на ОС, которые вы используете. «Исключая» их в gradle, вы нарушаете лицензии.

Исключение их из проекта может быть не лучшим вариантом. Спасибо RS за информацию.


2
@Andree Причина, по которой мы исключаем файлы, заключается в том, что мы не хотим, чтобы файлы .txt (и другие) включались в .apk, который будет сгенерирован при сборке.
biniam

4
exclude не распознается за пределами android {}: /
An-droid

4
Исключить надо внутри android {}, только тогда работает.
Паван Пяти

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

:-) Я только сегодня столкнулся с этой проблемой и нашел эту ветку. И я не замечаю дату.
AlfredZhong

Вы не заметили дату И проигнорировали все остальные ответы.
Невероятный

11

Я столкнулся с той же проблемой, что и в новой версии gradle, у меня работает текстовый формат ниже build.gradle :

В моей папке libs есть две банки jackson.

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 и формат документа (.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'
}

почему у него так много отрицательных голосов, если это в основном то же самое, что и правильный ответ?
Necronet 02

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функции. Я добавлял две зависимости, но одна была подгруппой первой. Это вызвало ошибку, как только я удалил одну из них, я получил чистую сборку. Я рекомендую проверить аналогичную ошибку в вашем блоке зависимостей.


Привет, я давно решил эту проблему, добавив packageOptions (). Спасибо за ответ) +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.