android - tools - ¿Cómo resolver java.util.zip.ZipException?
install gradle android studio (11)
1.actualizar el servicio de Google Play
2.agregar
compile ''com.google.android.gms:play-services-fitness:8.1.0''
compile ''com.google.android.gms:play-services-wearable:8.1.0''
en lugar de
compile ''com.google.android.gms:play-services:8.1.0''
en el archivo build.gradle.
3)
defaultConfig {
multiDexEnabled true
}
dependencies {
compile ''com.android.support:multidex:1.0.1''
}
Cada vez que intento depurar e implementar mi aplicación de Android (en Android Studio 0.9) aparece el siguiente error:
Execution failed for task '':app:packageAllDebugClassesForMultiDex''.
java.util.zip.ZipException: duplicate entry: android/support/multidex/BuildConfig.class
Para aclarar las cosas aquí hay una breve historia de mis acciones:
- Esta mañana el proyecto estaba funcionando bien
- Se agregaron algunas clases y métodos adicionales
-
Rompió el límite y recibió este error:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
- Decidí agregar soporte multiDex a mi proyecto ya que reducir las dependencias no era una opción
Desde entonces, sigo recibiendo el error descrito justo después de agregar multiDex a mi proyecto siguiendo esta publicación SO Usando Gradle para dividir bibliotecas externas en archivos dex separados para resolver el límite de métodos de Dalvik 64k de Android .
Aquí está mi archivo build.gradle:
apply plugin: ''com.android.application''
repositories {
jcenter()
}
android {
compileSdkVersion 21
buildToolsVersion ''21.1.0''
defaultConfig {
applicationId "com.stackoverflow.application"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
multiDexEnabled = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''
}
}
dexOptions {
preDexLibraries = false
}
}
afterEvaluate {
tasks.matching {
it.name.startsWith(''dex'')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = []
}
dx.additionalParameters += ''--multi-dex''
dx.additionalParameters += "--main-dex-list=$projectDir/<filename>".toString() // enable the main-dex-list
}
}
dependencies {
compile fileTree(dir: ''libs'', include: [''*.jar''])
compile project('':viewPagerIndicatorLibrary'')
compile ''com.google.android:multidex:0.1''
compile ''com.j256.ormlite:ormlite-android:4.48''
compile ''com.j256.ormlite:ormlite-core:4.48''
compile ''de.greenrobot:eventbus:2.2.1''
compile ''se.emilsjolander:stickylistheaders:2.5.1''
compile ''joda-time:joda-time:2.5''
compile ''com.makeramen:roundedimageview:1.4.0''
compile ''javax.inject:javax.inject:1''
compile ''com.squareup.picasso:picasso:2.3.4''
compile ''com.googlecode.libphonenumber:libphonenumber:6.3.1''
compile(''com.google.api-client:google-api-client-gson:1.18.0-rc'') {
exclude module: ''httpclient''
}
compile ''com.google.android.gms:play-services:6.1.71''
compile(''com.google.api-client:google-api-client:1.17.0-rc'') {
exclude(group: ''xpp3'', module: ''xpp3'')
exclude(group: ''org.apache.httpcomponents'', module: ''httpclient'')
exclude(group: ''junit'', module: ''junit'')
exclude(group: ''com.google.android'', module: ''android'')
}
compile(''com.google.api-client:google-api-client-android:1.17.0-rc'') {
exclude(group: ''com.google.android.google-play-services'', module: ''google-play-services'')
}
compile(''com.google.http-client:google-http-client-android:1.17.0-rc'') {
exclude(group: ''com.google.android'', module: ''android'')
}
compile ''com.google.guava:guava:18.0''
}
También tengo otras dependencias del proyecto para usar la biblioteca viewPagerIndicator , así como algunos frascos en mi carpeta / libs:
- android-async-http-1.4.6.jar
- guice-3.0-no_aop.jar
- jsr305-1.3.9.jar
- roboguice-2.0.jar
¡Cualquier consejo sobre cómo podría resolver este problema sin eliminar ninguna de mis dependencias necesarias es bienvenido!
El hilo es un poco viejo, pero también recibí este error.
Mi problema fue que utilicé dos versiones diferentes de com.google.android.gms: play-services en mi archivo gradle.
compile ''com.google.android.gms:play-services-gcm:7.5.0''
compile ''com.google.android.gms:play-services-analytics:7.3.0'' // WRONG!
Asegúrese de utilizar siempre las mismas versiones, como:
compile ''com.google.android.gms:play-services-gcm:7.5.0''
compile ''com.google.android.gms:play-services-analytics:7.5.0''
En mi caso, el motivo fue Facebook Android SDK. Solo excluya la dependencia transitiva:
compile(''com.facebook.android:facebook-android-sdk:+'') {
exclude group: ''com.android.support'', module: ''multidex''
}
En su caso, puede tratarse de otra dependencia: simplemente
multidex
una por una y encontrará la que tiene dependencia
multidex
transitiva.
Estás agregando una biblioteca como esta
(UNA).
compilar archivos (''libs / YOUR_LIBRARY.jar'')
y este paquete de biblioteca ya está disponible en su código.
comentar me gusta o eliminar esta línea
// compila archivos (''libs / YOUR_LIBRARY.jar'')
Cómo saber la copia duplicada de la biblioteca en su proyecto:
descomprima su "YOUR_LIBRARY.jar" y vea el mismo nombre de clase en su código.
Este tipo de error, como la entrada duplicada, se produce cuando alguna clase está en más de un lugar. Para superar este problema, busque de manera simple la clase que muestra entradas duplicadas en el proyecto. Le mostrará todos los caminos donde esta clase presente más de un lugar. En Windows, CNTRL + N es un método abreviado de teclado para buscar archivos. Simplemente intente eliminar una de las bibliotecas o archivos y el problema está resuelto.
Para diagnosticar y solucionar este problema, ejecute este comando gradle:
./gradlew clean app:dependencies
Esto enumerará todas las dependencias en su aplicación en un árbol. Busque los resultados para la clase duplicada ofensiva y agregue
compile(''naughty.library'') {
exclude group: ''foo'', module: ''bar''
}
para eliminar el duplicado
Recientemente tuve este error, y después de mirar mis "Bibliotecas externas" en el estudio de Android, resulta que una de mis bibliotecas se había incluido bajo dos números de versión. (En este caso, era el tiempo de ejecución de cable 1.5.1 y 1.5.2).
Lo que recomendaría es buscar dentro de "Bibliotecas externas" en la vista Proyecto, y ver si hay bibliotecas redundantes allí. Incluye dependencias transitivas también, por lo que puede encontrar algo allí que lo sorprenda.
Si habilita multiDex, debe dejar de hacer la lógica en
afterEvaluate {}
.
El soporte multi-dex se encargará de la lista de dex principal por usted.
vaya a
File/Invalidate Chaches/Restart
y su problema está resuelto
Editar: Esto es un error y se debe corregir. Ver https://code.google.com/p/android/issues/detail?id=81804
También tengo este problema y no tengo una respuesta. Pero esto es lo que puedo agregar:
La clase
BuildConfig
es una clase mágica generada como parte del proceso de construcción.
Por alguna razón, existe una versión con el mismo nombre completo (
android.support.multidex.BuildConfig
) en los
mutildex-1.0.0
y
multidex-instrumentation-1.0.0
.
No creo que hayamos hecho nada malo. Creo que este es un síntoma de estar a la vanguardia. Levanté https://code.google.com/p/android/issues/detail?id=81804 .
tools:overrideLibrary="com.google.android.gms.location, com.google.android.gms.internal"
Hizo el truco para mí (supongo que deberías cambiar la ubicación con cualquier biblioteca de Google que uses)