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
quelle
Antworten:
Verwenden Sie einfach Java 1.8 mit Android Studio 3.0+ und stellen Sie folgende Funktionen für mich ein: Es scheint, dass Sie die neuesten Build-Tools benötigen
und
quelle
android.dexOptions.incremental
Eigenschaft veraltet ist und keine Auswirkungen auf den Erstellungsprozess hat."Wenn Sie ein Modul mit einer Java-Bibliothek haben, die nicht Android-spezifisch ist , sollte dies funktionieren:
apply plugin:'java'
Fügen Sie es oben in die Datei build.gradle ein und erstellen Sie es neu.
quelle
Wenn Sie ein
org.jetbrains:annotation:15
Retrolambda-Plugin verwenden, entfernen Sie die Leitungcompile org.jetbrains:annotations:15.0
von Ihrembuild.gradle
und der Fehler verschwindet. Für mich geht das.quelle
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, da Sie keine Liste der Abhängigkeiten Ihres Hauptmoduls angehängt haben.
Zum Beispiel: Ich hatte das gleiche Problem. Nach stundenlangem Suchen habe ich festgestellt, dass für die Bibliothek ab Github
org.codehaus.httpcache4j.uribuilder:2.0.0
Java 8 erforderlich ist . Wenn ich zu gewechselt bin,1.1.0
wurde das Projekt erfolgreich erstellt und bereitgestellt.quelle
Versuchen Sie, im Abschnitt allprojects zu main build.gradle hinzuzufügen
oder fügen Sie dies in Abhängigkeiten hinzu
in allen Modulen manuell
quelle
Ich konnte dieses Problem lösen, indem ich die folgenden Zeilen hinzufügte:
um
defaultConfig
inbuild.gradle
Datei.Sie können den Richtlinien für Java 8 unter dem Link https://developer.android.com/guide/platform/j8-jack.html folgen
quelle
Ich hatte das gleiche Problem mit der Abhängigkeit vom Greendao-Generator. Ich habe diese Abhängigkeit fälschlicherweise in mein build.gradle (
compile 'org.greenrobot:greendao-generator:3.1.0'
) und AndroidStudio mir dieselbe 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 :)
quelle
Ich habe dieses Problem wie folgt gelöst:
quelle
Das Ausschalten von Instant Run in Android Studio 2.2 mit dem Gradle-Plugin 2.2.2 hat es für mich behoben. Das Zurückschalten auf eine ältere Version des Gradle-Plugins (wie 2.2.0) hat das Problem ebenfalls behoben, aber das ist imho weniger wünschenswert.
quelle
Dies ist mir mit Android Studio 2.3.3 passiert. Die Lösung, die ich gefunden habe, bestand darin, den Build-Ordner zu löschen und dann das Projekt neu zu erstellen . So einfach war das.
quelle
Ich hatte auch den gleichen Fehler
Android 2.3.3
, nachdem ich einige JAR-Abhängigkeiten hinzugefügt hatte. Das Problem war auf die Abhängigkeit zurückzuführenio.netty:netty-all:4.1.16.Final
. Diese JAR-Version 4.1.16 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 meinebuild.gradle
Datei aufgenommen wurde.compile 'io.netty:netty-all:4.1.5.Final'
quelle
Ich bin auf dieses Problem gestoßen, als ich versucht habe, ein Upgrade auf Auto-Value Version 1.5 in Android Studio Version 2.3.3 durchzuführen. Auto-Value 1.5 ist vermutlich mit AS 3 kompatibel (es ist ein aktualisierter Java-Compiler erforderlich).
Im Moment funktioniert der Auto-Wert 1.4.1.
quelle
Ich habe das gleiche Problem mit der Reactive Location APIs Library für Android und RxJava 2. Aktualisieren Sie einfach build.gradle auf 3.0.1 und reduzieren Sie die Reactive Location APIs Library für Android und RxJava 2 Library Version von 1.0.4 auf 1.0.3. Es funktioniert einwandfrei in meinem Fall.
quelle
Ich bin auf dieses Problem gestoßen, als ich versuchte, ein von jdk 1.8 kompiliertes JAR in Android Studio 3.0 zu importieren. Ich habe alle oben genannten Lösungen ausprobiert, aber keine funktionieren. Also habe ich den Entwickler dieses JAR gebeten, es mit jdk 1.7 neu zu kompilieren, und dann funktioniert es gut, ohne dass dieses Problem erneut auftritt.
quelle
Wenn möglich für Sie:
Dies sollte das Problem beheben.
Referenz: https://developer.android.com/studio/write/java8-support
quelle