Sono appena passato ad Android Studio 2.1 e questo errore si è verificato durante il tentativo di compilare un'app che in precedenza funzionava:
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.
Avevo già aggiornato il file gradle.build del progetto principale per forzare la generazione di codice 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
}
}
Avevo anche aggiornato il modulo gradle.build come segue per impostare la versione 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
}
}
Il sottomodulo in costruzione con Maven. Nel file pom.xml ho anche provato a forzare la generazione del codice 1.7.
Capisco che sto usando un artefatto di assemblaggio, che incorpora moduli subordinati, ma non ho modificato nessuno dei moduli subordinati e il file .jar risultante per il modulo ha funzionato bene l'ultima volta che ho compilato.
<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>
La mia domanda: 1) è un problema di Android Studio 2.1? L'hanno visto altri? 2) Supponendo che questo sia il mio errore e poiché il messaggio di errore non aiuta a trovare il modulo danneggiato, ci sono consigli per trovare il codice V52? Non posso semplicemente omettere le librerie senza rompere una grande quantità di codice. Si può esaminare un file .jar per trovare la revisione del codice? Grazie in anticipo. -Efesto