Android: Dex no puede analizar el código de bytes de la versión 52

Acabo de cambiar a Android Studio 2.1 y apareció este error al intentar comstackr una aplicación que funcionaba anteriormente:

Error:Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code. This is caused by library dependencies that have been compiled using Java 8 or above. If you are using the 'java' gradle plugin in a library submodule add targetCompatibility = '1.7' sourceCompatibility = '1.7' to that submodule's build.gradle file. 

Ya había actualizado el archivo gradle.build del proyecto principal para forzar la generación de código Java 1.7:

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' apply plugin: 'java' sourceCompatibility = 1.7 targetCompatibility = 1.7 } } 

También actualicé el módulo gradle.build de la siguiente manera para establecer la versión java:

 android { compileSdkVersion 19 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.abc.def" minSdkVersion 19 targetSdkVersion 19 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } 

El submódulo está siendo construido con Maven. En el archivo pom.xml, también intenté forzar la generación de 1.7 códigos.
Entiendo que estoy usando un artefacto de ensamblaje, que incorpora módulos subordinados, pero no he cambiado ninguno de los módulos subordinados y el archivo .jar resultante para el módulo funcionó bien la última vez que compilé.

     org.apache.maven.plugins maven-assembly-plugin  2.6  1.7 1.7  jar-with-dependencies     make-assembly  package   single       

Mi pregunta: 1) ¿Es este un problema de Android Studio 2.1? ¿Han visto otros? 2) Suponiendo que este es mi error y dado que el mensaje de error no ayuda a encontrar el módulo defectuoso, ¿hay alguna recomendación para encontrar el código V52? No puedo simplemente omitir las bibliotecas sin romper gran cantidad de código. ¿Se puede inspeccionar un archivo .jar para encontrar la revisión del código? Gracias por adelantado. -Hephaestus

simplemente use Java 1.8 con Android Studio 3.0+ y configure los siguientes trabajos para mí: parece necesitar las últimas herramientas de comstackción

 classpath 'com.android.tools.build:gradle:3.0.0' 

y

 android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { ... //jackOptions { // DEPRECATED //enabled true //} } dexOptions { incremental true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } 

Si tienes un módulo con una biblioteca java que no es específica de Android , debería funcionar: apply plugin:'java'

Colóquelo en la parte superior del archivo build.gradle, luego vuelva a generarlo.

  apply plugin: 'java' apply plugin: 'jacoco' dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.11' sourceCompatibility = 1.7 targetCompatibility = 1.7 } 

Si usa org.jetbrains:annotation:15 y el plugin retrolambda, elimine la compile org.jetbrains:annotations:15.0 línea compile org.jetbrains:annotations:15.0 de su build.gradle y el error desaparecerá. Esto funciona para mi.

Posiblemente, algunas de sus dependencias fueron comstackdas con Java 8, especialmente para Android. Intenta cambiar esas dependencias a una versión anterior. No sé exactamente qué biblioteca debe degradar, porque no ha adjuntado una lista de dependencias de su módulo principal.

Por ejemplo: tuve el mismo problema. Después de horas de búsqueda, encontré que la biblioteca org.codehaus.httpcache4j.uribuilder:2.0.0 requiere Java 8, como de github . Entonces, cuando cambié a 1.1.0 , el proyecto se construyó y desplegó con éxito.

Intenta agregar a build.gradle principal en la sección allprojects

 tasks.withType(JavaCompile) { sourceCompatibility = "1.7" targetCompatibility = "1.7" } 

o agregar esto en dependencias

  sourceCompatibility = 1.7 targetCompatibility = 1.7 

en todos los módulos de forma manual

Pude resolver este problema agregando las siguientes líneas:

 jackOptions { enabled true } 

a defaultConfig en el archivo build.gradle .

Puede seguir las pautas para Java 8 en el enlace – https://developer.android.com/guide/platform/j8-jack.html

Tuve el mismo problema con la dependencia greendao-generator. Incorporé por error esa dependencia en mi build.gradle ( compile 'org.greenrobot:greendao-generator:3.1.0' ) y AndroidStudio me mostró el mismo mensaje de error.

Probablemente es porque ese módulo ha sido comstackdo con Java 8.

Así que eliminé esa dependencia de mi build.gradle y todo compilé felizmente 🙂

Resolví este problema como abajo:

 apply plugin: 'java' sourceCompatibility = 1.7 targetCompatibility = 1.7 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) } 

Al desactivar Instant Run en Android Studio 2.2 con el plugin de Gradle 2.2.2 lo solucioné. Volver a cambiar a una versión anterior del complemento Gradle (como 2.2.0) también lo solucionó, pero eso es menos deseable.

Esto me pasó con Android Studio 2.3.3. La solución que encontré fue eliminar la carpeta de comstackción y luego Rebuild Project . Era tan simple como eso.

También enfrenté el mismo error en Android 2.3.3 , después de agregar algunas dependencias de JAR. El problema se debió a la depenecy io.netty:netty-all:4.1.16.Final . Esta versión 4.1.16 JAR se compiló con Java 1.8 y todos los demás se generaron con Java 1.7.

Esto se resuelve, después de incluir una versión anterior de netty (que se generó con Java 1.7) en mi archivo build.gradle .

compile 'io.netty:netty-all:4.1.5.Final'

Me he encontrado con este problema al intentar actualizar a auto-valor v 1.5 en Android Studio v 2.3.3. Auto-value 1.5 presumiblemente será compatible con AS 3 (Requiere un comstackdor Java actualizado)

Por ahora auto-value 1.4.1 funciona.

Enfrentaré el mismo problema con la Biblioteca de API de Reactive Location para Android y RxJava 2. Solo actualice build.gradle a 3.0.1 y reduzca la biblioteca de API de ubicación reactiva para Android y la versión de biblioteca RxJava 2 de 1.0.4 a 1.0.3 Funciona bien en mi caso.

Me he encontrado con este problema al intentar importar un jar comstackdo por jdk 1.8 en Android Studio 3.0. Intenté todas las soluciones anteriores, pero ninguna funciona. entonces, le pedí al desarrollador de ese jar que lo comstackra con jdk 1.7, y luego funcionara bien, no volviera a encontrar este tema.

Si es posible para ti:

  1. Actualice las herramientas de Android a: classpath ‘com.android.tools.build:gradle:3.0.0’
  2. buildToolsVersion “26.0.2”

Esto debería encargarse del problema.

Referencia: https://developer.android.com/studio/write/java8-support