Je viens de passer à Android Studio 2.1 et cette erreur est apparue lors de la tentative de 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 cours de 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 d'assemblage, qui incorpore des modules subordonnés, mais je n'ai changé 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 avec Android Studio 2.1? Les autres l'ont-ils vu? 2) En supposant qu'il s'agit de mon erreur et que le message d'erreur ne m'aide pas à 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 de code? Merci d'avance. -Héphaïstos
la source
Réponses:
utilisez simplement java 1.8 avec Android Studio 3.0+ et définissez les fonctions suivantes: il semble avoir besoin des derniers outils de construction
et
la source
android.dexOptions.incremental
propriété est obsolète et n'a aucun effet sur le processus de génération».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.
la source
Si vous utilisez
org.jetbrains:annotation:15
et retrolambda plugin, supprimez la lignecompile org.jetbrains:annotations:15.0
de votrebuild.gradle
et l'erreur disparaîtra. Ça marche pour moi.la source
Peut-être que certaines de vos dépendances ont é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 devriez rétrograder, car vous n'avez pas joint une liste de 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, à partir de github . Ainsi, lorsque je suis passé à1.1.0
, le projet a été construit et déployé avec succès.la source
Essayez d'ajouter à build.gradle principal dans la section allprojects
ou ajoutez ceci dans les dépendances
dans tous les modules manuellement
la source
J'ai pu résoudre ce problème en ajoutant les lignes suivantes:
à
defaultConfig
dans lebuild.gradle
fichier.Vous pouvez suivre les instructions pour Java 8 sur le lien - https://developer.android.com/guide/platform/j8-jack.html
la source
J'ai eu le même problème avec la dépendance greendao-générateur. 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 s'est bien compilé :)
la source
J'ai résolu ce problème comme ci-dessous:
la source
La désactivation d'Instant Run dans Android Studio 2.2 avec le plugin Gradle 2.2.2 l'a corrigé pour moi. Le retour à une version plus ancienne du plugin Gradle (telle que 2.2.0) l'a également corrigé, mais c'est moins souhaitable à mon humble avis.
la source
Cela m'est arrivé avec Android Studio 2.3.3. La solution que j'ai trouvée était de supprimer le dossier de construction, puis de reconstruire le projet . C'était aussi simple que ça.
la source
J'ai également rencontré la même erreur
Android 2.3.3
après avoir ajouté quelques dépendances JAR. Le problème était dû à la dépendanceio.netty:netty-all:4.1.16.Final
. Ce 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.Cela est résolu, après avoir inclus une version plus ancienne de
netty
(qui a été générée avec Java 1.7) dans monbuild.gradle
fichier.compile 'io.netty:netty-all:4.1.5.Final'
la source
J'ai rencontré ce problème en essayant de passer à la valeur automatique v 1.5 dans Android Studio v 2.3.3. La valeur automatique 1.5 sera vraisemblablement compatible avec AS 3 (elle nécessite un compilateur java mis à jour)
Pour l'instant, la valeur automatique 1.4.1 fonctionne.
la source
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 Reactive Location pour Android et la version de la bibliothèque RxJava 2 de 1.0.4 à 1.0.3 Cela fonctionne bien dans mon cas.
la source
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 recompiler avec jdk 1.7, puis cela fonctionne bien, et ne rencontre plus ce problème.
la source
Si possible pour vous:
Cela devrait régler le problème.
Référence: https://developer.android.com/studio/write/java8-support
la source