Acabo de cambiar a Android Studio 2.1 y apareció este error al intentar compilar 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 había actualizado el módulo gradle.build de la siguiente manera para configurar la versión de 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 que se está construyendo con Maven. En el archivo pom.xml también intenté forzar la generación de código 1.7.
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é.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId> <!-- maven-compiler-plugin -->
<version>2.6</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Mi pregunta: 1) ¿Es este un problema de Android Studio 2.1? ¿Lo 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 una gran cantidad de código. ¿Se puede inspeccionar un archivo .jar para encontrar la revisión del código? Gracias por adelantado. -Hephaestus