web-dev-qa-db-fra.com

Les méthodes d'interface par défaut ne sont prises en charge qu'à partir d'Android N

je suis passé à 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)}

enter image description here

voici ma configuration config:

      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 et dont il se plaint? Que dois-je faire exactement pour résoudre ce problème? Si je passe à 1.8 Java, est-ce que je ne manquerai pas beaucoup de clients? Pourquoi est-ce que je ne recevais pas cette erreur avant de mettre à jour Android Studio?.

je ne sais pas s'il s'agit de la classe LifecycleObserver que j'ai récemment introduite, elle était en kotlin et maintenant je l'ai changée 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 tracer d'où vient l'erreur pour que je puisse la réparer?

voici mes dépendances de ma 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'
    }
121
j2emanue

Comme CommonsWare l'a mentionné, pour référence, ajoutez ceci dans la fermeture Android {...} dans le fichier build.gradle pour que votre module d'application résolve le problème:

Android {
...
  compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
...
}
318
j2emanue

Vous devez utiliser Java8 pour résoudre ce problème, en vous basant sur google , vous pouvez le faire en cliquant sur ( Fichier> Structure du projet ). et changez la compatibilité source et la compatibilité cible.

enter image description here

Et vous pouvez également le configurer directement dans le fichier build.gradle correspondant:

Android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
27
Amir

Mettez à jour votre build.gradle (Module: app), ajoutez le bloc compileOptions et ajoutez le JavaVersion.VERSION_1_8

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "ApplicationId"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
13
Vasudev Vyas

Dans le niveau de l'application, vous devez écrire ce code:

Android {
...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Ils proviennent de JavaVersion.Java sous Android.

Une énumération de Java versions.

Avant 9h: http://www.Oracle.com/technetwork/Java/javase/versioning-naming-139433.html

Après 9: http://openjdk.Java.net/jeps/22

@canerkaseler

10
Caner

Utilisez ce code dans votre build.gradle

Android {
    compileOptions {
        incremental true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
2
Mahabub Karim

Cela m'est aussi arrivé, mais en utilisant des fonctionnalités dynamiques. J'avais déjà la compatibilité Java 8 activée dans le module d'application, mais je devais ajouter ces lignes de compatibilité au module Dynamic Feature, puis cela fonctionnait.

0
Joaquin Iurchuk

Vous pouvez résoudre ce problème en rétrogradant la version Java de la compatibilité source et de la compatibilité cible dans la dernière version Android Studio 3.4.1.

  1. Ouvrez les paramètres du module (structure du projet) Winodw en cliquant avec le bouton droit de la souris sur le dossier de l'application ou sur la commande Commande + flèche vers le bas sur Mac enter image description here

  2. Allez dans Modules -> Propriétés enter image description here

  3. Modifiez la version de compatibilité de source et de compatibilité cible en version 1.8 enter image description here

  4. Cliquez sur Appliquer ou sur OK, c'est tout. Cela résoudra votre problème.

Aussi, vous pouvez ajouter manuellement build.gradle (Module: app)

Android {
...

compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }

...
}
0
Rajesh Dalsaniya