Android: Dex ne peut pas parsingr le code d’octet de la version 52

Je viens de passer à Android Studio 2.1 et cette erreur est apparue lors de la compilation d’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 comstackd 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’ai également mis à jour le module gradle.build pour définir la version Java:

 android { comstackSdkVersion 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' } } comstackOptions { 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 du module s’est bien passé la dernière fois que j’ai compilé.

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

Ma question: 1) Est-ce un problème avec Android Studio 2.1? Est-ce que d’autres l’ont vu? 2) En supposant que ce soit mon erreur et que le message d’erreur ne vous aide pas à trouver le mauvais module, existe-t-il des recommandations sur la recherche du 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 de code? Merci d’avance. -Hephaestus

il suffit d’utiliser java 1.8 avec Android Studio 3.0+ et de définir les travaux suivants pour moi: il semble que les derniers outils de construction soient nécessaires

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

et

 android { comstackSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { ... //jackOptions { // DEPRECATED //enabled true //} } dexOptions { incremental true } comstackOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } 

Si vous avez un module avec une bibliothèque Java qui n’est pas spécifique à Android , cela devrait fonctionner: apply plugin:'java'

Placez-le en haut du fichier build.gradle, puis reconstruisez.

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

Si vous utilisez org.jetbrains:annotation:15 et retrolambda plugin alors supprimez line comstack org.jetbrains:annotations:15.0 depuis votre build.gradle et l’erreur disparaîtra. Ça marche pour moi.

Peut-être que certaines de vos dépendances ont été compilées avec Java 8, pas spécialement pour Android. Essayez de changer ces dépendances à l’ancienne version. Je ne sais pas exactement quelle bibliothèque vous devez rétrograder, car vous n’avez pas joint de liste des dépendances de votre module principal.

Par exemple: j’ai eu le même problème. Après des heures de recherche, j’ai trouvé que la bibliothèque org.codehaus.httpcache4j.uribuilder:2.0.0 nécessite Java 8, comme github . Ainsi, lorsque je suis passé à la version 1.1.0 , le projet a été construit et déployé avec succès.

Essayez d’append à main build.gradle dans la section allprojects

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

ou ajoutez ceci dans des dépendances

  sourceCompatibility = 1.7 targetCompatibility = 1.7 

dans tous les modules manuellement

J’ai pu résoudre ce problème en ajoutant les lignes suivantes:

 jackOptions { enabled true } 

à defaultConfig dans le fichier build.gradle .

Vous pouvez suivre les instructions pour Java 8 sur le lien https://developer.android.com/guide/platform/j8-jack.html

J’ai eu le même problème avec la dépendance greendao-generator. J’ai ajouté par erreur cette dépendance dans mon build.gradle ( comstack 'org.greenrobot:greendao-generator:3.1.0' ) et AndroidStudio m’a montré le même message d’erreur.

C’est probablement parce que ce module a été compilé avec Java 8.

J’ai donc enlevé cette dépendance de ma build.gradle et tout a été compilé avec plaisir 🙂

J’ai résolu ce problème comme suit:

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

Désactiver Instant Run dans Android Studio 2.2 avec Gradle 2.2.2 corrigé pour moi. Revenir à une ancienne version du plug-in Gradle (tel que 2.2.0) l’a également corrigé, mais c’est moins souhaitable.

Cela m’est arrivé avec Android Studio 2.3.3. La solution que j’ai trouvée consistait à supprimer le dossier de génération, puis à reconstruire le projet . C’était aussi simple que ça.

J’ai également fait face à la même erreur dans Android 2.3.3 , après avoir ajouté quelques dépendances JAR. Le problème était dû à la dépendance io.netty:netty-all:4.1.16.Final . Cette version 4.1.16 JAR a été compilée avec Java 1.8 et toutes les autres ont été générées avec Java 1.7.

Cela est résolu, après avoir inclus l’ancienne version de netty (qui a été générée avec Java 1.7) dans mon fichier build.gradle .

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

J’ai rencontré ce problème lors de la tentative de mise à niveau vers la valeur automatique v 1.5 dans Android Studio v 2.3.3. La valeur automatique 1.5 sera probablement compatible avec AS 3 (il nécessite un compilateur java mis à jour)

Pour l’instant, la valeur automatique 1.4.1 fonctionne.

Je suis confronté au même problème avec la bibliothèque d’API Reactive Location pour Android et RxJava 2. Il suffit de mettre à jour build.gradle vers la version 3.0.1 et de réduire la bibliothèque d’API de localisation réactive pour Android et la version de bibliothèque RxJava 2 de 1.0.4 à 1.0.3 dans mon cas.

J’ai rencontré ce problème en essayant d’importer un fichier jar compilé par jdk 1.8 dans Android Studio 3.0. J’ai essayé toutes les solutions ci-dessus, mais aucune ne fonctionne. donc, j’ai demandé au développeur de ce jar de le recomstackr avec jdk 1.7, et puis ça marche bien, pas de nouveau ce problème.

Si possible pour vous:

  1. Mettre à niveau les outils Android pour: classpath ‘com.android.tools.build:gradle:3.0.0’
  2. buildToolsVersion “26.0.2”

Cela devrait régler le problème.

Référence: https://developer.android.com/studio/write/java8-support