Dx mala clase archivo magia (cafebabe) o versión (0033.0000) con ADK14

Desde que pasé a ADK14, no he podido crear nuevos apks para su liberación en mi sistema Windows 7.

La construcción falla con "la conversión al formato dalvik falló con error 1", mientras que la consola se llena con un montón de "magia de archivo de clase Dx mala (cafebabe) o versión (0033.0000)".

El texto completo de la excepción:

com.android.ide.eclipse.adt.internal.build.DexException: Conversion to Dalvik format failed with error 1 at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:740) at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:204) at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(ExportWizard.java:290) at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(ExportWizard.java:229) at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(ExportWizard.java:214) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) 

Estoy construyendo un viejo proyecto que usa muchas bibliotecas, así que presumiblemente el problema está relacionado con este hecho. Ya se han hecho todas las "Propiedades de corrección" / Clean etc que se sugieren cuando se mueve a ADK14 (como naturalmente tenía todos esos problemas), pero no han ayudado con esto.

Todas las bibliotecas están en el mismo SDK de Android y la versión de JDK / JRE, así que esto no parecería ser el problema. Y de hecho, la aplicación se construye fácilmente en la depuración e instalada en mi vieja versión 1.5 HTC Magic – es solamente Cuando necesito exportar un paquete firmado de la aplicación que esto se rompe.

[Editar] Se encuentra en un PC con Windows 7×64. Observo que el embalaje del apk en mi portátil Linux (Lucid Lynx) para el mismo código exacto no tiene absolutamente ningún problema.

¿Algunas ideas? Muy frustrado con esto.

NOTA

Aparentemente, este mensaje de error puede ser activado por una variedad de problemas diferentes. Mi problema particular no estaba relacionado con Java 6/7, ya que nunca instalé Java 7 en primer lugar, y el cumplimiento del compilador se estableció en Java 6 (he comprobado en el momento, ya que había visto esa solución sugerida en otros lugares).

Compilar con Java 6 en lugar de 7 funcionó para mí, pero sólo después de configurar Eclipse para "saber" sobre mi ruta de instalación de JRE6. Anteriormente solo tenía el JRE7 instalado en Eclipse. Podría establecer mi nivel de cumplimiento de compilador a 1,6 o 1,5, pero aparentemente sin el correspondiente JRE realmente no tiene ningún efecto. Realmente no entiendo por qué debería ser – ¿qué tiene que ver JRE con la compilación, y qué tiene que ver con el código de Android?

Encontré la solución a este problema por fin.

Si busca en Proguard.bat (Android SDK \ tools \ proguard \ bin), encontrará la línea siguiente:

 call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %* 

Sustitúyalo por lo siguiente:

 call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9 

Es un estúpido asunto antiguo, que en realidad me doy cuenta de que lo he visto antes, ahora que lo he descubierto. Al parecer, el equipo SDK de Android todavía no ha solucionado este problema, y ​​se reintrodujo cuando hice una instalación limpia del SDK de Android.

Al leer el origen de la herramienta dex, el problema aquí es que el archivo de clase no está dentro de una versión que pueda entender. La versión debe estar entre 45-50 (versión principal) La versión que está utilizando aquí es 0033.0000 (0x33 en hexadecimal), que es 51 en decimal (el número de versión que representa Java 7). Esto no es especulación de mi parte, encontré esto directamente en el código fuente.

Lo que sigue es la especulación, y lo que resolvió mi problema: No he descubierto lo que tienes que hacer para confirmar sólidamente la versión del archivo de clase que obtendrá al compilar con varias opciones, pero para mí el problema era que mi biblioteca se había compilado Con Java 7. Ya que Android sólo soporta Java 5 o 6, simplemente recompilado en 6, y boom, resuelto.

Cambiar la versión de java de Eclipse a 6 funcionó para mí. En Eclipse, vaya a Windows-> Preferencias-> Java-> Compiler y establezca "Nivel de cumplimiento del compilador" en 1.6.

Lo extraño es que tuve Eclipse 3.7.0 y funcionó bien, mientras que otras computadoras tenían 3.7.1 y los archivos jar construidos allí no funcionaban …

Si está utilizando Android Studio, esto puede solucionarse utilizando los consejos anteriores para orientar Java 1.6 en su build.gradle añadiendo las siguientes líneas:

 apply plugin: 'java' sourceCompatibility = 1.6 targetCompatibility = 1.6 

Descubrió esta corrección de esta entrada de blog: http://www.alonsoruibal.com/my-gradle-tips-and-tricks/

He solucionado este problema haciendo clic con el botón derecho del ratón en Proyecto Java-> Construir ruta-> Configurar la ruta de construcción Vaya a la pestaña Libraries, seleccione JavaSE-1.7-> ​​pulse Editar y luego cambie a JavaSE-1.6.

Vaya a Android Project, haga clic con el botón secundario del mouse en Project-> Build Path-> Configure Build Path Vaya a la pestaña Order and Export Tab, junto a su proyecto java y otras bibliotecas incluidas. Haga clic en Aceptar. En su proyecto de Android, elimine "gen" y "bin". Luego poco después de que estas dos carpetas se regeneren (si no lo hace, asegúrese de haber ejecutado su eclipse como administrador).

Ahora intenta ejecutar el proyecto android en tu teléfono. Wala funciona

He resuelto este problema en Eclipse yendo a Windows --> Preferences Java --> Compiler en la ventana de la derecha elija Compiler compliance level a 1.6 , haga clic en Apply y Ok .

Y Clean Build todos los proyectos que deben resolver el problema

Para el beneficio de cualquier persona que pueda tener el mismo problema:

La eliminación de proguard permitió que la exportación del apk funcione. Por qué Proguard funciona en Linux pero no en Windows sigue siendo un misterio, sin embargo.

El problema ya se ha informado en el proyecto de Android aquí: http://code.google.com/p/android/issues/detail?id=21170&can=4&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

Si usted encuentra el mismo problema, por favor star él.

Yo estaba teniendo el mismo mensaje de error dexing no funcionó "Dx mala clase magia archivo (cafebabe) o versión (0033.0000)".

Tenía JDK1.7, Eclipse Kepler, AndroidSDK-19 (Android 4.4) instalado. Finalmente ejecute la herramienta android-sdk-windows / SDK Manager.exe si hay alguna actualización. Resulta que tenía el nivel 19 sdk pero Herramientas / Android SDK Build-tools parte fue 18.1.1. Instalado Build-tools 19.0.3 y la compilación comenzó a funcionar bien.

He intentado todo desde las varias otras soluciones. Esa cosa que me ayudó fue descargar la versión más reciente de ProGuard y copiarlo hacer android-sdk / tools / proguard / bin y lib.

Para otras personas que buscan este mensaje de error, otra posible causa es que incluyan bibliotecas que fueron creadas para java 7. Para nosotros, el ajuste de esas versiones para orientar específicamente a java 6 (y luego construir nuevos jarras) resolvió el problema.

Si construye con ant, puede hacerlo añadiendo los siguientes atributos a su etiqueta javac:

 <javac ... source="1.6" target="1.6" ... > 

Si invocando javac directamente, utilice:

 javac -source 1.6 -target 1.6 ... 

Dx mala clase archivo magia (cafebabe) o versión (0033.0000)

Se trata de una comprobación de las herramientas de creación de

  1. Se trata de un archivo de clase java. (Los archivos de clase Java tienen 'cafebabe' al principio)
  2. Es una versión no compatible. Este mensaje indica que 0033.0000 (Java SE 1.7) no está soportado

Así que este mensaje en particular dice

Leyendo este archivo de clase (tiene 'cafebabe' magia), me confundí por la versión de JVM 1.7

Oracle mantiene las herramientas de lenguaje y creación y las herramientas dex / dalvik / Android Runtime (ART) son mantenidas por google / android. Así que cuando oracle genera un nuevo java, hay un período de tiempo cuando el java generado por el último sdk, es incompatible con el java soportado por las herramientas de compilación.

Wikipedia: El archivo de clase Java tiene una tabla que muestra las versiones de java y su número de versión

 +------------+-----------+ |Java SE 1.9 | 0035.0000 | |Java SE 1.8 | 0034.0000 | |Java SE 1.7 | 0033.0000 | |Java SE 1.6 | 0032.0000 | +------------+-----------+ 

Así que en este caso, la "mala versión" – es 1.7. La última cadena de herramientas (mayo de 2016) soporta 1,6 y 1,7, pero no 1,8.

Cómo resolver

Hay dos mecanismos que se pueden utilizar para resolver este problema.

  1. Cambiar la compatibilidad
  2. Cambiar el SDK

Cambiar la compatibilidad

Al compilar en java puede decirle al compilador que apunte a un SDK anterior. Con Android Studio en el momento (2.0), eso se hace cambiando.

 File/Project Structure 

Haga clic en cada módulo y establezca Source Compatibility con la versión de java necesaria.

En gradle crudo, que significa insertar en build.gradle algo como: –

 android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_6 targetCompatibility JavaVersion.VERSION_1_6 } 

Para un proyecto java, las necesidades de build.gradle

 sourceCompatibility= 1.6 targetCompatibility= 1.6 

Cambiar el SDK

El sdk para versiones anteriores de java puede descargarse, y puede descargar e instalar el SDK anterior. Esta es una corrección de tiempo limitada. Oracle está continuamente mejorando java, eliminando errores, y los SDK antiguos no se están actualizando.

El SDK se actualiza cambiando el SDK del lado izquierdo de la project structure del project structure

Puedes solucionar fácilmente este error con el plugin del compilador de Maven mientras solo tienes instalado JDK 1.7. Echa un vistazo a mi blog en la forma de hacerlo.

He enfrentado este mensaje de error durante la conversión jar -> dex. El problema estaba en un archivo jar corrupto .

Para mí este problema residía en la versión de herramientas de compilación demasiado antigua instalada (las herramientas de construcción estaban detrás de las herramientas de plataforma y las versiones sdk que estaba usando). Así que lo que hice para arreglar el error:

  • He descargado la última versión de las herramientas de compilación desde el administrador de SDK de Android
  • Estoy usando ADT. Sin embargo, la última versión de las herramientas de construcción no se utilizó y el error persistió. Así que agregué la línea sdk.buildtools=22.0.1 en los archivos project.properties en todos mis proyectos y bibliotecas. Ahora el error ha desaparecido.

PS: El único inconveniente es que codifiqué la versión y en futuras actualizaciones no la usaré automáticamente.

Este error se produce cuando se utiliza un archivo .jar que no está utilizando ninguna característica de Java 6 o superior, pero se creó utilizando Java 6 o superior, según informit.com . Al parecer, Google no incluye JDK 7 en los requisitos del sistema de Android .

Así que la solución, que trabajó para mí es muy simple. Cree el archivo .jar utilizando Java 5 o menos.

Tuve el mismo problema al usar build-tools 18.0.1, pero todo funciona bien cuando cambio a 19.0.1. Podría ser mejor publicar un comentario después de la respuesta de Whome, pero la reputación es baja.

En mi caso, el problema no es JDK ni el nivel de cumplimiento del compilador 1.6 Se trataba de mi SDK build-tools que era "18.1.1" . Actualizar las herramientas de compilación a "21.1.2" y los errores desaparecidos.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.