android - ejemplo - implementation com jakewharton butterknife 7.0 1
Duplique archivos mientras incluye Butterknife con Gradle (3)
Tengo una aplicación básica de Android que creé con Android Studio, y tengo problemas para agregar Butterknife a mi compilación. Me sale este error:
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
Mis dependencias se ven así:
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''])
}
Esto se debe a que escribió compile
para dagger-compiler
, reemplazarlo con provided
y el problema se solucionará.
compile ''com.squareup.dagger:dagger:1.2.1''
provided ''com.squareup.dagger:dagger-compiler:1.2.1''
La mejor opción en la versión> = 0.9.1 de las herramientas de compilación de Gradle es probablemente:
android {
packagingOptions {
pickFirst ''META-INF/services/javax.annotation.processing.Processor''
}
}
Para obtener más información, consulte la página del Proyecto de Herramientas de Android: tools.android.com/tech-docs/new-build-system .
Edición: una última nota aquí si comienza a tener problemas con el código generado, asegúrese de estructurar sus dependencias correctamente. Terminé eliminando cualquier exclusión de la línea de Procesador y estructurando mis dependencias procesadas de anotación como:
compile "org.parceler:parceler-api:0.2.15"
apt "org.parceler:parceler:0.2.15"
y
provided ''com.squareup.dagger:dagger-compiler:1.2.2''
apt ''com.squareup.dagger:dagger-compiler:1.2.2''
Las versiones posteriores del complemento le indicarán cómo solucionarlo. Creo que introdujimos la revisión en 0.8, por lo que probablemente deberías actualizar. Entonces la solución es poner esto en tu build.gradle
android {
packagingOptions {
exclude ''META-INF/services/javax.annotation.processing.Processor''
}
}
Esto excluirá este archivo del paquete, lo cual está bien, ya que en realidad no es necesario en la APK.