android - java util zip zipException: entrada duplicada
android-studio gradle (4)
No necesita compilar las mismas dependencias en cada módulo por separado, como su aplicación: gradle está compilando ''com.android.support:support-v4:24.2.1''
que ya ha sido compilado en su biblioteca gradle como ''com.android.support:support-v4:18.+
''donde puedo ver que ha agregado el módulo de la biblioteca como una dependencia a la aplicación: gradle, aquí está tratando de replicarlo. Lo mismo ocurre con otros módulos también. A menos que sean independientes.
Consejo: Además, no use versiones anónimas como ''com.android.support:support-v4:18.+''
sino que use las versiones apropiadas.
Mientras ejecuto el proyecto recibo este error
Error: ejecución fallida para la tarea '': ..........''. com.android.build.api.transform.TransformException: java.util.zip.ZipException: entrada duplicada: javax / annotation / CheckForNull.class
Así es como se ve mi aplicación: gradle:
apply plugin: ''com.android.application''
android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
useLibrary ''org.apache.http.legacy''
defaultConfig {
applicationId "com.sample.Example"
minSdkVersion 15
targetSdkVersion 24
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
}
}
}
dependencies {
compile (project('':library'')){
exclude module: ''support-v4''
}
compile (project('':facebookLib'')){
exclude module: ''support-v4''
}
compile ''com.google.http-client:google-http-client-gson:1.20.0''
compile ''com.google.code.gson:gson:2.4''
compile files(''libs/CWAC-SackOfViewsAdapter.jar'')
compile files(''libs/FlurryAgent.jar'')
compile files(''libs/google-api-client-1.15.0-rc.jar'')
compile files(''libs/google-api-client-android-1.15.0-rc.jar'')
compile files(''libs/google-api-services-androidpublisher-v1-rev15-1.15.0-rc.jar'')
compile files(''libs/google-http-client-1.15.0-rc.jar'')
compile files(''libs/google-http-client-android-1.15.0-rc.jar'')
compile files(''libs/google-http-client-jackson-1.15.0-rc.jar'')
compile files(''libs/google-http-client-jackson2-1.15.0-rc.jar'')
compile files(''libs/google-oauth-client-1.15.0-rc.jar'')
compile files(''libs/google-oauth-client-java6-1.15.0-rc.jar'')
compile files(''libs/httpmime-4.2.jar'')
compile files(''libs/in-app-purchasing-1.0.3.jar'')
compile files(''libs/jackson-core-2.1.3.jar'')
compile files(''libs/jackson-core-asl-1.9.11.jar'')
compile files(''libs/json_simple-1.1.jar'')
compile files(''libs/jsr305-1.3.9.jar'')
compile files(''libs/picasso-2.1.1.jar'')
compile files(''libs/signpost-commonshttp4-1.2.1.1.jar'')
compile files(''libs/signpost-core-1.2.1.1.jar'')
compile files(''libs/signpost-jetty6-1.2.1.1.jar'')
compile files(''libs/twitter4j-core-4.0.1.jar'')
compile files(''libs/amazon-device-messaging-1.0.1.jar'')
compile ''com.google.android.gms:play-services:9.6.1''
compile ''com.android.support:appcompat-v7:24.2.1''
compile ''com.android.support:support-v4:24.2.1''
compile ''com.android.support:design:24.2.1''
compile ''com.android.support:recyclerview-v7:24.2.1''
compile ''com.android.support:cardview-v7:24.2.1''
compile ''com.android.support:multidex:1.0.1''
}
volea: gradle
android {
compileSdkVersion 17
buildToolsVersion "24.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
}
}
}
biblioteca: gradle
android {
compileSdkVersion 16
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 4
targetSdkVersion 4
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
}
}
}
dependencies {
compile ''com.android.support:support-v4:18.0.0''
}
facebookLib: gradle
android {
compileSdkVersion 17
buildToolsVersion "24.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt''
}
}
}
dependencies {
compile ''com.android.support:support-v4:18.0.0''
}
¿Alguien puede sugerir una salida a este error? Gracias por adelantado.
com.android.support:support-v4:_____
Esta biblioteca se usa varias veces. Entonces, esto es lo que puedes hacer. haz esto en el gradle de tu biblioteca o en el gradle de facebooklib:
compile(project('':facebookLib'')) {
exclude module: ''support-v4''
}
O
compile(project('':library'')) {
exclude module: ''support-v4''
}
Sugerencia: debe crear una tarea gradle para imprimir sus dependencias al compilarlas y examinarlas. Vea si hay algo que pueda eliminar / mejorar
EDITAR:
ejecuta este comando en la pestaña del terminal de tu Android Studio.
./gradlew app:dependencies
Esto imprimirá todas las dependencias y sus (sub) dependencias. Mire a través de él y vea cuál de las dependencias se llama dos veces donde.
Cada vez que veas la misma biblioteca dos veces, debes usar el método de exclude
que se muestra arriba para excluir a esa moudle o grupo.
Mira aquí para más detalles. Es una explicación agradable y simple. https://www.linkedin.com/pulse/how-find-dependencies-particular-dependency-gradle-hesamedin-kamalan-1
Podría hacer una limpieza de dependencias en Android Studio. Al hacer esto, encontrará las bibliotecas referenciadas por módulo en la vista de árbol. De esa forma, encontrará qué dependencias generan el error de entrada duplicado. Busque en su proyecto qué archivos están usando o haciendo referencia a CheckForNull.class. Tome nota del paquete que lo contiene.
Abra la ventana del terminal en su proyecto y ejecute el siguiente comando
gradlew clean app:dependencies
Tenga en cuenta que TODAS las dependencias se eliminarán y volverán a descargarse. Si tiene muchas bibliotecas de gradle, puede tardar unos minutos en volver a descargarlas. Después de eso, encontrará un resumen donde puede filtrar el paquete que busca. En mi caso, el problema fue con el paquete apache.commons. Hago el filtro y encuentro algo como esto:
+--- com.amazonaws:aws-android-sdk-s3:2.4.0
| +--- com.amazonaws:aws-android-sdk-core:2.4.0 (*)
| +--- com.amazonaws:aws-android-sdk-kms:2.4.0
| | /--- com.amazonaws:aws-android-sdk-core:2.4.0 (*)
| +--- org.apache.commons:commons-io:1.3.2
| | /--- commons-io:commons-io:1.3.2 -> 2.4
| +--- commons-io:commons-io:2.4
| /--- org.bouncycastle:bcprov-jdk16:1.44
En mi caso, era una entrada duplicada generada por AWS Android SDK, referida a la dependencia de commons-io.
Finalmente, solo haga la exclusión en su archivo gradle de esta manera (recuerde que en mi caso fue una dependencia diferente):
compile(''com.amazonaws:aws-android-sdk-s3:2.4.0'')
{
exclude group: ''org.apache.commons''
}
Ejecute lo siguiente para encontrar los duplicados
task findDuplicates {
doLast {
String findMe = ''javax/annotation/CheckForNull.class''
configurations.compile.files.each { file ->
if (file.name.endsWith(''.jar'')) {
def classMatches = zipTree(file).matching {
include findMe
}.files
if (!classMatches.empty) {
println "Found $findMe in $file ${classMatches.size()} time(s)"
}
}
}
}
}