Подтвердить что ты не робот

Повторяющиеся файлы, включая масляный нож с gradle

У меня есть базовое Android-приложение, которое я создал с Android Studio, и у меня проблемы с добавлением butterknife в мою сборку. Я получаю эту ошибку:

Error:: duplicate files during packaging of APK C:\apps\orion\app\build\apk\app-debug-unaligned.apk
Error:Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK META-INF/services/javax.annotation.processing.Processor
    File 1: C:\Users\andres\.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife\4.0.1\f43b36925363701633d01adb8e54df7150397a78\butterknife-4.0.1.jar
    File 2: C:\Users\andres\.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife\4.0.1\f43b36925363701633d01adb8e54df7150397a78\butterknife-4.0.1.jar

Мои зависимости выглядят так:

dependencies {

    compile 'com.android.support:support-v4:+'
    compile 'com.squareup.dagger:dagger-compiler:1.2.1'
    compile 'com.squareup.dagger:dagger:1.2.1'
    compile 'com.jakewharton:butterknife:4.0.1'
    compile 'com.google.android.gms:play-services:4.0.30'
    compile 'com.android.support:appcompat-v7:+'
    compile project(':lib')
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
4b9b3361

Ответ 1

Более поздние версии плагина расскажут вам, как это исправить. Я думаю, что мы ввели исправление в 0.8, поэтому вам, вероятно, следует обновить. Затем исправление должно помещать это в ваш build.gradle

android {
    packagingOptions {
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }
}

Это исключает этот файл из упаковки, который хорош, так как он фактически не нужен в APK.

Ответ 2

Это потому, что вы написали compile для dagger-compiler, замените его на provided, и проблема будет исправлена.

compile 'com.squareup.dagger:dagger:1.2.1'
provided 'com.squareup.dagger:dagger-compiler:1.2.1'

Ответ 3

Самый лучший вариант в версии >= 0.9.1 инструментов сборки Gradle, вероятно, есть:

android {
    packagingOptions {
        pickFirst 'META-INF/services/javax.annotation.processing.Processor'
    }
}

Подробнее см. на странице проекта Android Tools: Новая система сборки.

Изменить: Последнее замечание здесь, если у вас возникли проблемы с сгенерированным кодом, убедитесь, что вы правильно структурируете свои зависимости. Я закончил удаление каких-либо исключений из строки Processor и структурировал мои обработанные аннотации зависимости, например:

compile "org.parceler:parceler-api:0.2.15"
apt "org.parceler:parceler:0.2.15"

и

provided 'com.squareup.dagger:dagger-compiler:1.2.2'
apt 'com.squareup.dagger:dagger-compiler:1.2.2'

Ответ 4

Если после применения указанных выше решений вы по-прежнему сталкиваетесь с той же проблемой, что и я, то если вы используете библиотеку glide, измените версию glide на макс. например.

implementation 'com.github.bumptech.glide:glide:4.10.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'