Ich habe ein Upgrade auf Android Studio 3.1 durchgeführt und erhalte die folgende Fehlermeldung:
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)}
hier ist meine gradle config:
compileSdkVersion 27
//buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
multiDexEnabled true
//...
}
Wie Sie sehen können, ziele ich auf 27 ab, was bereits vor 24 liegt, über die es sich beschwert. Was genau soll ich tun, um dies zu beheben? Wenn ich auf 1.8 Java wechsle, werde ich dann nicht viele Kunden vermissen? Warum habe ich diesen Fehler nicht erhalten, bevor ich Android Studio aktualisiert habe?
Ich weiß nicht, ob es sich um die LifecycleObserver-Klasse handelt, die ich kürzlich eingefügt habe. Sie war in Kotlin und jetzt habe ich sie in Java geändert, aber nach dem Bereinigen des Projekts wird immer noch der gleiche Fehler angezeigt:
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);
}
}
Wie kann ich nachverfolgen, woher der Fehler kommt, damit ich ihn beheben kann?
Hier sind meine Versionsabhängigkeiten:
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
. "Was genau soll ich tun, um das zu beheben?" - Versuchen Sie, mit aktivierter Java 8-Kompatibilität zu kompilieren . "Wenn ich zu 1.8 Java wechsle, werde ich dann nicht viele Kunden vermissen?" - Nicht für die Standardschnittstellenmethoden, über die sich die Fehlermeldung beschwert. "Warum habe ich diesen Fehler nicht erhalten, bevor ich Android Studio aktualisiert habe?" - möglicherweise eine implizite Abhängigkeit (z. B. Datenbindung).Antworten:
Wie von CommonsWare erwähnt, fügen Sie dies als Referenz in den
android {...}
Abschluss in build.gradle für Ihr App-Modul ein, um das Problem zu beheben:quelle
Sie sollten Java8 verwenden, um dies zu lösen. Basierend auf Google können Sie dies tun (klicken Sie auf Datei> Projektstruktur ). und ändern Sie die Quell- und Zielkompatibilität.
Sie können es auch direkt in der entsprechenden build.gradle-Datei konfigurieren:
quelle
In Gradle auf App-Ebene müssen Sie diesen Code schreiben:
Sie kommen von JavaVersion.java in Android.
@canerkaseler
quelle
Aktualisieren Sie Ihren Build.gradle (Modul: App), fügen Sie einen
compileOptions
Block hinzu und fügen Sie ihn hinzuJavaVersion.VERSION_1_8
quelle
Sie können dieses Problem beheben, indem Sie die Java-Version für Quellkompatibilität und Zielkompatibilität in der neuesten Android Studio-Version 3.4.1 auf 1.8 herabstufen
Öffnen Sie die Moduleinstellungen (Projektstruktur) Winodw, indem Sie mit der rechten Maustaste auf den App-Ordner oder Befehl + Abwärtspfeil auf dem Mac klicken
Gehen Sie zu Module -> Eigenschaften
Ändern Sie die Quellkompatibilitäts- und Zielkompatibilitätsversion in 1.8
Klicken Sie auf Übernehmen oder OK. Es wird Ihr Problem lösen.
Sie können build.gradle auch manuell hinzufügen (Modul: App)
quelle
Verwenden Sie diesen Code in Ihrem build.gradle
quelle
Mein Projekt verwendet ButterKnife und Retro Lambda. Das Festlegen von JavaVersion.VERSION_1_8 funktioniert nicht. Es gibt immer die Schuld an der statischen Schnittstellenfunktion von ButterKnife, bis ich diese Migration von Retrolambda gefunden habe
TL; DR
Fügen Sie einfach JavaVersion.VERSION_1_8 hinzu und ENTFERNEN Sie Retrolambda vollständig aus Ihrem Projekt. Es wird erfolgreich gebaut.
quelle
Dies ist mir auch passiert, aber ich habe dynamische Funktionen verwendet. Ich hatte bereits Java 8-Kompatibilität im App-Modul aktiviert, musste diese Kompatibilitätszeilen jedoch zum Dynamic Feature-Modul hinzufügen, und dann funktionierte es.
quelle
Das Setzen der minSdkVersion auf 21 von 19 löste das Problem für mich.
quelle