J'ai effectué une mise à niveau vers Android Studio 3.1 et j'obtiens l'erreur suivante:
Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner)
Message{kind=ERROR, text=Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner), sources=[Unknown source file], tool name=Optional.of(D8)}
voici ma config gradle:
compileSdkVersion 27
//buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
multiDexEnabled true
//...
}
Comme vous pouvez le voir, je cible 27 qui est déjà en avance sur 24 dont il se plaint. Que dois-je faire exactement pour résoudre ce problème? Si je passe à la version 1.8 java, ne manquerai-je pas beaucoup de clients? Pourquoi n'ai-je pas eu cette erreur avant de mettre à niveau Android Studio?
Je ne sais pas s'il s'agit de la classe LifecycleObserver que j'ai récemment installée, c'était dans kotlin et maintenant je l'ai changé en java mais j'obtiens toujours la même erreur après le nettoyage du projet:
public class LifeCycleAwareObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onAppBackgrounded() {
AnalyticsUtils.trackStartSession(true);
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onAppForegrounded() {
AnalyticsUtils.trackStartSession(false);
}
}
Comment savoir d'où vient l'erreur pour que je puisse la corriger?
voici mes dépendances de version:
project.ext {
firebase_version = '12.0.0'
supportlib_version = '27.0.2'
room_version = '1.0.0'
espresso_version = '3.0.1'
archLifecycleVersion = '1.1.1'
}
targetSdkVersion
. "Que dois-je faire exactement pour résoudre ce problème?" - essayez de compiler avec la compatibilité Java 8 activée . "Si je passe à la version 1.8 java, ne manquerai-je pas beaucoup de clients?" - pas pour les méthodes d'interface par défaut dont le message d'erreur se plaint. "pourquoi je n'obtenais pas cette erreur avant de mettre à jour android studio." - peut-être une dépendance implicite (par exemple, la liaison de données).Réponses:
Comme CommonsWare l'a mentionné, pour référence, ajoutez ceci dans la
android {...}
fermeture du build.gradle de votre module d'application pour résoudre le problème:la source
Vous devez utiliser Java8 pour résoudre ce problème, basé sur Google, vous pouvez le faire en (cliquez sur Fichier> Structure du projet ). et modifiez la compatibilité source et la compatibilité cible.
Et vous pouvez également le configurer directement dans le fichier build.gradle correspondant:
la source
Dans Gradle au niveau de l'application, vous devez écrire le code suivant:
Ils viennent de JavaVersion.java dans Android.
@canerkaseler
la source
Mettez à jour votre build.gradle (Module: app) ajoutez un
compileOptions
bloc et ajoutezJavaVersion.VERSION_1_8
la source
Vous pouvez résoudre ce problème en rétrogradant la compatibilité Java source et compatibilité cible vers la version 1.8 dans la dernière version d'Android Studio 3.4.1.
Ouvrez les paramètres du module (structure du projet) Winodw en cliquant avec le bouton droit sur le dossier de l'application ou sur Commande + Flèche bas sur Mac
Allez dans Modules -> Propriétés
Changer la version de compatibilité source et de compatibilité cible en 1.8
Cliquez sur Appliquer ou OK C'est tout. Cela résoudra votre problème.
Vous pouvez également ajouter manuellement dans build.gradle (Module: app)
la source
Utilisez ce code dans votre build.gradle
la source
Mon projet utilise ButterKnife et Retro lambda, définir JavaVersion.VERSION_1_8 ne fonctionnera pas. Il blâme toujours la fonction d'interface statique de ButterKnife jusqu'à ce que je trouve ce Migrate from Retrolambda
TL; DR
Ajoutez simplement JavaVersion.VERSION_1_8 et RETIREZ complètement retrolambda de votre projet. Il se construira avec succès.
la source
Cela m'est également arrivé, mais en utilisant les fonctionnalités dynamiques. J'ai déjà activé la compatibilité Java 8 dans le module d'application, mais j'ai dû ajouter ces lignes de compatibilité au module Dynamic Feature, puis cela a fonctionné.
la source
La définition de minSdkVersion à 21 sur 19 a résolu le problème pour moi.
la source