Je viens de passer à Android Studio 2.1 et cette erreur est apparue lorsque j'ai essayé de compiler une application qui fonctionnait auparavant :
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.
J'avais déjà mis à jour le fichier gradle.build du projet principal pour forcer la génération de code 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
}
}
J'avais également mis à jour le module gradle.build comme suit pour définir la version 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
}
}
Le sous-module est construit avec Maven. Dans le fichier pom.xml, j'ai également essayé de forcer la génération de code 1.7.
Je comprends que j'utilise un artefact d'assemblage, qui incorpore des modules subordonnés, mais je n'ai modifié aucun des modules subordonnés et le fichier .jar résultant pour le module a bien fonctionné la dernière fois que j'ai 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>
Ma question : 1) Est-ce un problème lié à Android Studio 2.1 ? D'autres l'ont-ils constaté ? 2) En supposant que c'est mon erreur et puisque le message d'erreur ne donne aucune aide pour trouver le mauvais module, y a-t-il des recommandations pour trouver le code V52 ? Je ne peux pas simplement omettre les bibliothèques sans casser une grande quantité de code. Peut-on inspecter un fichier .jar pour trouver la révision du code ? Merci d'avance. -Hephaestus
1 votes
Je suis actuellement confronté à cette erreur. Avez-vous une solution ?
0 votes
Moi aussi j'ai mis à jour Android Studio en 2.1. Depuis, je suis confronté à ce problème. Avez-vous trouvé une solution ?
0 votes
Un message d'erreur antérieur (qui a disparu depuis) suggère que le fichier jar pubnub faisait partie du problème. Nous avons donc commenté toutes les références à pubnub et le programme se compile et fonctionne maintenant. Je pense que le message d'erreur a disparu lorsque nous avons ajouté les directives du compilateur (indiquées ci-dessus) pour forcer le code à "1.7", mais il semble qu'une partie du code 1.8 s'échappait encore.
0 votes
Voici une autre discussion de SO qui s'y rapporte : stackoverflow.com/questions/36968728/ . Mais cela ne répond pas à la question, si ce n'est pour dire "commencez par un projet de test plus simple".
1 votes
La seule chose que nous avons faite a été de retirer la bibliothèque PubNub et de la remplacer par une version plus ancienne. Cela semblait régler le problème. Mais dans ce cas, nous avons testé en commentant l'importation de la bibliothèque et ses appels de méthode et déterminé qu'elle était en cause. Mais la bibliothèque PubNub était faiblement intégrée et nous avons pu la commenter assez facilement. Si nous avions de nombreuses bibliothèques avec une intégration étroite, ce serait douloureux.