Ich habe gerade zu Android Studio 2.1 gewechselt und dieser Fehler trat auf, als ich versuchte, eine App zu kompilieren, die zuvor funktionierte:
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.
Ich hatte bereits die gradle.build-Datei des Hauptprojekts aktualisiert, um die Java 1.7-Codegenerierung zu erzwingen:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
}
Ich hatte auch das Modul gradle.build wie folgt aktualisiert, um die Java-Version festzulegen:
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
}
}
Das Submodul wird mit Maven gebaut. In der Datei pom.xml habe ich auch versucht, die 1.7-Codegenerierung zu erzwingen.
Ich verstehe, dass ich ein Assembly-Artefakt verwende, das untergeordnete Module enthält, aber ich habe keines der untergeordneten Module geändert, und die resultierende JAR-Datei für das Modul lief beim letzten Kompilieren einwandfrei.
<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>
Meine Frage: 1) Ist das ein Android Studio 2.1 Problem? Haben andere es gesehen? 2) Angenommen, dies ist mein Fehler, und da die Fehlermeldung beim Auffinden des fehlerhaften Moduls keine Hilfe bietet, gibt es Empfehlungen zum Auffinden des V52-Codes? Ich kann die Bibliotheken nicht einfach weglassen, ohne viel Code zu beschädigen. Kann man eine JAR-Datei untersuchen, um die Code-Revision zu finden? Danke im Voraus. -Hephaestus