android - "La conversión al formato Dalvik falló con el error 1" en un JAR externo
android-sdk-1.6 (30)
En mi aplicación de Android en Eclipse recibo el siguiente error.
EXCEPCIÓN SUPERIOR INESPERADA:
java.lang.IllegalArgumentException: ya agregada: Lorg / xmlpull / v1 / XmlPullParser;
....
La conversión al formato Dalvik falló con error 1
Este error solo aparece cuando agrego un archivo JAR externo específico a mi proyecto. Busqué durante mucho tiempo la posible solución, pero ninguna de las posibles soluciones funciona. Incluso intenté cambiar a Android 1.6 en lugar de 1.5 (la versión actual que uso).
A menudo, para mí, la limpieza del proyecto NO soluciona este problema.
Pero cerrar el proyecto en Eclipse y luego volver a abrirlo parece arreglarlo en esos casos ...
Actualizando Proguard a la última versión lo solucioné para mí.
- La ruta de mi proguard era
C:/Program Files (x86)/Android/android-sdk/tools/proguard/
- Descargué la nueva versión desde here
- y reemplazó las carpetas bin y lib
¡GRACIAS A DIOS!
Aquí hay otro escenario, y solución:
Si se encuentra con este problema recientemente después de actualizar el ADT para Eclipse:
- En el proyecto de su aplicación, compruebe si hay carpetas de origen vinculadas que apunten a los proyectos de su biblioteca (tienen nombres en la forma "LibraryName_src")
- Seleccione todos esos proyectos, haga clic derecho, elija " Crear ruta " -> " Eliminar de la ruta de compilación ".
- Seleccione " Desenlazar también la carpeta del proyecto " y haga clic en " Sí ".
- Limpia, reconstruye y vuelve a desplegar el proyecto.
Parece que la razón es que algunas versiones anteriores de ADT vincularon las carpetas de origen del proyecto a los proyectos "secundarios", y la combinación actual de ADT / Dex ya no es compatible con esa solución.
EDITAR: esto se confirma mediante una entrada de Android Dev Blog, específicamente esta : vea el 8vo párrafo en adelante.
En general, parece que este problema surge cuando hay archivos JAR innecesarios en la ruta de compilación.
Me enfrenté a este problema mientras trabajaba en IntelliJ IDEA . Para mí sucedió porque Mockito bibliotecas JUnit y Mockito que se estaban compilando en tiempo de ejecución. Esto tenía que configurarse para "probar" en las propiedades del módulo.
En mi caso
proyecto-> propiedades-> ruta de compilación java -> en orden y exportar pestaña -> desmarcar android-support-v4.jar
En mi caso, el problema es en realidad con el proyecto de API OpenFeint. He añadido OpenFeint como proyecto de biblioteca:
.
También se agrega a la ruta de compilación, las herramientas ADT 16 dan error con este sceneario.
Haga clic derecho en su proyecto y haga clic en construir ruta, configure la ruta de compilación y luego vea la imagen y elimine su proyecto OpenFeint desde aquí y todo está listo :)
Encontré algo más. Android usa el directorio /libs
para archivos JAR. He visto el error "Error de conversión a formato Dalvik con error 1" varias veces, siempre que cometí un error en mis archivos JAR.
Ahora actualicé Roboguice a una versión más nueva, colocando el nuevo archivo JAR en el directorio /libs
y cambiando la ruta de clase a la nueva versión. Eso causó el error de Dalvik.
Cuando quité uno de los archivos JAR de Roboguice de la carpeta /libs
, el error desapareció. Al parecer, Android recoge todos los archivos JAR de /libs
, independientemente de los que especifique en la ruta de compilación de Java. No recuerdo exactamente, pero creo que Android comenzó a usar /libs
de forma predeterminada a partir de Android 4.0 (Ice Cream Sandwich, ICS).
Esto también puede ser causado si ha agregado el archivo Android.jar
a su ruta de compilación, tal vez por una solución rápida accidental en Eclipse. Elimínelo haciendo clic con el botón derecho en Proyecto -> crear ruta -> configurar ruta de construcción -> android.jar , eliminar.
Estoy usando Android 1.6 y tenía un archivo JAR externo. Lo que funcionó para mí fue eliminar todas las bibliotecas, hacer clic con el botón derecho en el proyecto y seleccionar Herramientas de Android -> * Reparar propiedades del proyecto (que agregó Android 1.6) y luego volver a agregar el archivo JAR externo.
He resuelto este problema al usar la biblioteca Sherlock ActionBar en mi proyecto. Podrías hacer el siguiente paso, es un trabajo para mí.
- Haga clic derecho en su proyecto, seleccione propiedades.
- Aparecerá un cuadro de diálogo, seleccione ''Java build path'' en el menú de la izquierda.
- Elimine ''Dependencias de Android'' y ''Bibliotecas privadas de Android'' en el panel derecho y haga clic en Aceptar
- Limpie su proyecto (seleccione el menú Proyecto -> Limpiar)
- Haga clic derecho en su proyecto, seleccione Herramientas de Android -> Corregir propiedades del proyecto
- Proyecto limpio una vez más.
- Reinicia tu computadora
- Abrir eclipse y exportar apk
Espero que te ayude.
Me encontré con este problema hoy mismo. Limpieza y reconstrucción no solucionó el problema. Eliminar y reimportar el proyecto tampoco ayudó.
Finalmente lo remonté a una mala adición a mi archivo .class. Creo que esto fue agregado por las herramientas del complemento cuando estaba tratando de solucionar otro problema, eliminándolo eliminé el error de compilación "La conversión al formato Dalvik falló con error 1":
<classpathentry kind="lib" path="C:/dev/repository/android-sdk-windows/platforms/android-3/android.jar">
<attributes>
<attribute name="javadoc_location" value="file:/C:/dev/repository/android-sdk-windows/docs/reference"/>
</attributes>
<accessrules>
<accessrule kind="nonaccessible" pattern="com/android/internal/**"/>
</accessrules>
Me encontré con este problema porque el plugin de Android Maven en Eclipse aparentemente no reconocía las referencias transitivas y las referencias a las que se hacía referencia dos veces en un par de proyectos (incluido un proyecto de biblioteca de Android), e incluyó más de una vez. Tuve que usar hocus-pocus para tener todo incluido solo una vez, aunque se supone que Maven se encarga de todo esto.
Por ejemplo, tenía una biblioteca central globalmentor-core, que también fue utilizada por globalmentor-google y globalmentor-android (la última de las cuales es una biblioteca de Android). En el archivo globalmentor-android pom.xml
tuve que marcar la dependencia como "proporcionada" así como excluida de otras bibliotecas en las que estaba incluida de forma transitoria:
<dependency>
<groupId>com.globalmentor</groupId>
<artifactId>globalmentor-core</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- android-maven-plugin can''t seem to automatically keep this from being
included twice; it must therefore be included manually (either explicitly
or transitively) in dependent projects -->
<scope>provided</scope>
</dependency>
Luego, en la aplicación final pom.xml
tuve que usar los trucos correctos para permitir solo una ruta de inclusión, además de no incluir explícitamente la biblioteca principal:
<!-- android-maven-plugin can''t seem to automatically keep this from being
included twice -->
<!-- <dependency> -->
<!-- <groupId>com.globalmentor</groupId> -->
<!-- <artifactId>globalmentor-core</artifactId> -->
<!-- <version>1.0-SNAPSHOT</version> -->
<!-- </dependency> -->
<dependency>
<groupId>com.globalmentor</groupId>
<artifactId>globalmentor-google</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<!-- android-maven-plugin can''t seem to automatically keep this from
being included twice -->
<exclusion>
<groupId>com.globalmentor</groupId>
<artifactId>globalmentor-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.globalmentor</groupId>
<artifactId>globalmentor-android</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Me encontré con este problema, pero mi solución era doble. 1.) Tuve que agregar una versión de destino de Android en proyecto -> propiedades -> Android . 2.) No tenía todos los ''complementos de terceros'' de google. Haga clic en AVD SDK manager en los paquetes disponibles -> complementos de terceros -> Google Inc. Descargué todos los SDK y eso resolvió mi problema.
Mi problema fue causado por la versión 12.0 de ADT y la integración de ProGuard. Este error está bien documentado y la solución está en la documentación.
La solución está aquí
Mi propia y única solución que encontré hoy después de cuatro horas de probar todas las soluciones, es una combinación de muchas soluciones que se proporcionan aquí:
-
Delete
proyecto de Eclipse - Eliminar archivos en
/bin
y/gen
desde la carpeta del proyecto - Elimine las referencias a las bibliotecas en el archivo
.classpath
en la carpeta del proyecto raíz - Reinicie Eclipse con la línea de comando:
eclipse -clean
- Proyecto de
Import
- Haga clic derecho en el proyecto: seleccione
Properties
>Java Build Path
>Libraries
y elimine todo lo que no seaAndroid XX.Y
- Finalmente
clean
proyecto, espere la construcción automática oBuild
- Lanzamiento y ahora funciona! Al menos para mi...
Intenté cada paso a la vez y muchas combinaciones, ¡pero solo lo lograron la sucesión de todos los pasos a la vez! Espero no volver a enfrentar esto ...
Ninguna de las soluciones enumeradas funcionó para mí.
Aquí es donde estaba teniendo un problema:
Agregué el archivo JAR externo de jSoup a la ruta de mi proyecto, primero colocándolo en una carpeta de origen llamada "libs", y luego haciendo clic derecho sobre él, Crear ruta -> agregar para construir la ruta. Esto arrojó el error de conversión Dalvik. Dijo que ya había "incluido" una clase de ese archivo JAR. Miré alrededor del directorio del proyecto y descubrí que el lugar donde estaba "ya incluido" era, de hecho, el directorio bin
. Eliminé el archivo JAR del directorio bin
y actualicé el proyecto en Eclipse y ¡el error desapareció!
Ninguna de las soluciones propuestas anteriormente funcionó para mí. En mi caso, el problema ocurrió cuando cambié de hacer referencia a una carpeta de código fuente de biblioteca para usar el archivo JAR de biblioteca. Inicialmente, había un proyecto de biblioteca de Android listado en la sección Propiedades de la página de Android / Biblioteca de proyecto de aplicación de Android, y la biblioteca se comparó también en el árbol del explorador de proyectos como un enlace al directorio de origen de la biblioteca.
En primer lugar, acabo de eliminar el enlace del directorio del árbol del proyecto y agregué la biblioteca JAR a la ruta de compilación, pero esto causó la excepción.
El procedimiento correcto fue (después de cambiar de nuevo la ruta de compilación y volver a colocar la referencia a la fuente de la biblioteca):
elimine correctamente el enlace del directorio de origen de la biblioteca al eliminar realmente la referencia de la página de Propiedades / Android del proyecto de aplicación
agregando la biblioteca JAR a la ruta de compilación del proyecto de la aplicación como de costumbre.
Para mí, una referencia extra de JAR había aparecido en mi ruta de compilación. He borrado esto, y funciona ahora.
Puede resolver este problema fácilmente (con Eclipse Android Developer Tools, Build: v22.0.1-685705) desactivando el menú> "Project"> "Build Automatically" al exportar (no) la aplicación de Android firmada. Después de eso, no te olvides de encenderlo de nuevo.
Resolví el problema.
Este es un conflicto de archivos JAR.
Parece que tengo dos archivos JAR en mi ruta de acceso de compilación que incluyen el mismo paquete y las mismas clases.
smack.jar
y android_maps_lib-1.0.2
Eliminar este paquete de uno de los archivos JAR solucionó el problema.
Si tiene ADT revisión 12+, debe actualizar su programa de 4.4 -> 4.6 (como se describe here ). Además, debe dejar el archivo ... / bin / proguard.bat en la forma original.
Solo descárguelo de la web y copie la carpeta lib del paquete descargado en:
[Directorio de instalación de Android SDK] / tools / proguard / lib
Simplemente limpiar el proyecto me ha funcionado cada vez que surge este error.
Solo para las otras personas que aún tienen este problema y que han intentado las respuestas anteriores pero que siguen recibiendo el error (que fue mi caso), mi solución fue eliminar el proyecto de Eclipse y volver a importarlo nuevamente.
Esto hizo que la biblioteca de Android se agregara nuevamente a mis bibliotecas de referencia, por lo que ahora tengo dos archivos JAR de Android a los que se hace referencia, por lo tanto, eliminé una de ellas y ahora se compila bien.
Solución: elimine el proyecto de Eclipse IDE y vuelva a importarlo de nuevo, luego verifique las soluciones anteriores.
Todas las soluciones anteriores no funcionaron para mí. No estoy usando ningún .jar precompilado. Estoy usando el LVL y los errores de Dalvik donde todo está relacionado con la biblioteca de licencias del mercado.
El problema se resolvió eliminando el proyecto principal y reimportando (crear un nuevo proyecto a partir de fuentes existentes).
Tuve el mismo problema y ninguna de estas soluciones funcionó. Finalmente, vi en la consola que el error se debía a una clase duplicada (una en el proyecto existente, otra en el archivo jar agregado):
java.lang.IllegalArgumentException: already added: package/MyClassclass;
[2011-01-19 14:54:05 - ...]: Dx1 error; aborting
[2011-01-19 14:54:05 - ...] Conversion to Dalvik format failed with error 1
Verifique si está agregando jar con clases duplicadas en su proyecto. Si es así, intente eliminar uno de ellos.
Funcionó para mí.
Vaya a Proyecto »Propiedades» Java Build Path »Bibliotecas y elimine todo excepto el" Android XY "(en mi caso, Android 1.5). haga clic en Aceptar. Vaya a Proyecto »Limpiar» Limpie los proyectos seleccionados a continuación »seleccione su proyecto y haga clic en Aceptar. Eso debería funcionar.
También es posible que tenga un archivo JAR ubicado en algún lugar de las carpetas de su proyecto (había copiado el archivo JAR de Admob en mi carpeta src) y THEN lo agregó como una biblioteca de ruta de Java. No aparece en el Explorador de paquetes, por lo que no lo nota, pero se cuenta dos veces, lo que provoca el error 1 de Dalvik.
Otra posible razón podría ser conflictos de nombre de paquete. Supongamos que tiene un paquete com.abc.xyz
y una clase llamada A.java
dentro de este paquete, y otro proyecto de biblioteca (que se agrega a la dependencia de este proyecto) que contiene el mismo com.abc.xyz.A.java
, entonces obtendrá el mismo error exacto. Esto significa que tiene varias referencias al mismo archivo A.java
y no puede compilarlo correctamente.
En otras formas, esto puede ocurrir si accidentalmente o a sabiendas, edita / agrega cualquier cosa en el archivo de ruta de clase manualmente. En ciertos casos, podemos agregar la ruta android.jar manualmente al archivo de ruta de clase para generar documentos java. Al eliminar el después de generar javadoc el código funcionará bien. Por favor, compruebe esto también si todavía ocurre alguno.
Vaya a Proyecto y luego desmarque "Construir automáticamente". Luego intente exportar el proyecto y el error desaparecerá.
EDITAR (nueva solución):
Parece que la solución anterior es solo un bypass. Logré finalmente solucionar el problema de forma permanente: en mi caso hubo una falta de coincidencia en los archivos de android-support-v4 en mi proyecto y en el proyecto de Facebook al que se hace referencia en mi proyecto.
Encontré este error al realizar Lint Check (Herramientas de Android / Ejecutar Lint: Verificar errores comunes)
Mi solución anterior:
He intentado cualquier solución posible en este sitio - nada ayudó!
Finalmente, he encontrado una respuesta aquí: https://groups.google.com/forum/#!topic/actionbarsherlock/drzI7pEvKd4
Pasos faciles:
Vaya a Proyecto -> desmarque Construir automáticamente
Vaya a Proyecto -> Limpiar ..., limpie tanto el proyecto de biblioteca como el proyecto de su aplicación
Exporta tu aplicación como un APK firmado mientras la compilación automática todavía está deshabilitada
Solo limpia el proyecto
Si esto no funciona prueba las otras soluciones.
Solución de Windows 7:
Confirmado que el problema se debe a la línea de comandos de ProGuard en el archivo
[Directorio de instalación de Android SDK] / tools / proguard / bin / proguard.bat
Editar la siguiente línea resolverá el problema:
call %java_exe% -jar "%PROGUARD_HOME%"/lib/proguard.jar %*
a
call %java_exe% -jar "%PROGUARD_HOME%"/lib/proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9