web-dev-qa-db-fra.com

Android: Dex ne peut pas analyser le code de la version 52 octets de la version

Je viens de passer à Android Studio 2.1 et cette erreur s'est produite 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 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 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 en construction 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 Assembly, 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 s’est bien déroulé lors de la dernière compilation.

    <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 avec Android Studio 2.1? Les autres l'ont-ils vu? 2) En supposant que ce soit mon erreur et puisque le message d'erreur ne permet pas de 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 .- Héphaïstos

89
Hephaestus

utilisez simplement Java 1.8 avec Android Studio 3.0+ et définissez les travaux suivants pour moi: il semble avoir besoin des derniers outils de génération 

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

et

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

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

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

    apply plugin: 'Java'
    apply plugin: 'jacoco'

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.11'

        sourceCompatibility = 1.7
        targetCompatibility = 1.7
    }
16
nexDev

Si vous utilisez org.jetbrains:annotation:15 et le plugin retrolambda, supprimez la ligne compile org.jetbrains:annotations:15.0 de votre build.gradle et l'erreur disparaîtra. Ça marche pour moi.

8
0wl

Essayez d’ajouter à build.gradle dans la section allprojects

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

ou ajoutez ceci dans dependencies

    sourceCompatibility = 1.7
    targetCompatibility = 1.7

danstous les modulesmanuellement

7
vitalinvent

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 .

7
Faisal Ali

Certaines de vos dépendances ont peut-être été compilées avec Java 8, pas spécialement pour Android. Essayez de basculer ces dépendances vers une version plus ancienne. Je ne sais pas exactement quelle bibliothèque vous devez rétrograder, car vous n'avez pas joint la 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 découvert que la bibliothèque org.codehaus.httpcache4j.uribuilder:2.0.0 requiert Java 8 à partir de github . Ainsi, lorsque je suis passé à 1.1.0, le projet a été construit et déployé avec succès.

7
fobo66

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 (compile '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 supprimé cette dépendance de mon build.gradle et tout compilé avec joie :)

5

Désactiver Instant Run dans Android Studio 2.2 avec le plugin Gradle 2.2.2 a résolu le problème. Le retour à une version antérieure du plug-in Gradle (telle que 2.2.0) a également corrigé le problème, mais c'est moins souhaitable à mon humble avis.

2
StephanBezoen

J'ai résolu ce problème comme ci-dessous:

apply plugin: 'Java'

sourceCompatibility = 1.7
targetCompatibility = 1.7

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
2
李歆扬

Cela m'est arrivé avec Android Studio 2.3.3. La solution que j'ai trouvée consistait à supprimer le dossier de construction, puis Rebuild Project. C'était aussi simple que ça.

2
mp501

J'ai également rencontré 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. Ce fichier JAR version 4.1.16 a été compilé avec Java 1.8 et tous les autres ont été générés avec Java 1.7.

Ceci est résolu après avoir inclus l'ancienne version de netty (générée avec Java 1.7) dans mon fichier build.gradle

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

1
rashok

J'ai rencontré ce problème lors de l'importation d'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. Alors, j’ai demandé au développeur de ce bocal de le recompiler avec jdk 1.7, puis cela fonctionnait bien et ne revenait plus à ce problème.

0
uncle long

Si possible pour vous:

  1. Mettez à niveau les outils Android vers: 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

0
Kanika

Je rencontre le 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 version 1.0 de la bibliothèque d'API Reactive Location pour Android et RxJava 2 . 4 à 1.0.3Il fonctionne bien dans mon cas.

0
Divyam Khandelwal

Je suis tombé sur 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 (nécessite un compilateur Java mis à jour)

Pour l'instant, la valeur automatique 1.4.1 fonctionne.

0