Android: Dex kann Version 52-Byte-Code nicht analysieren

Ich bin gerade zu Android Studio 2.1 gewechselt und dieser Fehler tauchte beim Versuch auf, 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-Code-Generierung 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 habe auch das Modul gradle.build wie folgt aktualisiert, um die Java-Version einzustellen:

 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, 1.7 Code-Generierung zu erzwingen.
Ich verstehe, dass ich ein Assembly-Artefakt verwende, das untergeordnete Module enthält, aber ich habe keine der untergeordneten Module geändert, und die resultierende .jar-Datei für das Modul lief beim letzten Kompilieren einwandfrei.

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

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 keine Hilfe bei der Suche nach dem schlechten Modul gibt, gibt es irgendwelche Empfehlungen zum Finden des V52-Codes? Ich kann die Bibliotheken nicht einfach weglassen, ohne eine große Menge Code zu zerstören. Kann man eine .jar-Datei untersuchen, um die Code-Revision zu finden? Danke im Voraus. -Hephaestus

Solutions Collecting From Web of "Android: Dex kann Version 52-Byte-Code nicht analysieren"

benutze einfach Java 1.8 mit Android Studio 3.0+ und setze folgende Arbeiten für mich: Es scheint, als benötige ich die neuesten Build-Tools

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

und

 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 } } 

Wenn Sie ein Modul mit einer Java-Bibliothek haben, die nicht Android-spezifisch ist , sollte dies funktionieren: apply plugin:'java'

Legen Sie es oben in der Datei build.gradle ab und erstellen Sie es neu.

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

Wenn Sie org.jetbrains:annotation:15 und retroLambda plugin benutzen, entfernen Sie die Zeile compile org.jetbrains:annotations:15.0 von Ihrem build.gradle und der Fehler verschwindet. Für mich geht das.

Möglicherweise wurden einige Ihrer Abhängigkeiten mit Java 8 kompiliert, nicht speziell für Android. Versuchen Sie, diese Abhängigkeiten auf eine ältere Version umzustellen. Ich weiß nicht genau, welche Bibliothek Sie downgraden sollten, weil Sie keine Liste der Abhängigkeiten Ihres Hauptmoduls angehängt haben.

Zum Beispiel: Ich hatte das gleiche Problem. Nach stundenlanger Suche habe ich festgestellt, dass die Bibliothek org.codehaus.httpcache4j.uribuilder:2.0.0 Java 8 ab github benötigt . Wenn ich also zu 1.1.0 gewechselt habe, wurde das Projekt erfolgreich erstellt und bereitgestellt.

Versuchen Sie, zu Haupt build.gradle in Abschnitt allprojects hinzuzufügen

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

oder fügen Sie dies in Abhängigkeiten hinzu

  sourceCompatibility = 1.7 targetCompatibility = 1.7 

in allen Modulen manuell

Ich konnte dieses Problem lösen, indem ich folgende Zeilen hinzufügte:

 jackOptions { enabled true } 

zu defaultConfig in build.gradle Datei.

Sie können den Richtlinien für Java 8 auf dem Link folgen – https://developer.android.com/guide/platform/j8-jack.html

Ich hatte das gleiche Problem mit der Abhängigkeit des Generators. Ich habe fälschlicherweise diese Abhängigkeit in meine build.gradle hinzugefügt ( compile 'org.greenrobot:greendao-generator:3.1.0' ) und AndroidStudio zeigte mir die gleiche Fehlermeldung.

Wahrscheinlich liegt es daran, dass dieses Modul mit Java 8 kompiliert wurde.

Also habe ich diese Abhängigkeit von meinem build.gradle entfernt und alles glücklich kompiliert 🙂

Ich habe dieses Problem wie folgt getriggers:

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

Instant Run in Android Studio 2.2 mit Gradle Plugin 2.2.2 zu deaktivieren, hat es für mich behoben. Das Zurückschalten auf eine ältere Version des Gradle-Plugins (wie zB 2.2.0) hat es ebenfalls behoben, aber das ist weniger wünschenswert imho.

Das ist mir mit Android Studio 2.3.3 passiert. Die Lösung, die ich gefunden habe, war, den Build-Ordner zu löschen und dann Projekt neu erstellen . So einfach war das.

Ich habe auch denselben Fehler in Android 2.3.3 , nachdem ich einige JAR-Abhängigkeiten hinzugefügt hatte. Problem war aufgrund der Abhängigkeit io.netty:netty-all:4.1.16.Final . Diese 4.1.16 Version JAR wurde mit Java 1.8 kompiliert und alle anderen wurden mit Java 1.7 generiert.

Dies wird behoben, nachdem eine ältere Version von netty (die mit Java 1.7 generiert wurde) in meine build.gradle Datei aufgenommen wurde.

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

Ich bin auf dieses Problem gestoßen, als ich versuchte, in Android Studio 2.3.3 auf Auto-Value v 1.5 zu aktualisieren. Auto-Wert 1.5 wird vermutlich mit AS 3 kompatibel sein (benötigt einen aktualisierten Java-Compiler)

Für jetzt funktioniert Auto-Wert 1.4.1.

Ich habe das gleiche Problem mit Reactive Location APIs Library für Android und RxJava 2. Aktualisieren Sie einfach Build.gradle zu 3.0.1 und reduzieren Sie die Reactive Location APIs Bibliothek für Android und RxJava 2 Bibliotheksversion von 1.0.4 auf 1.0.3 Es funktioniert gut in meinem Fall.

Ich bin auf dieses Problem gestoßen, als ich versuchte, ein JAR zu importieren, das von jdk 1.8 in Android Studio 3.0 kompiliert wurde. Ich habe alle oben genannten Lösungen versucht, aber keine funktionieren. Also, ich fragte den Entwickler dieses Jar, es mit jdk 1.7 neu zu kompilieren, und dann funktioniert es gut, nicht wieder auf dieses Problem stoßen.

Wenn möglich für dich:

  1. Aktualisieren Sie die Android-Tools auf: classpath ‘com.android.tools.build:gradle:3.0.0’
  2. buildToolsVersion “26.0.2”

Dies sollte das Problem beheben.

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